more loader work

This commit is contained in:
dcode
2019-05-25 00:38:50 +02:00
parent a684bb1f65
commit 9620f18249
33 changed files with 5101 additions and 1528 deletions

View File

@ -7,7 +7,7 @@ Usage
----- -----
```js ```js
const loader = require("@assemblyscript/loader"); const loader = require("assemblyscript/lib/loader");
... ...
``` ```
@ -26,54 +26,143 @@ API
* **demangle**<`T`>(exports: `WasmExports`, baseModule?: `Object`): `T`<br /> * **demangle**<`T`>(exports: `WasmExports`, baseModule?: `Object`): `T`<br />
Demangles an AssemblyScript module's exports to a friendly object structure. You usually don't have to call this manually as instantiation does this implicitly. Demangles an AssemblyScript module's exports to a friendly object structure. You usually don't have to call this manually as instantiation does this implicitly.
**Note:** `T` above can either be omitted if the structure of the module is unknown, or can reference a `.d.ts` (i.e. `typeof MyModule`) as produced by the compiler with the `-d` option. **Note** that `T` above can either be omitted if the structure of the module is unknown, or can reference a `.d.ts` (i.e. `typeof MyModule`) as produced by the compiler with the `-d` option.
Instances are automatically populated with useful utility: Instances are automatically populated with useful utility:
* **I8**: `Int8Array`<br /> * **I8**: `Int8Array`<br />
An 8-bit signed integer view on the memory. An 8-bit signed integer view on the memory.
```ts
var value = module.I8[ptr];
```
* **U8**: `Uint8Array`<br /> * **U8**: `Uint8Array`<br />
An 8-bit unsigned integer view on the memory. An 8-bit unsigned integer view on the memory.
```ts
var value = module.U8[ptr];
```
* **I16**: `Int16Array`<br /> * **I16**: `Int16Array`<br />
A 16-bit signed integer view on the memory. A 16-bit signed integer view on the memory.
```ts
var value = module.I16[ptr >>> 1];
```
* **U16**: `Uint16Array`<br /> * **U16**: `Uint16Array`<br />
A 16-bit unsigned integer view on the memory. A 16-bit unsigned integer view on the memory.
```ts
var value = module.U16[ptr >>> 1];
```
* **I32**: `Int32Array`<br /> * **I32**: `Int32Array`<br />
A 32-bit signed integer view on the memory. A 32-bit signed integer view on the memory.
```ts
var value = module.I32[ptr >>> 2];
```
* **U32**: `Uint32Array`<br /> * **U32**: `Uint32Array`<br />
A 32-bit unsigned integer view on the memory. A 32-bit unsigned integer view on the memory.
```ts
var value = module.U32[ptr >>> 2];
```
* **I64**: `BigInt64Array`<br /> * **I64**: `BigInt64Array`<br />
A 64-bit signed integer view on the memory<sup>1</sup>. A 64-bit signed integer view on the memory, if supported by the VM.
```ts
var value = module.I64[ptr >>> 3];
```
* **U64**: `BigUint64Array`<br /> * **U64**: `BigUint64Array`<br />
A 64-bit unsigned integer view on the memory<sup>1</sup>. A 64-bit unsigned integer view on the memory, if supported by the VM.
```ts
var value = module.U64[ptr >>> 3];
```
* **F32**: `Float32Array`<br /> * **F32**: `Float32Array`<br />
A 32-bit float view on the memory. A 32-bit float view on the memory.
```ts
var value = module.I32[ptr >>> 2];
```
* **F64**: `Float64Array`<br /> * **F64**: `Float64Array`<br />
A 64-bit float view on the memory. A 64-bit float view on the memory.
* **newString**(str: `string`): `number`<br /> ```ts
Allocates a new string in the module's memory and returns its retained pointer. When done with the string, make sure to `Module#__release` it. var value = module.F64[ptr >>> 3];
```
* **getString**(ptr: `number`): `string`<br /> * **__allocString**(str: `string`): `number`<br />
Reads a string from the module's memory by its pointer. Allocates a new string in the module's memory and returns a reference (pointer) to it.
* **newArray**(id: `number`, values: `number[]`): `number`<br /> ```ts
Allocates a new array in the module's memory and returns its retained pointer. var ref = module.__retain(module.__allocString("hello world"));
The `id` is the unique runtime id of the respective array class. If you are using `Int32Array` for example, the best way to know the relevant value is an `export const INT32ARRAY_ID = idof<Int32Array>()`. When done with the array, make sure to `Module#__release` it. ...
module.__release(ref);
```
* **getArray**(ptr: `number`): `number[]`<br /> * **__getString**(ref: `number`): `string`<br />
Gets the values of an array in the module's memory by its pointer. Gets the value of a string from the module's memory.
<sup>1</sup> This feature has not yet landed in any VM as of this writing. ```ts
var str = module.__getString(ref);
...
```
* **__allocArray**(id: `number`, values: `number[]`): `number`<br />
Allocates a new array in the module's memory and returns a reference (pointer) to it.
The `id` is the unique runtime id of the respective array class. If you are using `Int32Array` for example, the best way to know the id is an `export const INT32ARRAY_ID = idof<Int32Array>()`. When done with the array, make sure to release it.
```ts
var ref = module.__retain(module.__allocArray(module.INT32ARRAY, [1, 2, 3]));
...
module.__release(ref);
```
* **__getArray**(ref: `number`): `number[]`<br />
Gets the values of an array from the module's memory.
```ts
var arr = module.__getArray(ref);
...
```
* **__retain**(ref: `number`): `number`<br />
Retains a reference externally, making sure that it doesn't become collected prematurely. Returns the reference.
* **__release**(ref: `number`): `void`<br />
Releases a previously retained reference to an object, allowing the runtime to collect it once its reference count reaches zero.
* **__alloc**(size: `number`, id: `number`): `number`<br />
Allocates an instance of the class represented by the specified id. If you are using `MyClass` for example, the best way to know the id and the necessary size is an `export const MYCLASS_ID = idof<MyClass>()` and an `export const MYCLASS_SIZE = offsetof<MyClass>()`. Afterwards, use the respective views to assign values to the class's memory while making sure to retain interior references to other managed objects once. When done with the class, make sure to release it, which will automatically release any interiour references once the class becomes collected.
```ts
var ref = module.__retain(module.__alloc(module.MYCLASS_SIZE, module.MYCLASS_ID));
F32[ref + MYCLASS_BASICFIELD1_OFFSET >>> 2] = field1_value_f32;
U32[ref + MYCLASS_MANAGEDFIELD2_OFFSET >>> 2] = module.__retain(field2_value_ref);
...
module.__release(ref);
```
* **__instanceof**(ref: `number`, baseId: `number`): `boolean`<br />
Tests whether an object is an instance of the class represented by the specified base id.
* **__collect**(): `void`<br />
Forces a cycle collection. Only relevant if objects potentially forming reference cycles are used.
**Note** that the views like `I32` above will automatically be updated when the module's memory grows. Don't cache these if this can happen.
**Note** that the allocation and ownership features above require the `full` (this is the default) or the `stub` runtime to be present in your module. Other runtime variations do not export this functionality without further ado (so the compiler can eliminate what's dead code).
**Note** that references returned from exported functions have already been retained for you and the runtime expects that you release them once not needed anymore.
Examples Examples
-------- --------
@ -88,62 +177,6 @@ const myModule = loader.instantiateBuffer(fs.readFileSync("myModule.wasm"), myIm
const myModule = await loader.instantiateStreaming(fetch("myModule.wasm"), myImports); const myModule = await loader.instantiateStreaming(fetch("myModule.wasm"), myImports);
``` ```
### Reading/writing basic values to/from memory
```js
var ptrToInt8 = ...;
var value = myModule.I8[ptrToInt8]; // alignment of log2(1)=0
var ptrToInt16 = ...;
var value = myModule.I16[ptrToInt16 >>> 1]; // alignment of log2(2)=1
var ptrToInt32 = ...;
var value = myModule.I32[ptrToInt32 >>> 2]; // alignment of log2(4)=2
var ptrToInt64 = ...;
var value = myModule.I64[ptrToInt64 >>> 3]; // alignment of log2(8)=3
var ptrToFloat32 = ...;
var value = myModule.F32[ptrToFloat32 >>> 2]; // alignment of log2(4)=2
var ptrToFloat64 = ...;
var value = myModule.F64[ptrToFloat64 >>> 3]; // alignment of log2(8)=3
// Likewise, for writing
myModule.I8[ptrToInt8] = newValue;
myModule.I16[ptrToInt16 >>> 1] = newValue;
myModule.I32[ptrToInt32 >>> 2] = newValue;
myModule.I64[ptrToInt64 >>> 3] = newValue;
myModule.F32[ptrToFloat32 >>> 2] = newValue;
myModule.F64[ptrToFloat64 >>> 3] = newValue;
```
**Note:** Make sure to reference the views as shown above as these will automatically be updated when the module's memory grows.
### Working with strings and arrays
Strings and arrays cannot yet flow in and out of WebAssembly naturally, hence it is necessary to create them in the module's memory using the `newString` and `newArray` helpers. Afterwards, instead of passing the string or array directly, the resulting reference (pointer) is provided instead:
```js
var str = "Hello world!";
var ptr = module.newString(str);
// do something with ptr, i.e. call a WebAssembly export
...
// when done, allow the runtime to collect it
module.__release(ptr);
```
Similarly, when a string or array is returned from a WebAssembly function, a reference (pointer) is received on the JS side and the `getString` and `getArray` helpers can be used to obtain their values:
```js
var ptrToString = ...;
var str = module.getString(ptrToString);
// ... do something with str ...
```
### Usage with TypeScript definitions produced by the compiler ### Usage with TypeScript definitions produced by the compiler
```ts ```ts

62
lib/loader/index.d.ts vendored
View File

@ -3,33 +3,14 @@ import "@types/webassembly-js-api";
/** WebAssembly imports with two levels of nesting. */ /** WebAssembly imports with two levels of nesting. */
interface ImportsObject { interface ImportsObject {
[key: string]: {}, [key: string]: {},
env: { env?: {
memory?: WebAssembly.Memory, memory?: WebAssembly.Memory,
table?: WebAssembly.Table, table?: WebAssembly.Table,
abort?: (msg: number, file: number, line: number, column: number) => void abort?: (msg: number, file: number, line: number, column: number) => void,
trace?: (msg: number, numArgs?: number, ...args: any[]) => void
} }
} }
type TypedArray
= Int8Array
| Uint8Array
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Float32Array
| Float64Array;
type TypedArrayConstructor
= Int8ArrayConstructor
| Uint8ArrayConstructor
| Int16ArrayConstructor
| Uint16ArrayConstructor
| Int32ArrayConstructor
| Uint32ArrayConstructor
| Float32ArrayConstructor
| Float32ArrayConstructor;
/** Utility mixed in by the loader. */ /** Utility mixed in by the loader. */
interface ASUtil { interface ASUtil {
/** An 8-bit signed integer view on the memory. */ /** An 8-bit signed integer view on the memory. */
@ -52,25 +33,24 @@ interface ASUtil {
readonly F32: Float32Array; readonly F32: Float32Array;
/** A 64-bit float view on the memory. */ /** A 64-bit float view on the memory. */
readonly F64: Float64Array; readonly F64: Float64Array;
/** Allocates a new string in the module's memory and returns its pointer. */ /** Allocates a new string in the module's memory and returns a reference (pointer) to it. */
newString(str: string): number; __allocString(str: string): number;
/** Gets a string from the module's memory by its pointer. */ /** Gets the value of a string from the module's memory. */
getString(ptr: number): string; __getString(ref: number): string;
/** Copies a typed array into the module's memory and returns its pointer. */ /** Allocates a new array in the module's memory and returns a reference (pointer) to it. */
newArray(view: TypedArray, length?: number): number; __allocArray(id: number, values: number[]): number;
/** Creates a typed array in the module's memory and returns its pointer. */ /** Gets the values of an array from the module's memory. */
newArray(ctor: TypedArrayConstructor, length: number, unsafe?: boolean): number; __getArray(ref: number): number[];
/** Gets a view on a typed array in the module's memory by its pointer. */ /** Retains a reference externally, making sure that it doesn't become collected prematurely. Returns the reference. */
getArray<T extends TypedArray = TypedArray>(ctor: TypedArrayConstructor, ptr: number): T; __retain(ref: number): number;
/** Frees a typed array in the module's memory. Must not be accessed anymore afterwards. */ /** Releases a previously retained reference to an object, allowing the runtime to collect it once its reference count reaches zero. */
freeArray(ptr: number): void; __release(ref: number): void;
/** Gets a function by its pointer. */ /** Allocates an instance of the class represented by the specified id. */
getFunction<R = any>(ptr: number): (...args: any[]) => R; __alloc(size: number, id: number): number;
/** /** Tests whether an object is an instance of the class represented by the specified base id. */
* Creates a new function in the module's table and returns its pointer. Note that only actual __instanceof(ref: number, baseId: number): boolean;
* WebAssembly functions, i.e. as exported by the module, are supported. /** Forces a cycle collection. Only relevant if objects potentially forming reference cycles are used. */
*/ __collect(): void;
newFunction(fn: (...args: any[]) => any): number;
} }
/** Instantiates an AssemblyScript module using the specified imports. */ /** Instantiates an AssemblyScript module using the specified imports. */

View File

@ -14,11 +14,15 @@ const ARRAY = 1 << 0;
const SET = 1 << 1; const SET = 1 << 1;
const MAP = 1 << 2; const MAP = 1 << 2;
const VAL_ALIGN = 1 << 4; const VAL_ALIGN = 1 << 4;
const VAL_NULLABLE = 1 << 9; const VAL_SIGNED = 1 << 9;
const VAL_MANAGED = 1 << 10; const VAL_FLOAT = 1 << 10;
const KEY_ALIGN = 1 << 11; const VAL_NULLABLE = 1 << 11;
const KEY_NULLABLE = 1 << 16; const VAL_MANAGED = 1 << 12;
const KEY_MANAGED = 1 << 17; const KEY_ALIGN = 1 << 13;
const KEY_SIGNED = 1 << 18;
const KEY_FLOAT = 1 << 19;
const KEY_NULLABLE = 1 << 20;
const KEY_MANAGED = 1 << 21;
// ArrayBufferView layout // ArrayBufferView layout
const ABV_BUFFER_OFFSET = 0; const ABV_BUFFER_OFFSET = 0;
@ -28,41 +32,41 @@ const ABV_SIZE = 12;
const BIGINT = typeof BigUint64Array !== "undefined"; const BIGINT = typeof BigUint64Array !== "undefined";
const THIS = Symbol(); const THIS = Symbol();
const CHUNKSIZE = 1024;
/** Gets a string from an U32 and an U16 view on a memory. */ /** Gets a string from an U32 and an U16 view on a memory. */
function getStringImpl(U32, U16, ptr) { function getStringImpl(U32, U16, ref) {
var length = U32[(ptr + SIZE_OFFSET) >>> 2] >>> 1; var length = U32[(ref + SIZE_OFFSET) >>> 2] >>> 1;
var offset = ptr >>> 1; var offset = ref >>> 1;
var parts = []; if (length <= CHUNKSIZE) return String.fromCharCode.apply(String, U16.subarray(offset, offset + length));
const chunkSize = 1024; const parts = [];
while (length > chunkSize) { do {
let last = U16[offset + chunkSize - 1]; const last = U16[offset + CHUNKSIZE - 1];
let size = last >= 0xD800 && last < 0xDC00 ? chunkSize - 1 : chunkSize; const size = last >= 0xD800 && last < 0xDC00 ? CHUNKSIZE - 1 : CHUNKSIZE;
let part = U16.subarray(offset, offset += size); parts.push(String.fromCharCode.apply(String, U16.subarray(offset, offset += size)));
parts.push(String.fromCharCode.apply(String, part));
length -= size; length -= size;
} } while (length > CHUNKSIZE);
return parts.join("") + String.fromCharCode.apply(String, U16.subarray(offset, offset + length)); return parts.join("") + String.fromCharCode.apply(String, U16.subarray(offset, offset + length));
} }
/** Prepares the base module prior to instantiation. */ /** Prepares the base module prior to instantiation. */
function preInstantiate(imports) { function preInstantiate(imports) {
var baseModule = {}; const baseModule = {};
function getString(memory, ptr) { function getString(memory, ref) {
if (!memory) return "<yet unknown>"; if (!memory) return "<yet unknown>";
var buffer = memory.buffer; const buffer = memory.buffer;
return getStringImpl(new Uint32Array(buffer), new Uint16Array(buffer), ptr); return getStringImpl(new Uint32Array(buffer), new Uint16Array(buffer), ref);
} }
// add common imports used by stdlib for convenience // add common imports used by stdlib for convenience
var env = (imports.env = imports.env || {}); const env = (imports.env = imports.env || {});
env.abort = env.abort || function abort(mesg, file, line, colm) { env.abort = env.abort || function abort(mesg, file, line, colm) {
var memory = baseModule.memory || env.memory; // prefer exported, otherwise try imported const memory = baseModule.memory || env.memory; // prefer exported, otherwise try imported
throw Error("abort: " + getString(memory, mesg) + " at " + getString(memory, file) + ":" + line + ":" + colm); throw Error("abort: " + getString(memory, mesg) + " at " + getString(memory, file) + ":" + line + ":" + colm);
} }
env.trace = env.trace || function trace(mesg, n) { env.trace = env.trace || function trace(mesg, n) {
var memory = baseModule.memory || env.memory; const memory = baseModule.memory || env.memory;
console.log("trace: " + getString(memory, mesg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", ")); console.log("trace: " + getString(memory, mesg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", "));
} }
imports.Math = imports.Math || Math; imports.Math = imports.Math || Math;
@ -73,12 +77,12 @@ function preInstantiate(imports) {
/** Prepares the final module once instantiation is complete. */ /** Prepares the final module once instantiation is complete. */
function postInstantiate(baseModule, instance) { function postInstantiate(baseModule, instance) {
var rawExports = instance.exports; const rawExports = instance.exports;
var memory = rawExports.memory; const memory = rawExports.memory;
var table = rawExports.table; const table = rawExports.table;
var alloc = rawExports["__alloc"]; const alloc = rawExports["__alloc"];
var retain = rawExports["__retain"]; const retain = rawExports["__retain"];
var rtti = rawExports["__rtti"] | 0; const rtti = rawExports["__rtti"] || ~0; // oob if not present
// Provide views for all sorts of basic values // Provide views for all sorts of basic values
var buffer, I8, U8, I16, U16, I32, U32, F32, F64, I64, U64; var buffer, I8, U8, I16, U16, I32, U32, F32, F64, I64, U64;
@ -120,32 +124,50 @@ function postInstantiate(baseModule, instance) {
/** Gets the runtime alignment of a collection's values or keys. */ /** Gets the runtime alignment of a collection's values or keys. */
function getAlign(which, info) { function getAlign(which, info) {
return 31 - Math.clz32((info / which) & 31); return 31 - Math.clz32((info / which) & 31); // -1 if none
} }
/** Allocates a new string in the module's memory and returns its retained pointer. */ /** Allocates a new string in the module's memory and returns its retained pointer. */
function newString(str) { function __allocString(str) {
const length = str.length; const length = str.length;
const ptr = alloc(length << 1, STRING_ID); const ref = alloc(length << 1, STRING_ID);
checkMem(); checkMem();
for (let i = 0, j = ptr >>> 1; i < length; ++i) U16[j + i] = str.charCodeAt(i); for (let i = 0, j = ref >>> 1; i < length; ++i) U16[j + i] = str.charCodeAt(i);
return retain(ptr); return ref;
} }
baseModule.newString = newString; baseModule.__allocString = __allocString;
/** Reads a string from the module's memory by its pointer. */ /** Reads a string from the module's memory by its pointer. */
function getString(ptr) { function __getString(ref) {
checkMem(); checkMem();
const id = U32[ptr + ID_OFFSET >>> 2]; const id = U32[ref + ID_OFFSET >>> 2];
if (id !== STRING_ID) throw Error("not a string: " + ptr); if (id !== STRING_ID) throw Error("not a string: " + ref);
return getStringImpl(U32, U16, ptr); return getStringImpl(U32, U16, ref);
} }
baseModule.getString = getString; baseModule.__getString = __getString;
/** Gets the view matching the specified alignment, signedness and floatness. */
function getView(align, signed, float) {
if (float) {
switch (align) {
case 2: return F32;
case 3: return F64;
}
} else {
switch (align) {
case 0: return signed ? I8 : U8;
case 1: return signed ? I16 : U16;
case 2: return signed ? I32 : U32;
case 3: return signed ? I64 : U64;
}
}
throw Error("unsupported align: " + align);
}
/** Allocates a new array in the module's memory and returns its retained pointer. */ /** Allocates a new array in the module's memory and returns its retained pointer. */
function newArray(id, values) { function __allocArray(id, values) {
const info = getInfo(id); const info = getInfo(id);
if (!(info & ARRAY)) throw Error("not an array: " + id + " @ " + info); if (!(info & ARRAY)) throw Error("not an array: " + id + " @ " + info);
const align = getAlign(VAL_ALIGN, info); const align = getAlign(VAL_ALIGN, info);
@ -156,23 +178,16 @@ function postInstantiate(baseModule, instance) {
U32[arr + ABV_BUFFER_OFFSET >>> 2] = retain(buf); U32[arr + ABV_BUFFER_OFFSET >>> 2] = retain(buf);
U32[arr + ABV_DATASTART_OFFSET >>> 2] = buf; U32[arr + ABV_DATASTART_OFFSET >>> 2] = buf;
U32[arr + ABV_DATALENGTH_OFFSET >>> 2] = length << align; U32[arr + ABV_DATALENGTH_OFFSET >>> 2] = length << align;
var view; const view = getView(align, info & VAL_SIGNED, info & VAL_FLOAT);
switch (align) {
case 0: view = U8; break;
case 1: view = U16; break;
case 2: view = U32; break;
case 3: view = U64; break;
default: throw Error("unsupported align: " + align);
}
for (let i = 0; i < length; ++i) view[(buf >> align) + i] = values[i]; for (let i = 0; i < length; ++i) view[(buf >> align) + i] = values[i];
if (info & VAL_MANAGED) for (let i = 0; i < length; ++i) retain(values[i]); if (info & VAL_MANAGED) for (let i = 0; i < length; ++i) retain(values[i]);
return retain(arr); return arr;
} }
baseModule.newArray = newArray; baseModule.__allocArray = __allocArray;
/** Gets the values of an array in the module's memory by its pointer. */ /** Gets the values of an array in the module's memory by its pointer. */
function getArray(arr) { function __getArray(arr) {
checkMem(); checkMem();
const id = U32[arr + ID_OFFSET >>> 2]; const id = U32[arr + ID_OFFSET >>> 2];
const info = getInfo(id); const info = getInfo(id);
@ -180,19 +195,22 @@ function postInstantiate(baseModule, instance) {
const align = getAlign(VAL_ALIGN, info); const align = getAlign(VAL_ALIGN, info);
var buf = U32[arr + ABV_DATASTART_OFFSET >>> 2]; var buf = U32[arr + ABV_DATASTART_OFFSET >>> 2];
const length = U32[buf + SIZE_OFFSET >>> 2] >>> align; const length = U32[buf + SIZE_OFFSET >>> 2] >>> align;
var view; const view = getView(align, info & VAL_SIGNED, info & VAL_FLOAT);
switch (align) {
// TODO: signedness/floats
case 0: view = U8; break;
case 1: view = U16; break;
case 2: view = U32; break;
case 3: view = U64; break;
default: throw Error("unsupported align: " + align);
}
return Array.from(view.slice(buf >>>= align, buf + length)); return Array.from(view.slice(buf >>>= align, buf + length));
} }
baseModule.getArray = getArray; baseModule.__getArray = __getArray;
function __instanceof(ref, baseId) {
var id = U32[(ref + ID_OFFSET) >>> 2];
if (id <= U32[rtti >>> 2]) {
do if (id == baseId) return true;
while (id = getBase(id));
}
return false;
}
baseModule.__instanceof = __instanceof;
// Pull basic exports to baseModule so code in preInstantiate can use them // Pull basic exports to baseModule so code in preInstantiate can use them
baseModule.memory = baseModule.memory || memory; baseModule.memory = baseModule.memory || memory;

View File

@ -49,7 +49,7 @@ export function varadd(a: i32 = 1, b: i32 = 2): i32 {
return a + b; return a + b;
} }
export const varadd_ptr = varadd; export const varadd_ref = varadd;
export function calladd(fn: (a: i32, b: i32) => i32, a: i32, b: i32): i32 { export function calladd(fn: (a: i32, b: i32) => i32, a: i32, b: i32): i32 {
return fn(a, b); return fn(a, b);
@ -60,3 +60,5 @@ export function dotrace(num: f64): void {
} }
export const INT32ARRAY_ID = idof<Int32Array>(); export const INT32ARRAY_ID = idof<Int32Array>();
export const UINT32ARRAY_ID = idof<Uint32Array>();
export const FLOAT32ARRAY_ID = idof<Float32Array>();

View File

@ -24,43 +24,70 @@ assert(module.memory instanceof WebAssembly.Memory);
assert(typeof module.memory.copy === "function"); assert(typeof module.memory.copy === "function");
// should be able to get an exported string // should be able to get an exported string
assert.strictEqual(module.getString(module.COLOR), "red"); assert.strictEqual(module.__getString(module.COLOR), "red");
// should be able to allocate and work with a new string // should be able to allocate and work with a new string
var str = "Hello world!𤭢"; {
var ptr = module.newString(str); let str = "Hello world!𤭢";
assert.strictEqual(module.getString(ptr), str); let ref = module.__retain(module.__allocString(str));
assert.strictEqual(module.strlen(ptr), str.length); assert.strictEqual(module.__getString(ref), str);
assert.strictEqual(module.strlen(ref), str.length);
module.__release(ref);
}
// should be able to allocate a typed array and sum up its values // should be able to allocate a typed array
var arr = [1, 2, 3, 4, 5, 0x7fffffff]; {
ptr = module.newArray(module.INT32ARRAY_ID, arr); var arr = [1, 2, 3, 4, 5, 0x80000000 | 0];
assert.strictEqual(module.sum(ptr), arr.reduce((a, b) => a + b, 0) | 0); let ref = module.__retain(module.__allocArray(module.INT32ARRAY_ID, arr));
assert(module.__instanceof(ref, module.INT32ARRAY_ID));
// should be able to get a view on an internal typed array // should be able to get a view on an internal typed array
assert.deepEqual(Array.from(module.getArray(ptr)), arr); assert.deepEqual(module.__getArray(ref), arr);
// should be able to release no longer needed references // should be able to sum up its values
module.__release(ptr); assert.strictEqual(module.sum(ref), arr.reduce((a, b) => (a + b) | 0, 0) | 0);
try {
module.__release(ptr);
assert(false);
} catch (e) {};
// should be able to just call a function with variable arguments // should be able to release no longer needed references
module.__release(ref);
try { module.__release(ref); assert(false); } catch (e) {};
}
// should be able to distinguish between signed and unsigned
{
let arr = [1, -1 >>> 0, 0x80000000];
let ref = module.__retain(module.__allocArray(module.UINT32ARRAY_ID, arr));
assert(module.__instanceof(ref, module.UINT32ARRAY_ID));
assert.deepEqual(module.__getArray(ref), arr);
module.__release(ref);
try { module.__release(ref); assert(false); } catch (e) {};
}
// should be able to distinguish between integer and float
{
let arr = [0.0, 1.5, 2.5];
let ref = module.__retain(module.__allocArray(module.FLOAT32ARRAY_ID, arr));
assert(module.__instanceof(ref, module.FLOAT32ARRAY_ID));
assert.deepEqual(module.__getArray(ref), arr);
module.__release(ref);
try { module.__release(ref); assert(false); } catch (e) {};
}
// should be able to correctly call a function with variable arguments
assert.strictEqual(module.varadd(), 3); assert.strictEqual(module.varadd(), 3);
assert.strictEqual(module.varadd(2, 3), 5); assert.strictEqual(module.varadd(2, 3), 5);
assert.strictEqual(module.varadd(2), 4); assert.strictEqual(module.varadd(2), 4);
// TBD: table is no more exported by default to allow more optimizations
// should be able to get a function from the table and just call it with variable arguments // should be able to get a function from the table and just call it with variable arguments
// var fn = module.getFunction(module.varadd_ptr); // var fn = module.getFunction(module.varadd_ref);
// assert.strictEqual(fn(), 3); // assert.strictEqual(fn(), 3);
// assert.strictEqual(fn(2, 3), 5); // assert.strictEqual(fn(2, 3), 5);
// assert.strictEqual(fn(2), 4); // assert.strictEqual(fn(2), 4);
// should be able to create a new function and call it from WASM // should be able to create a new function and call it from WASM
// ptr = module.newFunction(module.varadd); // ref = module.newFunction(module.varadd);
// assert.strictEqual(module.calladd(ptr, 2, 3), 5); // assert.strictEqual(module.calladd(ref, 2, 3), 5);
// should be able to use a class // should be able to use a class
var car = new module.Car(5); var car = new module.Car(5);

View File

@ -4145,6 +4145,8 @@ export function compileVisitMembers(compiler: Compiler): void {
function typeToRuntimeFlags(type: Type): TypeinfoFlags { function typeToRuntimeFlags(type: Type): TypeinfoFlags {
var flags = TypeinfoFlags.VALUE_ALIGN_0 * (1 << type.alignLog2); var flags = TypeinfoFlags.VALUE_ALIGN_0 * (1 << type.alignLog2);
if (type.is(TypeFlags.SIGNED)) flags |= TypeinfoFlags.VALUE_SIGNED;
if (type.is(TypeFlags.FLOAT)) flags |= TypeinfoFlags.VALUE_FLOAT;
if (type.is(TypeFlags.NULLABLE)) flags |= TypeinfoFlags.VALUE_NULLABLE; if (type.is(TypeFlags.NULLABLE)) flags |= TypeinfoFlags.VALUE_NULLABLE;
if (type.isManaged) flags |= TypeinfoFlags.VALUE_MANAGED; if (type.isManaged) flags |= TypeinfoFlags.VALUE_MANAGED;
return flags / TypeinfoFlags.VALUE_ALIGN_0; return flags / TypeinfoFlags.VALUE_ALIGN_0;

View File

@ -43,22 +43,30 @@ export const enum TypeinfoFlags {
VALUE_ALIGN_3 = 1 << 7, VALUE_ALIGN_3 = 1 << 7,
/** Value alignment of 16 bytes. */ /** Value alignment of 16 bytes. */
VALUE_ALIGN_4 = 1 << 8, VALUE_ALIGN_4 = 1 << 8,
/** Value is a signed type. */
VALUE_SIGNED = 1 << 9,
/** Value is a float type. */
VALUE_FLOAT = 1 << 10,
/** Value type is nullable. */ /** Value type is nullable. */
VALUE_NULLABLE = 1 << 9, VALUE_NULLABLE = 1 << 11,
/** Value type is managed. */ /** Value type is managed. */
VALUE_MANAGED = 1 << 10, VALUE_MANAGED = 1 << 12,
/** Key alignment of 1 byte. */ /** Key alignment of 1 byte. */
KEY_ALIGN_0 = 1 << 11, KEY_ALIGN_0 = 1 << 13,
/** Key alignment of 2 bytes. */ /** Key alignment of 2 bytes. */
KEY_ALIGN_1 = 1 << 12, KEY_ALIGN_1 = 1 << 14,
/** Key alignment of 4 bytes. */ /** Key alignment of 4 bytes. */
KEY_ALIGN_2 = 1 << 13, KEY_ALIGN_2 = 1 << 15,
/** Key alignment of 8 bytes. */ /** Key alignment of 8 bytes. */
KEY_ALIGN_3 = 1 << 14, KEY_ALIGN_3 = 1 << 16,
/** Key alignment of 16 bytes. */ /** Key alignment of 16 bytes. */
KEY_ALIGN_4 = 1 << 15, KEY_ALIGN_4 = 1 << 17,
/** Value is a signed type. */
KEY_SIGNED = 1 << 18,
/** Value is a float type. */
KEY_FLOAT = 1 << 19,
/** Key type is nullable. */ /** Key type is nullable. */
KEY_NULLABLE = 1 << 16, KEY_NULLABLE = 1 << 20,
/** Key type is managed. */ /** Key type is managed. */
KEY_MANAGED = 1 << 17 KEY_MANAGED = 1 << 21
} }

View File

@ -45,6 +45,7 @@
) )
(func $~lib/memory/memory.copy (; 3 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/memory/memory.copy (; 3 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32)
block $~lib/util/memory/memmove|inlined.0 block $~lib/util/memory/memmove|inlined.0
local.get $2 local.get $2
local.set $3 local.set $3
@ -81,16 +82,14 @@
i32.const 1 i32.const 1
i32.add i32.add
local.set $0 local.set $0
local.get $1
local.tee $4
i32.const 1
i32.add
local.set $1
local.get $2 local.get $2
block (result i32) local.get $4
local.get $1 i32.load8_u
local.tee $2
i32.const 1
i32.add
local.set $1
local.get $2
i32.load8_u
end
i32.store8 i32.store8
br $continue|0 br $continue|0
end end
@ -128,16 +127,14 @@
i32.const 1 i32.const 1
i32.add i32.add
local.set $0 local.set $0
local.get $1
local.tee $4
i32.const 1
i32.add
local.set $1
local.get $2 local.get $2
block (result i32) local.get $4
local.get $1 i32.load8_u
local.tee $2
i32.const 1
i32.add
local.set $1
local.get $2
i32.load8_u
end
i32.store8 i32.store8
local.get $3 local.get $3
i32.const 1 i32.const 1
@ -303,9 +300,9 @@
i32.const 16 i32.const 16
i32.shr_u i32.shr_u
local.tee $0 local.tee $0
current_memory memory.size
i32.sub i32.sub
grow_memory memory.grow
i32.const 0 i32.const 0
i32.lt_s i32.lt_s
if if
@ -446,7 +443,6 @@
) )
(func $assembly/buddy/flip_parent_is_split (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (func $assembly/buddy/flip_parent_is_split (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32)
local.get $0 local.get $0
i32.const 1 i32.const 1
i32.sub i32.sub
@ -456,8 +452,6 @@
i32.const 8 i32.const 8
i32.div_u i32.div_u
local.tee $1 local.tee $1
local.set $2
local.get $1
call $assembly/buddy/node_is_split$get call $assembly/buddy/node_is_split$get
i32.const 1 i32.const 1
local.get $0 local.get $0
@ -467,7 +461,7 @@
i32.xor i32.xor
local.set $0 local.set $0
global.get $assembly/buddy/NODE_IS_SPLIT_START global.get $assembly/buddy/NODE_IS_SPLIT_START
local.get $2 local.get $1
i32.add i32.add
local.get $0 local.get $0
i32.store8 i32.store8
@ -489,13 +483,11 @@
if if
global.get $assembly/buddy/base_ptr global.get $assembly/buddy/base_ptr
call $assembly/buddy/list_remove call $assembly/buddy/list_remove
block (result i32) global.get $assembly/buddy/bucket_limit
global.get $assembly/buddy/bucket_limit i32.const 1
i32.const 1 i32.sub
i32.sub global.set $assembly/buddy/bucket_limit
global.set $assembly/buddy/bucket_limit global.get $assembly/buddy/bucket_limit
global.get $assembly/buddy/bucket_limit
end
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
call $assembly/buddy/list_init call $assembly/buddy/list_init
global.get $assembly/buddy/bucket_limit global.get $assembly/buddy/bucket_limit
@ -522,13 +514,11 @@
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
local.get $2 local.get $2
call $assembly/buddy/list_push call $assembly/buddy/list_push
block (result i32) global.get $assembly/buddy/bucket_limit
global.get $assembly/buddy/bucket_limit i32.const 1
i32.const 1 i32.sub
i32.sub global.set $assembly/buddy/bucket_limit
global.set $assembly/buddy/bucket_limit global.get $assembly/buddy/bucket_limit
global.get $assembly/buddy/bucket_limit
end
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
call $assembly/buddy/list_init call $assembly/buddy/list_init
local.get $1 local.get $1
@ -580,7 +570,7 @@
i32.const -8 i32.const -8
i32.and i32.and
global.set $assembly/buddy/base_ptr global.set $assembly/buddy/base_ptr
current_memory memory.size
i32.const 16 i32.const 16
i32.shl i32.shl
global.set $assembly/buddy/max_ptr global.set $assembly/buddy/max_ptr
@ -624,14 +614,14 @@
local.get $1 local.get $1
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
call $assembly/buddy/list_pop call $assembly/buddy/list_pop
local.tee $2 local.tee $3
i32.eqz i32.eqz
if if
i32.const 1 i32.const 1
local.get $1 local.get $1
i32.eqz i32.eqz
local.get $1
global.get $assembly/buddy/bucket_limit global.get $assembly/buddy/bucket_limit
local.get $1
i32.ne i32.ne
select select
if if
@ -653,44 +643,44 @@
local.get $1 local.get $1
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
call $assembly/buddy/list_pop call $assembly/buddy/list_pop
local.set $2 local.set $3
end end
i32.const 1 i32.const 1
i32.const 30 i32.const 30
local.get $1 local.get $1
i32.sub i32.sub
i32.shl i32.shl
local.set $3 local.set $2
local.get $1 local.get $1
local.get $4 local.get $4
i32.lt_u i32.lt_u
if (result i32) if
local.get $3 local.get $2
i32.const 2 i32.const 2
i32.div_u i32.div_u
i32.const 8 i32.const 8
i32.add i32.add
else local.set $2
local.get $3
end end
local.get $2 local.get $2
local.get $3
i32.add i32.add
call $assembly/buddy/update_max_ptr call $assembly/buddy/update_max_ptr
i32.eqz i32.eqz
if if
local.get $1 local.get $1
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
local.get $2 local.get $3
call $assembly/buddy/list_push call $assembly/buddy/list_push
i32.const 0 i32.const 0
return return
end end
local.get $2 local.get $3
local.get $1 local.get $1
call $assembly/buddy/node_for_ptr call $assembly/buddy/node_for_ptr
local.tee $3 local.tee $2
if if
local.get $3 local.get $2
call $assembly/buddy/flip_parent_is_split call $assembly/buddy/flip_parent_is_split
end end
loop $continue|1 loop $continue|1
@ -698,19 +688,19 @@
local.get $4 local.get $4
i32.lt_u i32.lt_u
if if
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.shl i32.shl
i32.const 1 i32.const 1
i32.add i32.add
local.tee $3 local.tee $2
call $assembly/buddy/flip_parent_is_split call $assembly/buddy/flip_parent_is_split
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
local.tee $1 local.tee $1
call $assembly/buddy/buckets$get call $assembly/buddy/buckets$get
local.get $3 local.get $2
i32.const 1 i32.const 1
i32.add i32.add
local.get $1 local.get $1
@ -719,10 +709,10 @@
br $continue|1 br $continue|1
end end
end end
local.get $2 local.get $3
local.get $0 local.get $0
i32.store i32.store
local.get $2 local.get $3
i32.const 8 i32.const 8
i32.add i32.add
return return
@ -761,14 +751,15 @@
if (result i32) if (result i32)
i32.const 1 i32.const 1
else else
local.get $0
global.get $assembly/buddy/bucket_limit global.get $assembly/buddy/bucket_limit
local.get $0
i32.eq i32.eq
end end
br_if $break|0 br_if $break|0
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.sub i32.sub
local.tee $1
i32.const 1 i32.const 1
i32.xor i32.xor
i32.const 1 i32.const 1
@ -777,8 +768,6 @@
call $assembly/buddy/ptr_for_node call $assembly/buddy/ptr_for_node
call $assembly/buddy/list_remove call $assembly/buddy/list_remove
local.get $1 local.get $1
i32.const 1
i32.sub
i32.const 2 i32.const 2
i32.div_u i32.div_u
local.set $1 local.set $1

File diff suppressed because it is too large Load Diff

View File

@ -1 +1,2 @@
export { memory } from "memory"; export { memory } from "memory";
export { __free };

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,2 @@
export { memory } from "memory"; export { memory } from "memory";
export { __reset }; export { __free, __reset };

View File

@ -1,34 +1,31 @@
(module (module
(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$vi (func (param i32)))
(type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$v (func)) (type $FUNCSIG$v (func))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32)))
(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/builtins/abort (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
(memory $0 1) (memory $0 1)
(data (i32.const 8) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 8) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00N\00o\00t\00 \00i\00m\00p\00l\00e\00m\00e\00n\00t\00e\00d")
(data (i32.const 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 56) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00m\00e\00m\00o\00r\00y\00.\00t\00s")
(data (i32.const 104) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00N\00o\00t\00 \00i\00m\00p\00l\00e\00m\00e\00n\00t\00e\00d") (data (i32.const 104) "\03\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
(data (i32.const 152) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00m\00e\00m\00o\00r\00y\00.\00t\00s")
(data (i32.const 200) "\03\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
(global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0))
(global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
(global $~lib/rt/RTTI_BASE i32 (i32.const 104))
(export "memory" (memory $0)) (export "memory" (memory $0))
(export "__alloc" (func $~lib/rt/stub/__alloc)) (export "__alloc" (func $~lib/rt/stub/__alloc))
(export "__realloc" (func $~lib/rt/stub/__realloc))
(export "__free" (func $~lib/rt/stub/__free))
(export "__retain" (func $~lib/rt/stub/__retain)) (export "__retain" (func $~lib/rt/stub/__retain))
(export "__release" (func $~lib/rt/stub/__free)) (export "__release" (func $~lib/rt/stub/__release))
(export "__collect" (func $~lib/rt/stub/__collect)) (export "__collect" (func $~lib/rt/stub/__collect))
(export "__instanceof" (func $~lib/rt/__instanceof)) (export "__rtti" (global $~lib/rt/RTTI_BASE))
(export "__typeinfo" (func $~lib/rt/__typeinfo))
(export "memory.copy" (func $~lib/memory/memory.copy)) (export "memory.copy" (func $~lib/memory/memory.copy))
(export "memory.init" (func $~lib/memory/memory.init)) (export "memory.init" (func $~lib/memory/memory.init))
(export "memory.drop" (func $~lib/memory/memory.drop)) (export "memory.drop" (func $~lib/memory/memory.drop))
(export "memory.repeat" (func $~lib/memory/memory.repeat)) (export "memory.repeat" (func $~lib/memory/memory.repeat))
(export "memory.compare" (func $~lib/memory/memory.compare)) (export "memory.compare" (func $~lib/memory/memory.compare))
(export "__free" (func $~lib/rt/stub/__release))
(export "__reset" (func $~lib/rt/stub/__reset)) (export "__reset" (func $~lib/rt/stub/__reset))
(start $start) (start $start)
(func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
@ -36,39 +33,37 @@
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i32)
(local $6 i32)
local.get $0 local.get $0
i32.const 1073741808 i32.const 1073741808
i32.gt_u i32.gt_u
if if
unreachable unreachable
end end
local.get $0
i32.const 1
local.tee $2
local.get $0
local.get $2
i32.gt_u
select
global.get $~lib/rt/stub/offset global.get $~lib/rt/stub/offset
i32.const 16 i32.const 16
i32.add i32.add
local.tee $2 local.tee $3
local.get $0
i32.const 1
local.get $0
i32.const 1
i32.gt_u
select
i32.add i32.add
i32.const 15 i32.const 15
i32.add i32.add
i32.const -16 i32.const -16
i32.and i32.and
local.tee $3 local.tee $2
current_memory memory.size
local.tee $4 local.tee $4
i32.const 16 i32.const 16
i32.shl i32.shl
i32.gt_u i32.gt_u
if if
local.get $4 local.get $4
local.get $3
local.get $2 local.get $2
local.get $3
i32.sub i32.sub
i32.const 65535 i32.const 65535
i32.add i32.add
@ -77,17 +72,16 @@
i32.const 16 i32.const 16
i32.shr_u i32.shr_u
local.tee $5 local.tee $5
local.tee $6
local.get $4 local.get $4
local.get $6 local.get $5
i32.gt_s i32.gt_s
select select
grow_memory memory.grow
i32.const 0 i32.const 0
i32.lt_s i32.lt_s
if if
local.get $5 local.get $5
grow_memory memory.grow
i32.const 0 i32.const 0
i32.lt_s i32.lt_s
if if
@ -95,21 +89,47 @@
end end
end end
end end
local.get $3
global.set $~lib/rt/stub/offset
local.get $2 local.get $2
global.set $~lib/rt/stub/offset
local.get $3
i32.const 16 i32.const 16
i32.sub i32.sub
local.tee $3 local.tee $2
local.get $1 local.get $1
i32.store offset=8 i32.store offset=8
local.get $3 local.get $2
local.get $0 local.get $0
i32.store offset=12 i32.store offset=12
local.get $2 local.get $3
) )
(func $~lib/memory/memory.copy (; 2 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/rt/stub/__retain (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
(func $~lib/rt/stub/__release (; 3 ;) (type $FUNCSIG$vi) (param $0 i32)
nop
)
(func $~lib/rt/stub/__collect (; 4 ;) (type $FUNCSIG$v)
nop
)
(func $~lib/memory/memory.init (; 5 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
i32.const 24
i32.const 72
i32.const 35
i32.const 4
call $~lib/builtins/abort
unreachable
)
(func $~lib/memory/memory.drop (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 24
i32.const 72
i32.const 42
i32.const 4
call $~lib/builtins/abort
unreachable
)
(func $~lib/memory/memory.copy (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32)
block $~lib/util/memory/memmove|inlined.0 block $~lib/util/memory/memmove|inlined.0
local.get $2 local.get $2
local.set $3 local.set $3
@ -146,16 +166,14 @@
i32.const 1 i32.const 1
i32.add i32.add
local.set $0 local.set $0
local.get $1
local.tee $4
i32.const 1
i32.add
local.set $1
local.get $2 local.get $2
block (result i32) local.get $4
local.get $1 i32.load8_u
local.tee $2
i32.const 1
i32.add
local.set $1
local.get $2
i32.load8_u
end
i32.store8 i32.store8
br $continue|0 br $continue|0
end end
@ -193,16 +211,14 @@
i32.const 1 i32.const 1
i32.add i32.add
local.set $0 local.set $0
local.get $1
local.tee $4
i32.const 1
i32.add
local.set $1
local.get $2 local.get $2
block (result i32) local.get $4
local.get $1 i32.load8_u
local.tee $2
i32.const 1
i32.add
local.set $1
local.get $2
i32.load8_u
end
i32.store8 i32.store8
local.get $3 local.get $3
i32.const 1 i32.const 1
@ -284,119 +300,7 @@
end end
end end
) )
(func $~lib/rt/stub/__realloc (; 3 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (func $~lib/memory/memory.repeat (; 8 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $2 i32)
(local $3 i32)
local.get $1
local.get $0
i32.const 16
i32.sub
local.tee $2
i32.load offset=12
local.tee $3
i32.gt_u
if
local.get $1
local.get $2
i32.load offset=8
call $~lib/rt/stub/__alloc
local.tee $1
local.get $0
local.get $3
call $~lib/memory/memory.copy
local.get $1
local.set $0
else
local.get $2
local.get $1
i32.store offset=12
end
local.get $0
)
(func $~lib/rt/stub/__free (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
nop
)
(func $~lib/rt/stub/__retain (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
(func $~lib/rt/stub/__collect (; 6 ;) (type $FUNCSIG$v)
nop
)
(func $~lib/rt/__instanceof (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
i32.const 16
i32.sub
i32.load offset=8
local.tee $0
i32.const 200
local.tee $2
i32.load
i32.le_u
if
loop $continue|0
local.get $0
local.get $1
i32.eq
if
i32.const 1
return
end
local.get $2
i32.const 4
i32.add
local.get $0
i32.const 3
i32.shl
i32.add
i32.load offset=4
local.tee $0
br_if $continue|0
end
end
i32.const 0
)
(func $~lib/rt/__typeinfo (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.const 200
local.tee $1
i32.load
i32.gt_u
if
i32.const 24
i32.const 80
i32.const 22
i32.const 27
call $~lib/builtins/abort
unreachable
end
local.get $1
i32.const 4
i32.add
local.get $0
i32.const 3
i32.shl
i32.add
i32.load
)
(func $~lib/memory/memory.init (; 9 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
i32.const 120
i32.const 168
i32.const 35
i32.const 4
call $~lib/builtins/abort
unreachable
)
(func $~lib/memory/memory.drop (; 10 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 120
i32.const 168
i32.const 42
i32.const 4
call $~lib/builtins/abort
unreachable
)
(func $~lib/memory/memory.repeat (; 11 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32) (local $4 i32)
local.get $2 local.get $2
local.get $3 local.get $3
@ -421,7 +325,7 @@
end end
end end
) )
(func $~lib/memory/memory.compare (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (func $~lib/memory/memory.compare (; 9 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
local.get $0 local.get $0
local.get $1 local.get $1
i32.eq i32.eq
@ -467,12 +371,12 @@
end end
end end
) )
(func $~lib/rt/stub/__reset (; 13 ;) (type $FUNCSIG$v) (func $~lib/rt/stub/__reset (; 10 ;) (type $FUNCSIG$v)
global.get $~lib/rt/stub/startOffset global.get $~lib/rt/stub/startOffset
global.set $~lib/rt/stub/offset global.set $~lib/rt/stub/offset
) )
(func $start (; 14 ;) (type $FUNCSIG$v) (func $start (; 11 ;) (type $FUNCSIG$v)
i32.const 240 i32.const 144
global.set $~lib/rt/stub/startOffset global.set $~lib/rt/stub/startOffset
global.get $~lib/rt/stub/startOffset global.get $~lib/rt/stub/startOffset
global.set $~lib/rt/stub/offset global.set $~lib/rt/stub/offset

File diff suppressed because it is too large Load Diff

View File

@ -28,7 +28,7 @@
(data (i32.const 608) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b") (data (i32.const 608) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b")
(data (i32.const 632) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l") (data (i32.const 632) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l")
(data (i32.const 656) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00d") (data (i32.const 656) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00d")
(data (i32.const 680) "\05\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\02\00\00\00I\04\00\00\02") (data (i32.const 680) "\05\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\02\00\00\02\00\00\00I\10\00\00\02")
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
(global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
(global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0))

View File

@ -28,7 +28,7 @@
(data (i32.const 608) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b\00") (data (i32.const 608) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00b\00")
(data (i32.const 632) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l\00") (data (i32.const 632) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00n\00u\00l\00l\00")
(data (i32.const 656) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00d\00") (data (i32.const 656) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00d\00")
(data (i32.const 680) "\05\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\02\00\00\00I\04\00\00\02\00\00\00") (data (i32.const 680) "\05\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\02\00\00\02\00\00\00I\10\00\00\02\00\00\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -7,11 +7,11 @@
(data (i32.const 8) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 8) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
(data (i32.const 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
(data (i32.const 104) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00r\00t\00/\00f\00l\00a\00g\00s\00.\00t\00s") (data (i32.const 104) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00r\00t\00/\00f\00l\00a\00g\00s\00.\00t\00s")
(data (i32.const 144) "-\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00)\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00\t\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00I\06\00\00\02\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\04\00\00\00\00\00\00J\06\00\00\00\00\00\00\1c\80\00\00\00\00\00\00,@\00\00\00\00\00\00L \00\00\00\00\00\00\8c\10\00\00\00\00\00\00\0c\t\00\00\00\00\00\00\1c \02\00\00\00\00\00\1c \03\00\00\00\00\00L\0c\00\00\00\00\00\00L\0e\00\00\00\00\00\00L&\03\00\00\00\00\00\08") (data (i32.const 144) ":\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\02\00\00\02\00\00\00\19\00\00\00\02\00\00\00)\02\00\00\02\00\00\00)\00\00\00\02\00\00\00I\02\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\02\00\00\02\00\00\00\89\00\00\00\02\00\00\00I\06\00\00\02\00\00\00\89\06\00\00\02\00\00\00\t\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00I\18\00\00\02\00\00\00\1a\02\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\02\00\00\00\00\00\00*\00\00\00\00\00\00\00J\02\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\02\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\06\00\00\00\00\00\00\8a\06\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\10\00\00\00\00\00\00J\18\00\00\00\00\00\00\1c\02\02\00\00\00\00\00,\02\05\00\00\00\00\00L\82\04\00\00\00\00\00\8cB\04\00\00\00\00\00\0c!\04\00\00\00\00\00\1c\82 \00\00\00\00\00\1c\820\00\00\00\00\00L0\04\00\00\00\00\00L8\04\00\00\00\00\00L\980\00\00\00\00\00L\82\0c\00\00\00\00\00\08")
(data (i32.const 420) "A\04\00\00\02\00\00\00\08") (data (i32.const 524) "A\10\00\00\02\00\00\00\08")
(data (i32.const 444) "B\04\00\00\00\00\00\00\08") (data (i32.const 548) "B\10\00\00\00\00\00\00\08")
(data (i32.const 468) "D \02") (data (i32.const 572) "D\82 ")
(data (i32.const 484) "D$\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (data (i32.const 588) "D\90\04\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
(export "memory" (memory $0)) (export "memory" (memory $0))
(start $start) (start $start)
(func $~lib/rt/__typeinfo (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $~lib/rt/__typeinfo (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
@ -38,232 +38,323 @@
block $folding-inner0 block $folding-inner0
i32.const 4 i32.const 4
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 25 i32.const 537
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 5 i32.const 5
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 41 i32.const 25
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 6 i32.const 6
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 73 i32.const 553
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 7 i32.const 7
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 137 i32.const 41
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 8 i32.const 8
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 265 i32.const 585
i32.ne
if
br $folding-inner0
end
i32.const 9
call $~lib/rt/__typeinfo
i32.const 73
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 10 i32.const 10
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 1097 i32.const 649
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 11 i32.const 11
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 1609 i32.const 137
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 12 i32.const 12
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 26 i32.const 1609
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 13 i32.const 13
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 42 i32.const 1673
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 14 i32.const 14
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 74 i32.const 265
i32.ne
if
br $folding-inner0
end
i32.const 15
call $~lib/rt/__typeinfo
i32.const 138
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 16 i32.const 16
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 266 i32.const 4169
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 17 i32.const 17
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 1098 i32.const 6217
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 18 i32.const 18
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 1610 i32.const 538
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 19 i32.const 19
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 32796 i32.const 26
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 20 i32.const 20
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 16428 i32.const 554
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 21 i32.const 21
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 8268 i32.const 42
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 22 i32.const 22
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 4236 i32.const 586
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 23 i32.const 23
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 2316 i32.const 74
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 24 i32.const 24
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 139292 i32.const 650
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 25 i32.const 25
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 204828 i32.const 138
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 26 i32.const 26
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 3148 i32.const 1610
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 27 i32.const 27
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 3660 i32.const 1674
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 28 i32.const 28
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 206412 i32.const 266
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 29 i32.const 29
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 8 i32.const 4170
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 30 i32.const 30
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 6218
i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 31 i32.const 31
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 131612
i32.ne
if
br $folding-inner0
end
i32.const 32
call $~lib/rt/__typeinfo
i32.const 328236
i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 33 i32.const 33
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 295500
i32.ne
if
br $folding-inner0
end
i32.const 34
call $~lib/rt/__typeinfo
i32.const 279180
i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 35 i32.const 35
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 8 i32.const 270604
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 36 i32.const 36
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 2130460
i32.ne
if
br $folding-inner0
end
i32.const 37
call $~lib/rt/__typeinfo
i32.const 3179036
i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 38 i32.const 38
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 8 i32.const 274508
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 39 i32.const 39
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 276556
i32.ne
if
br $folding-inner0
end
i32.const 40
call $~lib/rt/__typeinfo
i32.const 3184716
i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 41 i32.const 41
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 819788
i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 43 i32.const 42
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
i32.const 8 i32.const 8
i32.ne i32.ne
if if
br $folding-inner0 br $folding-inner0
end end
i32.const 43
call $~lib/rt/__typeinfo
if
br $folding-inner0
end
i32.const 44 i32.const 44
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
if
br $folding-inner0
end
i32.const 46
call $~lib/rt/__typeinfo
if
br $folding-inner0
end
i32.const 48
call $~lib/rt/__typeinfo
i32.const 8
i32.ne
if
br $folding-inner0
end
i32.const 49
call $~lib/rt/__typeinfo
if
br $folding-inner0
end
i32.const 51
call $~lib/rt/__typeinfo
i32.const 8
i32.ne
if
br $folding-inner0
end
i32.const 52
call $~lib/rt/__typeinfo
if
br $folding-inner0
end
i32.const 54
call $~lib/rt/__typeinfo
if
br $folding-inner0
end
i32.const 56
call $~lib/rt/__typeinfo
i32.const 8
i32.ne
if
br $folding-inner0
end
i32.const 57
call $~lib/rt/__typeinfo
i32.const 8 i32.const 8
i32.ne i32.ne
if if

View File

@ -17,32 +17,45 @@ class Ref {}
const VALUE_ALIGN_REF = sizeof<usize>() == 4 ? TypeinfoFlags.VALUE_ALIGN_2 : TypeinfoFlags.VALUE_ALIGN_3; const VALUE_ALIGN_REF = sizeof<usize>() == 4 ? TypeinfoFlags.VALUE_ALIGN_2 : TypeinfoFlags.VALUE_ALIGN_3;
const KEY_ALIGN_REF = sizeof<usize>() == 4 ? TypeinfoFlags.KEY_ALIGN_2 : TypeinfoFlags.KEY_ALIGN_3; const KEY_ALIGN_REF = sizeof<usize>() == 4 ? TypeinfoFlags.KEY_ALIGN_2 : TypeinfoFlags.KEY_ALIGN_3;
test<Array<i8>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0); test<Array<i8>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
test<Array<i16>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1); test<Array<u8>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0);
test<Array<i32>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2); test<Array<i16>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1 | TypeinfoFlags.VALUE_SIGNED);
test<Array<i64>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3); test<Array<u16>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1);
test<Array<i32>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2 | TypeinfoFlags.VALUE_SIGNED);
test<Array<u32>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2);
test<Array<i64>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3 | TypeinfoFlags.VALUE_SIGNED);
test<Array<u64>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3);
test<Array<f32>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2 | TypeinfoFlags.VALUE_SIGNED | TypeinfoFlags.VALUE_FLOAT);
test<Array<f64>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3 | TypeinfoFlags.VALUE_SIGNED | TypeinfoFlags.VALUE_FLOAT);
test<Array<v128>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_4); test<Array<v128>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_4);
test<Array<Ref>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_MANAGED); test<Array<Ref>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_MANAGED);
test<Array<Ref | null>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED); test<Array<Ref | null>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED);
test<Set<i8>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0); test<Set<i8>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
test<Set<i16>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1); test<Set<u8>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0);
test<Set<i32>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2); test<Set<i16>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1 | TypeinfoFlags.VALUE_SIGNED);
test<Set<i64>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3); test<Set<u16>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1);
test<Set<i32>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2 | TypeinfoFlags.VALUE_SIGNED);
test<Set<u32>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2);
test<Set<i64>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3 | TypeinfoFlags.VALUE_SIGNED);
test<Set<u64>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3);
test<Set<f32>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2 | TypeinfoFlags.VALUE_SIGNED | TypeinfoFlags.VALUE_FLOAT);
test<Set<f64>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3 | TypeinfoFlags.VALUE_SIGNED | TypeinfoFlags.VALUE_FLOAT);
test<Set<v128>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_4); test<Set<v128>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_4);
test<Set<Ref>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_MANAGED); test<Set<Ref>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_MANAGED);
test<Set<Ref | null>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED); test<Set<Ref | null>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | VALUE_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED);
test<Map<v128,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_4 | TypeinfoFlags.VALUE_ALIGN_0); test<Map<v128,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_4 | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
test<Map<i64,i16>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_3 | TypeinfoFlags.VALUE_ALIGN_1); test<Map<i64,i16>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_3 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.VALUE_ALIGN_1 | TypeinfoFlags.VALUE_SIGNED);
test<Map<i32,i32>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_2 | TypeinfoFlags.VALUE_ALIGN_2); test<Map<i32,i32>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_2 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.VALUE_ALIGN_2 | TypeinfoFlags.VALUE_SIGNED);
test<Map<i16,i64>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_1 | TypeinfoFlags.VALUE_ALIGN_3); test<Map<i16,i64>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_1 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.VALUE_ALIGN_3 | TypeinfoFlags.VALUE_SIGNED);
test<Map<i8,v128>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.VALUE_ALIGN_4); test<Map<i8,v128>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.VALUE_ALIGN_4);
test<Map<Ref,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | KEY_ALIGN_REF | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0); test<Map<Ref,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | KEY_ALIGN_REF | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
test<Map<Ref | null,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC |KEY_ALIGN_REF | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0); test<Map<Ref | null,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC |KEY_ALIGN_REF | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
test<Map<i8,Ref>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF); test<Map<i8,Ref>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF);
test<Map<i8,Ref | null>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF); test<Map<i8,Ref | null>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF);
test<Map<Ref | null,Ref | null>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | KEY_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF); test<Map<Ref | null,Ref | null>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | KEY_ALIGN_REF | TypeinfoFlags.VALUE_NULLABLE | TypeinfoFlags.VALUE_MANAGED | VALUE_ALIGN_REF);
test<Map<f32,i32>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_2 | TypeinfoFlags.KEY_SIGNED | TypeinfoFlags.KEY_FLOAT | TypeinfoFlags.VALUE_ALIGN_2 | TypeinfoFlags.VALUE_SIGNED);
// cycle detection // cycle detection

View File

@ -8,11 +8,11 @@
(data (i32.const 8) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (data (i32.const 8) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
(data (i32.const 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") (data (i32.const 64) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
(data (i32.const 104) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00r\00t\00/\00f\00l\00a\00g\00s\00.\00t\00s\00") (data (i32.const 104) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00r\00t\00/\00f\00l\00a\00g\00s\00.\00t\00s\00")
(data (i32.const 144) "-\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00)\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00\t\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00I\06\00\00\02\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\04\00\00\00\00\00\00J\06\00\00\00\00\00\00\1c\80\00\00\00\00\00\00,@\00\00\00\00\00\00L \00\00\00\00\00\00\8c\10\00\00\00\00\00\00\0c\t\00\00\00\00\00\00\1c \02\00\00\00\00\00\1c \03\00\00\00\00\00L\0c\00\00\00\00\00\00L\0e\00\00\00\00\00\00L&\03\00\00\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\04\00\00\02\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00B\04\00\00\00\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00D \02\00\00\00\00\00\00\00\00\00\00\00\00\00D$\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (data (i32.const 144) ":\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\02\00\00\02\00\00\00\19\00\00\00\02\00\00\00)\02\00\00\02\00\00\00)\00\00\00\02\00\00\00I\02\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\02\00\00\02\00\00\00\89\00\00\00\02\00\00\00I\06\00\00\02\00\00\00\89\06\00\00\02\00\00\00\t\01\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00I\18\00\00\02\00\00\00\1a\02\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\02\00\00\00\00\00\00*\00\00\00\00\00\00\00J\02\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\02\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\06\00\00\00\00\00\00\8a\06\00\00\00\00\00\00\n\01\00\00\00\00\00\00J\10\00\00\00\00\00\00J\18\00\00\00\00\00\00\1c\02\02\00\00\00\00\00,\02\05\00\00\00\00\00L\82\04\00\00\00\00\00\8cB\04\00\00\00\00\00\0c!\04\00\00\00\00\00\1c\82 \00\00\00\00\00\1c\820\00\00\00\00\00L0\04\00\00\00\00\00L8\04\00\00\00\00\00L\980\00\00\00\00\00L\82\0c\00\00\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00A\10\00\00\02\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00B\10\00\00\00\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00D\82 \00\00\00\00\00\00\00\00\00\00\00\00\00D\90\04\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $rt/flags/VALUE_ALIGN_REF i32 (i32.const 64)) (global $rt/flags/VALUE_ALIGN_REF i32 (i32.const 64))
(global $rt/flags/KEY_ALIGN_REF i32 (i32.const 8192)) (global $rt/flags/KEY_ALIGN_REF i32 (i32.const 32768))
(global $~lib/rt/RTTI_BASE i32 (i32.const 144)) (global $~lib/rt/RTTI_BASE i32 (i32.const 144))
(export "memory" (memory $0)) (export "memory" (memory $0))
(start $start) (start $start)
@ -56,7 +56,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/array/Array<i16>> (; 3 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<u8>> (; 3 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 5 i32.const 5
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -71,7 +71,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/array/Array<i32>> (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<i16>> (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 6 i32.const 6
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -86,7 +86,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/array/Array<i64>> (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<u16>> (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 7 i32.const 7
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -101,7 +101,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/array/Array<v128>> (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<i32>> (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 8 i32.const 8
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -116,7 +116,22 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/array/Array<rt/flags/Ref>> (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<u32>> (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 9
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<~lib/array/Array<i64>> (; 8 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 10 i32.const 10
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -131,7 +146,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/array/Array<rt/flags/Ref | null>> (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<u64>> (; 9 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 11 i32.const 11
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -146,7 +161,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/set/Set<i8>> (; 9 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<f32>> (; 10 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 12 i32.const 12
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -161,7 +176,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/set/Set<i16>> (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<f64>> (; 11 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 13 i32.const 13
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -176,7 +191,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/set/Set<i32>> (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<v128>> (; 12 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 14 i32.const 14
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -191,22 +206,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/set/Set<i64>> (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<rt/flags/Ref>> (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 15
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<~lib/set/Set<v128>> (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 16 i32.const 16
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -221,7 +221,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/set/Set<rt/flags/Ref>> (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/array/Array<rt/flags/Ref | null>> (; 14 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 17 i32.const 17
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -236,7 +236,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/set/Set<rt/flags/Ref | null>> (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<i8>> (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 18 i32.const 18
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -251,7 +251,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<v128,i8>> (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<u8>> (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 19 i32.const 19
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -266,7 +266,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<i64,i16>> (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<i16>> (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 20 i32.const 20
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -281,7 +281,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<i32,i32>> (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<u16>> (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 21 i32.const 21
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -296,7 +296,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<i16,i64>> (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<i32>> (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 22 i32.const 22
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -311,7 +311,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<i8,v128>> (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<u32>> (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 23 i32.const 23
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -326,7 +326,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<rt/flags/Ref,i8>> (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<i64>> (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 24 i32.const 24
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -341,7 +341,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,i8>> (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<u64>> (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 25 i32.const 25
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -356,7 +356,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<i8,rt/flags/Ref>> (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<f32>> (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 26 i32.const 26
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -371,7 +371,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<i8,rt/flags/Ref | null>> (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<f64>> (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 27 i32.const 27
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -386,7 +386,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,rt/flags/Ref | null>> (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<v128>> (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 28 i32.const 28
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -401,7 +401,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/NoCycle> (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<rt/flags/Ref>> (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 29 i32.const 29
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -416,7 +416,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/DirectCycle> (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/set/Set<rt/flags/Ref | null>> (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 30 i32.const 30
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -431,7 +431,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/IndirectCycle> (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<v128,i8>> (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 31 i32.const 31
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -446,7 +446,22 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/IndirectCycleArray> (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<i64,i16>> (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 32
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<~lib/map/Map<i32,i32>> (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 33 i32.const 33
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -461,7 +476,22 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/InnerCycleArray> (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<i16,i64>> (; 31 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 34
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<~lib/map/Map<i8,v128>> (; 32 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 35 i32.const 35
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -476,7 +506,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/IndirectCycleSet> (; 31 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<rt/flags/Ref,i8>> (; 33 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 36 i32.const 36
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -491,7 +521,22 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/InnerCycleSet> (; 32 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,i8>> (; 34 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 37
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<~lib/map/Map<i8,rt/flags/Ref>> (; 35 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 38 i32.const 38
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -506,7 +551,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/IndirectCycleMapKey> (; 33 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<i8,rt/flags/Ref | null>> (; 36 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 39 i32.const 39
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -521,7 +566,22 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/IndirectCycleMapValue> (; 34 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,rt/flags/Ref | null>> (; 37 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 40
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<~lib/map/Map<f32,i32>> (; 38 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 41 i32.const 41
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -536,7 +596,22 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/InnerCycleMapKey> (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<rt/flags/NoCycle> (; 39 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 42
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/DirectCycle> (; 40 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 43 i32.const 43
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -551,7 +626,7 @@
unreachable unreachable
end end
) )
(func $rt/flags/test<rt/flags/InnerCycleMapValue> (; 36 ;) (type $FUNCSIG$vi) (param $0 i32) (func $rt/flags/test<rt/flags/IndirectCycle> (; 41 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 44 i32.const 44
call $~lib/rt/__typeinfo call $~lib/rt/__typeinfo
local.get $0 local.get $0
@ -566,34 +641,206 @@
unreachable unreachable
end end
) )
(func $start:rt/flags (; 37 ;) (type $FUNCSIG$v) (func $rt/flags/test<rt/flags/IndirectCycleArray> (; 42 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 46
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/InnerCycleArray> (; 43 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 48
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/IndirectCycleSet> (; 44 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 49
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/InnerCycleSet> (; 45 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 51
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/IndirectCycleMapKey> (; 46 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 52
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/IndirectCycleMapValue> (; 47 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 54
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/InnerCycleMapKey> (; 48 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 56
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $rt/flags/test<rt/flags/InnerCycleMapValue> (; 49 ;) (type $FUNCSIG$vi) (param $0 i32)
i32.const 57
call $~lib/rt/__typeinfo
local.get $0
i32.eq
i32.eqz
if
i32.const 0
i32.const 120
i32.const 6
i32.const 2
call $~lib/builtins/abort
unreachable
end
)
(func $start:rt/flags (; 50 ;) (type $FUNCSIG$v)
i32.const 1 i32.const 1
i32.const 8 i32.const 8
i32.or i32.or
i32.const 16 i32.const 16
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/array/Array<i8>> call $rt/flags/test<~lib/array/Array<i8>>
i32.const 1 i32.const 1
i32.const 8 i32.const 8
i32.or i32.or
i32.const 16
i32.or
call $rt/flags/test<~lib/array/Array<u8>>
i32.const 1
i32.const 8
i32.or
i32.const 32 i32.const 32
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/array/Array<i16>> call $rt/flags/test<~lib/array/Array<i16>>
i32.const 1 i32.const 1
i32.const 8 i32.const 8
i32.or i32.or
i32.const 32
i32.or
call $rt/flags/test<~lib/array/Array<u16>>
i32.const 1
i32.const 8
i32.or
i32.const 64 i32.const 64
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/array/Array<i32>> call $rt/flags/test<~lib/array/Array<i32>>
i32.const 1 i32.const 1
i32.const 8 i32.const 8
i32.or i32.or
i32.const 64
i32.or
call $rt/flags/test<~lib/array/Array<u32>>
i32.const 1
i32.const 8
i32.or
i32.const 128 i32.const 128
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/array/Array<i64>> call $rt/flags/test<~lib/array/Array<i64>>
i32.const 1 i32.const 1
i32.const 8 i32.const 8
i32.or i32.or
i32.const 128
i32.or
call $rt/flags/test<~lib/array/Array<u64>>
i32.const 1
i32.const 8
i32.or
i32.const 64
i32.or
i32.const 512
i32.or
i32.const 1024
i32.or
call $rt/flags/test<~lib/array/Array<f32>>
i32.const 1
i32.const 8
i32.or
i32.const 128
i32.or
i32.const 512
i32.or
i32.const 1024
i32.or
call $rt/flags/test<~lib/array/Array<f64>>
i32.const 1
i32.const 8
i32.or
i32.const 256 i32.const 256
i32.or i32.or
call $rt/flags/test<~lib/array/Array<v128>> call $rt/flags/test<~lib/array/Array<v128>>
@ -602,7 +849,7 @@
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
i32.const 1024 i32.const 4096
i32.or i32.or
call $rt/flags/test<~lib/array/Array<rt/flags/Ref>> call $rt/flags/test<~lib/array/Array<rt/flags/Ref>>
i32.const 1 i32.const 1
@ -610,9 +857,9 @@
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
i32.const 512 i32.const 2048
i32.or i32.or
i32.const 1024 i32.const 4096
i32.or i32.or
call $rt/flags/test<~lib/array/Array<rt/flags/Ref | null>> call $rt/flags/test<~lib/array/Array<rt/flags/Ref | null>>
i32.const 2 i32.const 2
@ -620,28 +867,80 @@
i32.or i32.or
i32.const 16 i32.const 16
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/set/Set<i8>> call $rt/flags/test<~lib/set/Set<i8>>
i32.const 2 i32.const 2
i32.const 8 i32.const 8
i32.or i32.or
i32.const 16
i32.or
call $rt/flags/test<~lib/set/Set<u8>>
i32.const 2
i32.const 8
i32.or
i32.const 32 i32.const 32
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/set/Set<i16>> call $rt/flags/test<~lib/set/Set<i16>>
i32.const 2 i32.const 2
i32.const 8 i32.const 8
i32.or i32.or
i32.const 32
i32.or
call $rt/flags/test<~lib/set/Set<u16>>
i32.const 2
i32.const 8
i32.or
i32.const 64 i32.const 64
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/set/Set<i32>> call $rt/flags/test<~lib/set/Set<i32>>
i32.const 2 i32.const 2
i32.const 8 i32.const 8
i32.or i32.or
i32.const 64
i32.or
call $rt/flags/test<~lib/set/Set<u32>>
i32.const 2
i32.const 8
i32.or
i32.const 128 i32.const 128
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/set/Set<i64>> call $rt/flags/test<~lib/set/Set<i64>>
i32.const 2 i32.const 2
i32.const 8 i32.const 8
i32.or i32.or
i32.const 128
i32.or
call $rt/flags/test<~lib/set/Set<u64>>
i32.const 2
i32.const 8
i32.or
i32.const 64
i32.or
i32.const 512
i32.or
i32.const 1024
i32.or
call $rt/flags/test<~lib/set/Set<f32>>
i32.const 2
i32.const 8
i32.or
i32.const 128
i32.or
i32.const 512
i32.or
i32.const 1024
i32.or
call $rt/flags/test<~lib/set/Set<f64>>
i32.const 2
i32.const 8
i32.or
i32.const 256 i32.const 256
i32.or i32.or
call $rt/flags/test<~lib/set/Set<v128>> call $rt/flags/test<~lib/set/Set<v128>>
@ -650,7 +949,7 @@
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
i32.const 1024 i32.const 4096
i32.or i32.or
call $rt/flags/test<~lib/set/Set<rt/flags/Ref>> call $rt/flags/test<~lib/set/Set<rt/flags/Ref>>
i32.const 2 i32.const 2
@ -658,47 +957,63 @@
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
i32.const 512 i32.const 2048
i32.or i32.or
i32.const 1024 i32.const 4096
i32.or i32.or
call $rt/flags/test<~lib/set/Set<rt/flags/Ref | null>> call $rt/flags/test<~lib/set/Set<rt/flags/Ref | null>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 32768 i32.const 131072
i32.or i32.or
i32.const 16 i32.const 16
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<v128,i8>> call $rt/flags/test<~lib/map/Map<v128,i8>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 16384 i32.const 65536
i32.or
i32.const 262144
i32.or i32.or
i32.const 32 i32.const 32
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<i64,i16>> call $rt/flags/test<~lib/map/Map<i64,i16>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 8192 i32.const 32768
i32.or
i32.const 262144
i32.or i32.or
i32.const 64 i32.const 64
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<i32,i32>> call $rt/flags/test<~lib/map/Map<i32,i32>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 4096 i32.const 16384
i32.or
i32.const 262144
i32.or i32.or
i32.const 128 i32.const 128
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<i16,i64>> call $rt/flags/test<~lib/map/Map<i16,i64>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 2048 i32.const 8192
i32.or
i32.const 262144
i32.or i32.or
i32.const 256 i32.const 256
i32.or i32.or
@ -708,29 +1023,35 @@
i32.or i32.or
global.get $rt/flags/KEY_ALIGN_REF global.get $rt/flags/KEY_ALIGN_REF
i32.or i32.or
i32.const 131072 i32.const 2097152
i32.or i32.or
i32.const 16 i32.const 16
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<rt/flags/Ref,i8>> call $rt/flags/test<~lib/map/Map<rt/flags/Ref,i8>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
global.get $rt/flags/KEY_ALIGN_REF global.get $rt/flags/KEY_ALIGN_REF
i32.or i32.or
i32.const 65536 i32.const 1048576
i32.or i32.or
i32.const 131072 i32.const 2097152
i32.or i32.or
i32.const 16 i32.const 16
i32.or i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,i8>> call $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,i8>>
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 2048 i32.const 8192
i32.or i32.or
i32.const 1024 i32.const 262144
i32.or
i32.const 4096
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
@ -738,11 +1059,13 @@
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 8192
i32.or
i32.const 262144
i32.or
i32.const 2048 i32.const 2048
i32.or i32.or
i32.const 512 i32.const 4096
i32.or
i32.const 1024
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
@ -750,19 +1073,33 @@
i32.const 4 i32.const 4
i32.const 8 i32.const 8
i32.or i32.or
i32.const 65536 i32.const 1048576
i32.or i32.or
i32.const 131072 i32.const 2097152
i32.or i32.or
global.get $rt/flags/KEY_ALIGN_REF global.get $rt/flags/KEY_ALIGN_REF
i32.or i32.or
i32.const 512 i32.const 2048
i32.or i32.or
i32.const 1024 i32.const 4096
i32.or i32.or
global.get $rt/flags/VALUE_ALIGN_REF global.get $rt/flags/VALUE_ALIGN_REF
i32.or i32.or
call $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,rt/flags/Ref | null>> call $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,rt/flags/Ref | null>>
i32.const 4
i32.const 8
i32.or
i32.const 32768
i32.or
i32.const 262144
i32.or
i32.const 524288
i32.or
i32.const 64
i32.or
i32.const 512
i32.or
call $rt/flags/test<~lib/map/Map<f32,i32>>
i32.const 8 i32.const 8
call $rt/flags/test<rt/flags/NoCycle> call $rt/flags/test<rt/flags/NoCycle>
i32.const 0 i32.const 0
@ -786,9 +1123,9 @@
i32.const 8 i32.const 8
call $rt/flags/test<rt/flags/InnerCycleMapValue> call $rt/flags/test<rt/flags/InnerCycleMapValue>
) )
(func $start (; 38 ;) (type $FUNCSIG$v) (func $start (; 51 ;) (type $FUNCSIG$v)
call $start:rt/flags call $start:rt/flags
) )
(func $null (; 39 ;) (type $FUNCSIG$v) (func $null (; 52 ;) (type $FUNCSIG$v)
) )
) )

View File

@ -26,7 +26,7 @@
(data (i32.const 384) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 384) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
(data (i32.const 440) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 440) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
(data (i32.const 488) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 488) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
(data (i32.const 528) "\t\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02") (data (i32.const 528) "\t\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\02\00\00\02\00\00\00I\02\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02")
(global $std/array-literal/emptyArrayI32 i32 (i32.const 320)) (global $std/array-literal/emptyArrayI32 i32 (i32.const 320))
(global $std/array-literal/i (mut i32) (i32.const 0)) (global $std/array-literal/i (mut i32) (i32.const 0))
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -27,7 +27,7 @@
(data (i32.const 384) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 384) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
(data (i32.const 440) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 440) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
(data (i32.const 488) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") (data (i32.const 488) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
(data (i32.const 528) "\t\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00") (data (i32.const 528) "\t\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\19\02\00\00\02\00\00\00I\02\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $std/array-literal/staticArrayI8 i32 (i32.const 48)) (global $std/array-literal/staticArrayI8 i32 (i32.const 48))

View File

@ -210,7 +210,7 @@
(data (i32.const 7176) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02") (data (i32.const 7176) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02")
(data (i32.const 7200) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04") (data (i32.const 7200) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04")
(data (i32.const 7224) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01") (data (i32.const 7224) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01")
(data (i32.const 7248) "\1a\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\02\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00\19\00\00\00\02\00\00\00I\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00I\04\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00I\06\00\00\02\00\00\00I\04\00\00\02\00\00\00\19\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\00\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\06\00\00\02\00\00\00\19\00\00\00\02\00\00\00)\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00I\04\00\00\02\00\00\00I\04\00\00\02\00\00\00I\04\00\00\02") (data (i32.const 7248) "\1a\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\02\00\00\02\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00\19\00\00\00\02\00\00\00I\00\00\00\02\00\00\00I\06\00\00\02\00\00\00\89\06\00\00\02\00\00\00I\10\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00I\18\00\00\02\00\00\00I\10\00\00\02\00\00\00\19\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\02\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\18\00\00\02\00\00\00\19\02\00\00\02\00\00\00)\00\00\00\02\00\00\00\89\02\00\00\02\00\00\00I\10\00\00\02\00\00\00I\10\00\00\02\00\00\00I\10\00\00\02")
(table $0 57 funcref) (table $0 57 funcref)
(elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0) (elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0)
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -207,7 +207,7 @@
(data (i32.const 7624) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02") (data (i32.const 7624) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\01\02")
(data (i32.const 7648) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04") (data (i32.const 7648) "\02\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\03\04")
(data (i32.const 7672) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00") (data (i32.const 7672) "\04\00\00\00\01\00\00\00\00\00\00\00\04\00\00\00\01\00\00\00")
(data (i32.const 7696) "\1a\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\02\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00\19\00\00\00\02\00\00\00I\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00I\04\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00I\06\00\00\02\00\00\00I\04\00\00\02\00\00\00\19\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\00\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\06\00\00\02\00\00\00\19\00\00\00\02\00\00\00)\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00I\04\00\00\02\00\00\00I\04\00\00\02\00\00\00I\04\00\00\02\00\00\00") (data (i32.const 7696) "\1a\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\02\00\00\02\00\00\00\08\00\00\00\00\00\00\00\19\00\00\00\02\00\00\00\19\00\00\00\02\00\00\00I\00\00\00\02\00\00\00I\06\00\00\02\00\00\00\89\06\00\00\02\00\00\00I\10\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00I\18\00\00\02\00\00\00I\10\00\00\02\00\00\00\19\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\02\00\00\02\00\00\00\08\00\00\00\00\00\00\00I\18\00\00\02\00\00\00\19\02\00\00\02\00\00\00)\00\00\00\02\00\00\00\89\02\00\00\02\00\00\00I\10\00\00\02\00\00\00I\10\00\00\02\00\00\00I\10\00\00\02\00\00\00")
(table $0 57 funcref) (table $0 57 funcref)
(elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0) (elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0)
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -35,7 +35,7 @@
(data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
(data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
(data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00m\00a\00p\00.\00t\00s") (data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00m\00a\00p\00.\00t\00s")
(data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00L\08\00\00\00\00\00\00L\08\00\00\00\00\00\00L\10\00\00\00\00\00\00L\10\00\00\00\00\00\00L \00\00\00\00\00\00L \00\00\00\00\00\00L@\00\00\00\00\00\00L@\00\00\00\00\00\00L \00\00\00\00\00\00L@") (data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00L\"\04\00\00\00\00\00L\"\00\00\00\00\00\00LB\04\00\00\00\00\00LB\00\00\00\00\00\00L\82\04\00\00\00\00\00L\82\00\00\00\00\00\00L\02\05\00\00\00\00\00L\02\01\00\00\00\00\00L\82\0c\00\00\00\00\00L\02\0d")
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
(global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
(global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0))

View File

@ -31,7 +31,7 @@
(data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
(data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") (data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
(data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00m\00a\00p\00.\00t\00s\00") (data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00m\00a\00p\00.\00t\00s\00")
(data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00L\08\00\00\00\00\00\00L\08\00\00\00\00\00\00L\10\00\00\00\00\00\00L\10\00\00\00\00\00\00L \00\00\00\00\00\00L \00\00\00\00\00\00L@\00\00\00\00\00\00L@\00\00\00\00\00\00L \00\00\00\00\00\00L@\00\00\00\00\00\00") (data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00L\"\04\00\00\00\00\00L\"\00\00\00\00\00\00LB\04\00\00\00\00\00LB\00\00\00\00\00\00L\82\04\00\00\00\00\00L\82\00\00\00\00\00\00L\02\05\00\00\00\00\00L\02\01\00\00\00\00\00L\82\0c\00\00\00\00\00L\02\0d\00\00\00\00\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -32,7 +32,7 @@
(data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
(data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
(data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s") (data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s")
(data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a") (data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\02\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\02\00\00\00\00\00\00*\00\00\00\00\00\00\00J\02\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\02\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\06\00\00\00\00\00\00\8a\06")
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
(global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
(global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0))

View File

@ -31,7 +31,7 @@
(data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (data (i32.const 264) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
(data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") (data (i32.const 320) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
(data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") (data (i32.const 360) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00")
(data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00") (data (i32.const 400) "\0d\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\02\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\02\00\00\00\00\00\00*\00\00\00\00\00\00\00J\02\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\02\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\06\00\00\00\00\00\00\8a\06\00\00\00\00\00\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -175,7 +175,7 @@
(data (i32.const 6392) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008") (data (i32.const 6392) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008")
(data (i32.const 6424) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004") (data (i32.const 6424) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004")
(data (i32.const 6456) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009") (data (i32.const 6456) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009")
(data (i32.const 6496) "\08\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\00\00\00\02\00\00\00I\00\00\00\02") (data (i32.const 6496) "\08\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00I\02\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\02\00\00\02\00\00\00I\00\00\00\02")
(global $std/string/str (mut i32) (i32.const 24)) (global $std/string/str (mut i32) (i32.const 24))
(global $std/string/nullStr i32 (i32.const 0)) (global $std/string/nullStr i32 (i32.const 0))
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))

View File

@ -180,7 +180,7 @@
(data (i32.const 6840) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008\00") (data (i32.const 6840) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008\00")
(data (i32.const 6872) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004\00") (data (i32.const 6872) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004\00")
(data (i32.const 6904) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009\00") (data (i32.const 6904) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009\00")
(data (i32.const 6944) "\08\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\02\00\00\00I\00\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\00\00\00\02\00\00\00") (data (i32.const 6944) "\08\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\10\00\00\02\00\00\00I\02\00\00\02\00\00\00I\00\00\00\02\00\00\00\89\00\00\00\02\00\00\00)\02\00\00\02\00\00\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (elem (i32.const 0) $null)
(global $std/string/str (mut i32) (i32.const 24)) (global $std/string/str (mut i32) (i32.const 24))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long