mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-09 21:11:27 +00:00
more loader work
This commit is contained in:
parent
a684bb1f65
commit
9620f18249
@ -7,7 +7,7 @@ Usage
|
||||
-----
|
||||
|
||||
```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 />
|
||||
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:
|
||||
|
||||
* **I8**: `Int8Array`<br />
|
||||
An 8-bit signed integer view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.I8[ptr];
|
||||
```
|
||||
|
||||
* **U8**: `Uint8Array`<br />
|
||||
An 8-bit unsigned integer view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.U8[ptr];
|
||||
```
|
||||
|
||||
* **I16**: `Int16Array`<br />
|
||||
A 16-bit signed integer view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.I16[ptr >>> 1];
|
||||
```
|
||||
|
||||
* **U16**: `Uint16Array`<br />
|
||||
A 16-bit unsigned integer view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.U16[ptr >>> 1];
|
||||
```
|
||||
|
||||
* **I32**: `Int32Array`<br />
|
||||
A 32-bit signed integer view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.I32[ptr >>> 2];
|
||||
```
|
||||
|
||||
* **U32**: `Uint32Array`<br />
|
||||
A 32-bit unsigned integer view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.U32[ptr >>> 2];
|
||||
```
|
||||
|
||||
* **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 />
|
||||
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 />
|
||||
A 32-bit float view on the memory.
|
||||
|
||||
```ts
|
||||
var value = module.I32[ptr >>> 2];
|
||||
```
|
||||
|
||||
* **F64**: `Float64Array`<br />
|
||||
A 64-bit float view on the memory.
|
||||
|
||||
* **newString**(str: `string`): `number`<br />
|
||||
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.
|
||||
```ts
|
||||
var value = module.F64[ptr >>> 3];
|
||||
```
|
||||
|
||||
* **getString**(ptr: `number`): `string`<br />
|
||||
Reads a string from the module's memory by its pointer.
|
||||
* **__allocString**(str: `string`): `number`<br />
|
||||
Allocates a new string in the module's memory and returns a reference (pointer) to it.
|
||||
|
||||
* **newArray**(id: `number`, values: `number[]`): `number`<br />
|
||||
Allocates a new array in the module's memory and returns its retained pointer.
|
||||
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.
|
||||
```ts
|
||||
var ref = module.__retain(module.__allocString("hello world"));
|
||||
...
|
||||
module.__release(ref);
|
||||
```
|
||||
|
||||
* **getArray**(ptr: `number`): `number[]`<br />
|
||||
Gets the values of an array in the module's memory by its pointer.
|
||||
* **__getString**(ref: `number`): `string`<br />
|
||||
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
|
||||
--------
|
||||
@ -88,62 +177,6 @@ const myModule = loader.instantiateBuffer(fs.readFileSync("myModule.wasm"), myIm
|
||||
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
|
||||
|
||||
```ts
|
||||
|
62
lib/loader/index.d.ts
vendored
62
lib/loader/index.d.ts
vendored
@ -3,33 +3,14 @@ import "@types/webassembly-js-api";
|
||||
/** WebAssembly imports with two levels of nesting. */
|
||||
interface ImportsObject {
|
||||
[key: string]: {},
|
||||
env: {
|
||||
env?: {
|
||||
memory?: WebAssembly.Memory,
|
||||
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. */
|
||||
interface ASUtil {
|
||||
/** An 8-bit signed integer view on the memory. */
|
||||
@ -52,25 +33,24 @@ interface ASUtil {
|
||||
readonly F32: Float32Array;
|
||||
/** A 64-bit float view on the memory. */
|
||||
readonly F64: Float64Array;
|
||||
/** Allocates a new string in the module's memory and returns its pointer. */
|
||||
newString(str: string): number;
|
||||
/** Gets a string from the module's memory by its pointer. */
|
||||
getString(ptr: number): string;
|
||||
/** Copies a typed array into the module's memory and returns its pointer. */
|
||||
newArray(view: TypedArray, length?: number): number;
|
||||
/** Creates a typed array in the module's memory and returns its pointer. */
|
||||
newArray(ctor: TypedArrayConstructor, length: number, unsafe?: boolean): number;
|
||||
/** Gets a view on a typed array in the module's memory by its pointer. */
|
||||
getArray<T extends TypedArray = TypedArray>(ctor: TypedArrayConstructor, ptr: number): T;
|
||||
/** Frees a typed array in the module's memory. Must not be accessed anymore afterwards. */
|
||||
freeArray(ptr: number): void;
|
||||
/** Gets a function by its pointer. */
|
||||
getFunction<R = any>(ptr: number): (...args: any[]) => R;
|
||||
/**
|
||||
* Creates a new function in the module's table and returns its pointer. Note that only actual
|
||||
* WebAssembly functions, i.e. as exported by the module, are supported.
|
||||
*/
|
||||
newFunction(fn: (...args: any[]) => any): number;
|
||||
/** Allocates a new string in the module's memory and returns a reference (pointer) to it. */
|
||||
__allocString(str: string): number;
|
||||
/** Gets the value of a string from the module's memory. */
|
||||
__getString(ref: number): string;
|
||||
/** Allocates a new array in the module's memory and returns a reference (pointer) to it. */
|
||||
__allocArray(id: number, values: number[]): number;
|
||||
/** Gets the values of an array from the module's memory. */
|
||||
__getArray(ref: number): number[];
|
||||
/** Retains a reference externally, making sure that it doesn't become collected prematurely. Returns the reference. */
|
||||
__retain(ref: number): number;
|
||||
/** Releases a previously retained reference to an object, allowing the runtime to collect it once its reference count reaches zero. */
|
||||
__release(ref: number): void;
|
||||
/** Allocates an instance of the class represented by the specified id. */
|
||||
__alloc(size: number, id: number): number;
|
||||
/** Tests whether an object is an instance of the class represented by the specified base id. */
|
||||
__instanceof(ref: number, baseId: number): boolean;
|
||||
/** Forces a cycle collection. Only relevant if objects potentially forming reference cycles are used. */
|
||||
__collect(): void;
|
||||
}
|
||||
|
||||
/** Instantiates an AssemblyScript module using the specified imports. */
|
||||
|
@ -14,11 +14,15 @@ const ARRAY = 1 << 0;
|
||||
const SET = 1 << 1;
|
||||
const MAP = 1 << 2;
|
||||
const VAL_ALIGN = 1 << 4;
|
||||
const VAL_NULLABLE = 1 << 9;
|
||||
const VAL_MANAGED = 1 << 10;
|
||||
const KEY_ALIGN = 1 << 11;
|
||||
const KEY_NULLABLE = 1 << 16;
|
||||
const KEY_MANAGED = 1 << 17;
|
||||
const VAL_SIGNED = 1 << 9;
|
||||
const VAL_FLOAT = 1 << 10;
|
||||
const VAL_NULLABLE = 1 << 11;
|
||||
const VAL_MANAGED = 1 << 12;
|
||||
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
|
||||
const ABV_BUFFER_OFFSET = 0;
|
||||
@ -28,41 +32,41 @@ const ABV_SIZE = 12;
|
||||
|
||||
const BIGINT = typeof BigUint64Array !== "undefined";
|
||||
const THIS = Symbol();
|
||||
const CHUNKSIZE = 1024;
|
||||
|
||||
/** Gets a string from an U32 and an U16 view on a memory. */
|
||||
function getStringImpl(U32, U16, ptr) {
|
||||
var length = U32[(ptr + SIZE_OFFSET) >>> 2] >>> 1;
|
||||
var offset = ptr >>> 1;
|
||||
var parts = [];
|
||||
const chunkSize = 1024;
|
||||
while (length > chunkSize) {
|
||||
let last = U16[offset + chunkSize - 1];
|
||||
let size = last >= 0xD800 && last < 0xDC00 ? chunkSize - 1 : chunkSize;
|
||||
let part = U16.subarray(offset, offset += size);
|
||||
parts.push(String.fromCharCode.apply(String, part));
|
||||
function getStringImpl(U32, U16, ref) {
|
||||
var length = U32[(ref + SIZE_OFFSET) >>> 2] >>> 1;
|
||||
var offset = ref >>> 1;
|
||||
if (length <= CHUNKSIZE) return String.fromCharCode.apply(String, U16.subarray(offset, offset + length));
|
||||
const parts = [];
|
||||
do {
|
||||
const last = U16[offset + CHUNKSIZE - 1];
|
||||
const size = last >= 0xD800 && last < 0xDC00 ? CHUNKSIZE - 1 : CHUNKSIZE;
|
||||
parts.push(String.fromCharCode.apply(String, U16.subarray(offset, offset += size)));
|
||||
length -= size;
|
||||
}
|
||||
} while (length > CHUNKSIZE);
|
||||
return parts.join("") + String.fromCharCode.apply(String, U16.subarray(offset, offset + length));
|
||||
}
|
||||
|
||||
/** Prepares the base module prior to instantiation. */
|
||||
function preInstantiate(imports) {
|
||||
var baseModule = {};
|
||||
const baseModule = {};
|
||||
|
||||
function getString(memory, ptr) {
|
||||
function getString(memory, ref) {
|
||||
if (!memory) return "<yet unknown>";
|
||||
var buffer = memory.buffer;
|
||||
return getStringImpl(new Uint32Array(buffer), new Uint16Array(buffer), ptr);
|
||||
const buffer = memory.buffer;
|
||||
return getStringImpl(new Uint32Array(buffer), new Uint16Array(buffer), ref);
|
||||
}
|
||||
|
||||
// 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) {
|
||||
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);
|
||||
}
|
||||
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(", "));
|
||||
}
|
||||
imports.Math = imports.Math || Math;
|
||||
@ -73,12 +77,12 @@ function preInstantiate(imports) {
|
||||
|
||||
/** Prepares the final module once instantiation is complete. */
|
||||
function postInstantiate(baseModule, instance) {
|
||||
var rawExports = instance.exports;
|
||||
var memory = rawExports.memory;
|
||||
var table = rawExports.table;
|
||||
var alloc = rawExports["__alloc"];
|
||||
var retain = rawExports["__retain"];
|
||||
var rtti = rawExports["__rtti"] | 0;
|
||||
const rawExports = instance.exports;
|
||||
const memory = rawExports.memory;
|
||||
const table = rawExports.table;
|
||||
const alloc = rawExports["__alloc"];
|
||||
const retain = rawExports["__retain"];
|
||||
const rtti = rawExports["__rtti"] || ~0; // oob if not present
|
||||
|
||||
// Provide views for all sorts of basic values
|
||||
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. */
|
||||
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. */
|
||||
function newString(str) {
|
||||
function __allocString(str) {
|
||||
const length = str.length;
|
||||
const ptr = alloc(length << 1, STRING_ID);
|
||||
const ref = alloc(length << 1, STRING_ID);
|
||||
checkMem();
|
||||
for (let i = 0, j = ptr >>> 1; i < length; ++i) U16[j + i] = str.charCodeAt(i);
|
||||
return retain(ptr);
|
||||
for (let i = 0, j = ref >>> 1; i < length; ++i) U16[j + i] = str.charCodeAt(i);
|
||||
return ref;
|
||||
}
|
||||
|
||||
baseModule.newString = newString;
|
||||
baseModule.__allocString = __allocString;
|
||||
|
||||
/** Reads a string from the module's memory by its pointer. */
|
||||
function getString(ptr) {
|
||||
function __getString(ref) {
|
||||
checkMem();
|
||||
const id = U32[ptr + ID_OFFSET >>> 2];
|
||||
if (id !== STRING_ID) throw Error("not a string: " + ptr);
|
||||
return getStringImpl(U32, U16, ptr);
|
||||
const id = U32[ref + ID_OFFSET >>> 2];
|
||||
if (id !== STRING_ID) throw Error("not a string: " + ref);
|
||||
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. */
|
||||
function newArray(id, values) {
|
||||
function __allocArray(id, values) {
|
||||
const info = getInfo(id);
|
||||
if (!(info & ARRAY)) throw Error("not an array: " + id + " @ " + 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_DATASTART_OFFSET >>> 2] = buf;
|
||||
U32[arr + ABV_DATALENGTH_OFFSET >>> 2] = length << align;
|
||||
var view;
|
||||
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);
|
||||
}
|
||||
const view = getView(align, info & VAL_SIGNED, info & VAL_FLOAT);
|
||||
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]);
|
||||
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. */
|
||||
function getArray(arr) {
|
||||
function __getArray(arr) {
|
||||
checkMem();
|
||||
const id = U32[arr + ID_OFFSET >>> 2];
|
||||
const info = getInfo(id);
|
||||
@ -180,19 +195,22 @@ function postInstantiate(baseModule, instance) {
|
||||
const align = getAlign(VAL_ALIGN, info);
|
||||
var buf = U32[arr + ABV_DATASTART_OFFSET >>> 2];
|
||||
const length = U32[buf + SIZE_OFFSET >>> 2] >>> align;
|
||||
var view;
|
||||
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);
|
||||
}
|
||||
const view = getView(align, info & VAL_SIGNED, info & VAL_FLOAT);
|
||||
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
|
||||
baseModule.memory = baseModule.memory || memory;
|
||||
|
@ -49,7 +49,7 @@ export function varadd(a: i32 = 1, b: i32 = 2): i32 {
|
||||
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 {
|
||||
return fn(a, b);
|
||||
@ -60,3 +60,5 @@ export function dotrace(num: f64): void {
|
||||
}
|
||||
|
||||
export const INT32ARRAY_ID = idof<Int32Array>();
|
||||
export const UINT32ARRAY_ID = idof<Uint32Array>();
|
||||
export const FLOAT32ARRAY_ID = idof<Float32Array>();
|
||||
|
Binary file not shown.
@ -24,43 +24,70 @@ assert(module.memory instanceof WebAssembly.Memory);
|
||||
assert(typeof module.memory.copy === "function");
|
||||
|
||||
// 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
|
||||
var str = "Hello world!𤭢";
|
||||
var ptr = module.newString(str);
|
||||
assert.strictEqual(module.getString(ptr), str);
|
||||
assert.strictEqual(module.strlen(ptr), str.length);
|
||||
{
|
||||
let str = "Hello world!𤭢";
|
||||
let ref = module.__retain(module.__allocString(str));
|
||||
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
|
||||
var arr = [1, 2, 3, 4, 5, 0x7fffffff];
|
||||
ptr = module.newArray(module.INT32ARRAY_ID, arr);
|
||||
assert.strictEqual(module.sum(ptr), arr.reduce((a, b) => a + b, 0) | 0);
|
||||
// should be able to allocate a typed array
|
||||
{
|
||||
var arr = [1, 2, 3, 4, 5, 0x80000000 | 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
|
||||
assert.deepEqual(Array.from(module.getArray(ptr)), arr);
|
||||
// should be able to get a view on an internal typed array
|
||||
assert.deepEqual(module.__getArray(ref), arr);
|
||||
|
||||
// should be able to release no longer needed references
|
||||
module.__release(ptr);
|
||||
try {
|
||||
module.__release(ptr);
|
||||
assert(false);
|
||||
} catch (e) {};
|
||||
// should be able to sum up its values
|
||||
assert.strictEqual(module.sum(ref), arr.reduce((a, b) => (a + b) | 0, 0) | 0);
|
||||
|
||||
// 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(2, 3), 5);
|
||||
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
|
||||
// var fn = module.getFunction(module.varadd_ptr);
|
||||
// var fn = module.getFunction(module.varadd_ref);
|
||||
// assert.strictEqual(fn(), 3);
|
||||
// assert.strictEqual(fn(2, 3), 5);
|
||||
// assert.strictEqual(fn(2), 4);
|
||||
|
||||
// should be able to create a new function and call it from WASM
|
||||
// ptr = module.newFunction(module.varadd);
|
||||
// assert.strictEqual(module.calladd(ptr, 2, 3), 5);
|
||||
// ref = module.newFunction(module.varadd);
|
||||
// assert.strictEqual(module.calladd(ref, 2, 3), 5);
|
||||
|
||||
// should be able to use a class
|
||||
var car = new module.Car(5);
|
||||
|
@ -4145,6 +4145,8 @@ export function compileVisitMembers(compiler: Compiler): void {
|
||||
|
||||
function typeToRuntimeFlags(type: Type): TypeinfoFlags {
|
||||
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.isManaged) flags |= TypeinfoFlags.VALUE_MANAGED;
|
||||
return flags / TypeinfoFlags.VALUE_ALIGN_0;
|
||||
|
@ -43,22 +43,30 @@ export const enum TypeinfoFlags {
|
||||
VALUE_ALIGN_3 = 1 << 7,
|
||||
/** Value alignment of 16 bytes. */
|
||||
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_NULLABLE = 1 << 9,
|
||||
VALUE_NULLABLE = 1 << 11,
|
||||
/** Value type is managed. */
|
||||
VALUE_MANAGED = 1 << 10,
|
||||
VALUE_MANAGED = 1 << 12,
|
||||
/** Key alignment of 1 byte. */
|
||||
KEY_ALIGN_0 = 1 << 11,
|
||||
KEY_ALIGN_0 = 1 << 13,
|
||||
/** Key alignment of 2 bytes. */
|
||||
KEY_ALIGN_1 = 1 << 12,
|
||||
KEY_ALIGN_1 = 1 << 14,
|
||||
/** Key alignment of 4 bytes. */
|
||||
KEY_ALIGN_2 = 1 << 13,
|
||||
KEY_ALIGN_2 = 1 << 15,
|
||||
/** Key alignment of 8 bytes. */
|
||||
KEY_ALIGN_3 = 1 << 14,
|
||||
KEY_ALIGN_3 = 1 << 16,
|
||||
/** 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_NULLABLE = 1 << 16,
|
||||
KEY_NULLABLE = 1 << 20,
|
||||
/** Key type is managed. */
|
||||
KEY_MANAGED = 1 << 17
|
||||
KEY_MANAGED = 1 << 21
|
||||
}
|
||||
|
@ -45,6 +45,7 @@
|
||||
)
|
||||
(func $~lib/memory/memory.copy (; 3 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(local $3 i32)
|
||||
(local $4 i32)
|
||||
block $~lib/util/memory/memmove|inlined.0
|
||||
local.get $2
|
||||
local.set $3
|
||||
@ -81,16 +82,14 @@
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $0
|
||||
local.get $1
|
||||
local.tee $4
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
block (result i32)
|
||||
local.get $1
|
||||
local.tee $2
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
i32.load8_u
|
||||
end
|
||||
local.get $4
|
||||
i32.load8_u
|
||||
i32.store8
|
||||
br $continue|0
|
||||
end
|
||||
@ -128,16 +127,14 @@
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $0
|
||||
local.get $1
|
||||
local.tee $4
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
block (result i32)
|
||||
local.get $1
|
||||
local.tee $2
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
i32.load8_u
|
||||
end
|
||||
local.get $4
|
||||
i32.load8_u
|
||||
i32.store8
|
||||
local.get $3
|
||||
i32.const 1
|
||||
@ -303,9 +300,9 @@
|
||||
i32.const 16
|
||||
i32.shr_u
|
||||
local.tee $0
|
||||
current_memory
|
||||
memory.size
|
||||
i32.sub
|
||||
grow_memory
|
||||
memory.grow
|
||||
i32.const 0
|
||||
i32.lt_s
|
||||
if
|
||||
@ -446,7 +443,6 @@
|
||||
)
|
||||
(func $assembly/buddy/flip_parent_is_split (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
|
||||
(local $1 i32)
|
||||
(local $2 i32)
|
||||
local.get $0
|
||||
i32.const 1
|
||||
i32.sub
|
||||
@ -456,8 +452,6 @@
|
||||
i32.const 8
|
||||
i32.div_u
|
||||
local.tee $1
|
||||
local.set $2
|
||||
local.get $1
|
||||
call $assembly/buddy/node_is_split$get
|
||||
i32.const 1
|
||||
local.get $0
|
||||
@ -467,7 +461,7 @@
|
||||
i32.xor
|
||||
local.set $0
|
||||
global.get $assembly/buddy/NODE_IS_SPLIT_START
|
||||
local.get $2
|
||||
local.get $1
|
||||
i32.add
|
||||
local.get $0
|
||||
i32.store8
|
||||
@ -489,13 +483,11 @@
|
||||
if
|
||||
global.get $assembly/buddy/base_ptr
|
||||
call $assembly/buddy/list_remove
|
||||
block (result i32)
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
i32.const 1
|
||||
i32.sub
|
||||
global.set $assembly/buddy/bucket_limit
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
end
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
i32.const 1
|
||||
i32.sub
|
||||
global.set $assembly/buddy/bucket_limit
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
call $assembly/buddy/buckets$get
|
||||
call $assembly/buddy/list_init
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
@ -522,13 +514,11 @@
|
||||
call $assembly/buddy/buckets$get
|
||||
local.get $2
|
||||
call $assembly/buddy/list_push
|
||||
block (result i32)
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
i32.const 1
|
||||
i32.sub
|
||||
global.set $assembly/buddy/bucket_limit
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
end
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
i32.const 1
|
||||
i32.sub
|
||||
global.set $assembly/buddy/bucket_limit
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
call $assembly/buddy/buckets$get
|
||||
call $assembly/buddy/list_init
|
||||
local.get $1
|
||||
@ -580,7 +570,7 @@
|
||||
i32.const -8
|
||||
i32.and
|
||||
global.set $assembly/buddy/base_ptr
|
||||
current_memory
|
||||
memory.size
|
||||
i32.const 16
|
||||
i32.shl
|
||||
global.set $assembly/buddy/max_ptr
|
||||
@ -624,14 +614,14 @@
|
||||
local.get $1
|
||||
call $assembly/buddy/buckets$get
|
||||
call $assembly/buddy/list_pop
|
||||
local.tee $2
|
||||
local.tee $3
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 1
|
||||
local.get $1
|
||||
i32.eqz
|
||||
local.get $1
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
local.get $1
|
||||
i32.ne
|
||||
select
|
||||
if
|
||||
@ -653,44 +643,44 @@
|
||||
local.get $1
|
||||
call $assembly/buddy/buckets$get
|
||||
call $assembly/buddy/list_pop
|
||||
local.set $2
|
||||
local.set $3
|
||||
end
|
||||
i32.const 1
|
||||
i32.const 30
|
||||
local.get $1
|
||||
i32.sub
|
||||
i32.shl
|
||||
local.set $3
|
||||
local.set $2
|
||||
local.get $1
|
||||
local.get $4
|
||||
i32.lt_u
|
||||
if (result i32)
|
||||
local.get $3
|
||||
if
|
||||
local.get $2
|
||||
i32.const 2
|
||||
i32.div_u
|
||||
i32.const 8
|
||||
i32.add
|
||||
else
|
||||
local.get $3
|
||||
local.set $2
|
||||
end
|
||||
local.get $2
|
||||
local.get $3
|
||||
i32.add
|
||||
call $assembly/buddy/update_max_ptr
|
||||
i32.eqz
|
||||
if
|
||||
local.get $1
|
||||
call $assembly/buddy/buckets$get
|
||||
local.get $2
|
||||
local.get $3
|
||||
call $assembly/buddy/list_push
|
||||
i32.const 0
|
||||
return
|
||||
end
|
||||
local.get $2
|
||||
local.get $3
|
||||
local.get $1
|
||||
call $assembly/buddy/node_for_ptr
|
||||
local.tee $3
|
||||
local.tee $2
|
||||
if
|
||||
local.get $3
|
||||
local.get $2
|
||||
call $assembly/buddy/flip_parent_is_split
|
||||
end
|
||||
loop $continue|1
|
||||
@ -698,19 +688,19 @@
|
||||
local.get $4
|
||||
i32.lt_u
|
||||
if
|
||||
local.get $3
|
||||
local.get $2
|
||||
i32.const 1
|
||||
i32.shl
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.tee $3
|
||||
local.tee $2
|
||||
call $assembly/buddy/flip_parent_is_split
|
||||
local.get $1
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.tee $1
|
||||
call $assembly/buddy/buckets$get
|
||||
local.get $3
|
||||
local.get $2
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.get $1
|
||||
@ -719,10 +709,10 @@
|
||||
br $continue|1
|
||||
end
|
||||
end
|
||||
local.get $2
|
||||
local.get $3
|
||||
local.get $0
|
||||
i32.store
|
||||
local.get $2
|
||||
local.get $3
|
||||
i32.const 8
|
||||
i32.add
|
||||
return
|
||||
@ -761,14 +751,15 @@
|
||||
if (result i32)
|
||||
i32.const 1
|
||||
else
|
||||
local.get $0
|
||||
global.get $assembly/buddy/bucket_limit
|
||||
local.get $0
|
||||
i32.eq
|
||||
end
|
||||
br_if $break|0
|
||||
local.get $1
|
||||
i32.const 1
|
||||
i32.sub
|
||||
local.tee $1
|
||||
i32.const 1
|
||||
i32.xor
|
||||
i32.const 1
|
||||
@ -777,8 +768,6 @@
|
||||
call $assembly/buddy/ptr_for_node
|
||||
call $assembly/buddy/list_remove
|
||||
local.get $1
|
||||
i32.const 1
|
||||
i32.sub
|
||||
i32.const 2
|
||||
i32.div_u
|
||||
local.set $1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1 +1,2 @@
|
||||
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
@ -1,2 +1,2 @@
|
||||
export { memory } from "memory";
|
||||
export { __reset };
|
||||
export { __free, __reset };
|
||||
|
@ -1,34 +1,31 @@
|
||||
(module
|
||||
(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$vi (func (param i32)))
|
||||
(type $FUNCSIG$v (func))
|
||||
(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)))
|
||||
(import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
|
||||
(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 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) "\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 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")
|
||||
(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 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) "\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/offset (mut i32) (i32.const 0))
|
||||
(global $~lib/rt/RTTI_BASE i32 (i32.const 104))
|
||||
(export "memory" (memory $0))
|
||||
(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 "__release" (func $~lib/rt/stub/__free))
|
||||
(export "__release" (func $~lib/rt/stub/__release))
|
||||
(export "__collect" (func $~lib/rt/stub/__collect))
|
||||
(export "__instanceof" (func $~lib/rt/__instanceof))
|
||||
(export "__typeinfo" (func $~lib/rt/__typeinfo))
|
||||
(export "__rtti" (global $~lib/rt/RTTI_BASE))
|
||||
(export "memory.copy" (func $~lib/memory/memory.copy))
|
||||
(export "memory.init" (func $~lib/memory/memory.init))
|
||||
(export "memory.drop" (func $~lib/memory/memory.drop))
|
||||
(export "memory.repeat" (func $~lib/memory/memory.repeat))
|
||||
(export "memory.compare" (func $~lib/memory/memory.compare))
|
||||
(export "__free" (func $~lib/rt/stub/__release))
|
||||
(export "__reset" (func $~lib/rt/stub/__reset))
|
||||
(start $start)
|
||||
(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 $4 i32)
|
||||
(local $5 i32)
|
||||
(local $6 i32)
|
||||
local.get $0
|
||||
i32.const 1073741808
|
||||
i32.gt_u
|
||||
if
|
||||
unreachable
|
||||
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
|
||||
i32.const 16
|
||||
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.const 15
|
||||
i32.add
|
||||
i32.const -16
|
||||
i32.and
|
||||
local.tee $3
|
||||
current_memory
|
||||
local.tee $2
|
||||
memory.size
|
||||
local.tee $4
|
||||
i32.const 16
|
||||
i32.shl
|
||||
i32.gt_u
|
||||
if
|
||||
local.get $4
|
||||
local.get $3
|
||||
local.get $2
|
||||
local.get $3
|
||||
i32.sub
|
||||
i32.const 65535
|
||||
i32.add
|
||||
@ -77,17 +72,16 @@
|
||||
i32.const 16
|
||||
i32.shr_u
|
||||
local.tee $5
|
||||
local.tee $6
|
||||
local.get $4
|
||||
local.get $6
|
||||
local.get $5
|
||||
i32.gt_s
|
||||
select
|
||||
grow_memory
|
||||
memory.grow
|
||||
i32.const 0
|
||||
i32.lt_s
|
||||
if
|
||||
local.get $5
|
||||
grow_memory
|
||||
memory.grow
|
||||
i32.const 0
|
||||
i32.lt_s
|
||||
if
|
||||
@ -95,21 +89,47 @@
|
||||
end
|
||||
end
|
||||
end
|
||||
local.get $3
|
||||
global.set $~lib/rt/stub/offset
|
||||
local.get $2
|
||||
global.set $~lib/rt/stub/offset
|
||||
local.get $3
|
||||
i32.const 16
|
||||
i32.sub
|
||||
local.tee $3
|
||||
local.tee $2
|
||||
local.get $1
|
||||
i32.store offset=8
|
||||
local.get $3
|
||||
local.get $2
|
||||
local.get $0
|
||||
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 $4 i32)
|
||||
block $~lib/util/memory/memmove|inlined.0
|
||||
local.get $2
|
||||
local.set $3
|
||||
@ -146,16 +166,14 @@
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $0
|
||||
local.get $1
|
||||
local.tee $4
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
block (result i32)
|
||||
local.get $1
|
||||
local.tee $2
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
i32.load8_u
|
||||
end
|
||||
local.get $4
|
||||
i32.load8_u
|
||||
i32.store8
|
||||
br $continue|0
|
||||
end
|
||||
@ -193,16 +211,14 @@
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $0
|
||||
local.get $1
|
||||
local.tee $4
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
block (result i32)
|
||||
local.get $1
|
||||
local.tee $2
|
||||
i32.const 1
|
||||
i32.add
|
||||
local.set $1
|
||||
local.get $2
|
||||
i32.load8_u
|
||||
end
|
||||
local.get $4
|
||||
i32.load8_u
|
||||
i32.store8
|
||||
local.get $3
|
||||
i32.const 1
|
||||
@ -284,119 +300,7 @@
|
||||
end
|
||||
end
|
||||
)
|
||||
(func $~lib/rt/stub/__realloc (; 3 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result 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)
|
||||
(func $~lib/memory/memory.repeat (; 8 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
|
||||
(local $4 i32)
|
||||
local.get $2
|
||||
local.get $3
|
||||
@ -421,7 +325,7 @@
|
||||
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 $1
|
||||
i32.eq
|
||||
@ -467,12 +371,12 @@
|
||||
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.set $~lib/rt/stub/offset
|
||||
)
|
||||
(func $start (; 14 ;) (type $FUNCSIG$v)
|
||||
i32.const 240
|
||||
(func $start (; 11 ;) (type $FUNCSIG$v)
|
||||
i32.const 144
|
||||
global.set $~lib/rt/stub/startOffset
|
||||
global.get $~lib/rt/stub/startOffset
|
||||
global.set $~lib/rt/stub/offset
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 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 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/pure/CUR (mut i32) (i32.const 0))
|
||||
(global $~lib/rt/pure/END (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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)
|
||||
(elem (i32.const 0) $null)
|
||||
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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 420) "A\04\00\00\02\00\00\00\08")
|
||||
(data (i32.const 444) "B\04\00\00\00\00\00\00\08")
|
||||
(data (i32.const 468) "D \02")
|
||||
(data (i32.const 484) "D$\00\00\00\00\00\00\08\00\00\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 524) "A\10\00\00\02\00\00\00\08")
|
||||
(data (i32.const 548) "B\10\00\00\00\00\00\00\08")
|
||||
(data (i32.const 572) "D\82 ")
|
||||
(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))
|
||||
(start $start)
|
||||
(func $~lib/rt/__typeinfo (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
|
||||
@ -38,232 +38,323 @@
|
||||
block $folding-inner0
|
||||
i32.const 4
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 25
|
||||
i32.const 537
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 5
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 41
|
||||
i32.const 25
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 6
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 73
|
||||
i32.const 553
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 7
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 137
|
||||
i32.const 41
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 8
|
||||
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
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 10
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 1097
|
||||
i32.const 649
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 11
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 1609
|
||||
i32.const 137
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 12
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 26
|
||||
i32.const 1609
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 13
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 42
|
||||
i32.const 1673
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 14
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 74
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 15
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 138
|
||||
i32.const 265
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 16
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 266
|
||||
i32.const 4169
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 17
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 1098
|
||||
i32.const 6217
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 18
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 1610
|
||||
i32.const 538
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 19
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 32796
|
||||
i32.const 26
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 20
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 16428
|
||||
i32.const 554
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 21
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 8268
|
||||
i32.const 42
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 22
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 4236
|
||||
i32.const 586
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 23
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 2316
|
||||
i32.const 74
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 24
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 139292
|
||||
i32.const 650
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 25
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 204828
|
||||
i32.const 138
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 26
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 3148
|
||||
i32.const 1610
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 27
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 3660
|
||||
i32.const 1674
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 28
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 206412
|
||||
i32.const 266
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 29
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 8
|
||||
i32.const 4170
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 30
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 6218
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 31
|
||||
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
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 33
|
||||
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
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 35
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 8
|
||||
i32.const 270604
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 36
|
||||
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
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 38
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 8
|
||||
i32.const 274508
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 39
|
||||
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
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 41
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 819788
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 43
|
||||
i32.const 42
|
||||
call $~lib/rt/__typeinfo
|
||||
i32.const 8
|
||||
i32.ne
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 43
|
||||
call $~lib/rt/__typeinfo
|
||||
if
|
||||
br $folding-inner0
|
||||
end
|
||||
i32.const 44
|
||||
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.ne
|
||||
if
|
||||
|
@ -17,32 +17,45 @@ class Ref {}
|
||||
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;
|
||||
|
||||
test<Array<i8>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0);
|
||||
test<Array<i16>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1);
|
||||
test<Array<i32>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2);
|
||||
test<Array<i64>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3);
|
||||
test<Array<i8>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
|
||||
test<Array<u8>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0);
|
||||
test<Array<i16>>(TypeinfoFlags.ARRAY | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1 | TypeinfoFlags.VALUE_SIGNED);
|
||||
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<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<Set<i8>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0);
|
||||
test<Set<i16>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1);
|
||||
test<Set<i32>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_2);
|
||||
test<Set<i64>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_3);
|
||||
test<Set<i8>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0 | TypeinfoFlags.VALUE_SIGNED);
|
||||
test<Set<u8>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_0);
|
||||
test<Set<i16>>(TypeinfoFlags.SET | TypeinfoFlags.ACYCLIC | TypeinfoFlags.VALUE_ALIGN_1 | TypeinfoFlags.VALUE_SIGNED);
|
||||
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<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<Map<v128,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_4 | TypeinfoFlags.VALUE_ALIGN_0);
|
||||
test<Map<i64,i16>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_3 | TypeinfoFlags.VALUE_ALIGN_1);
|
||||
test<Map<i32,i32>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_2 | TypeinfoFlags.VALUE_ALIGN_2);
|
||||
test<Map<i16,i64>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_1 | TypeinfoFlags.VALUE_ALIGN_3);
|
||||
test<Map<i8,v128>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | 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 | null,i8>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC |KEY_ALIGN_REF | TypeinfoFlags.KEY_NULLABLE | TypeinfoFlags.KEY_MANAGED | TypeinfoFlags.VALUE_ALIGN_0);
|
||||
test<Map<i8,Ref>>(TypeinfoFlags.MAP | TypeinfoFlags.ACYCLIC | TypeinfoFlags.KEY_ALIGN_0 | 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<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.KEY_SIGNED | TypeinfoFlags.VALUE_ALIGN_1 | TypeinfoFlags.VALUE_SIGNED);
|
||||
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.KEY_SIGNED | TypeinfoFlags.VALUE_ALIGN_3 | TypeinfoFlags.VALUE_SIGNED);
|
||||
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 | 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 | TypeinfoFlags.VALUE_SIGNED);
|
||||
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.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<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
|
||||
|
||||
|
@ -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 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 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)
|
||||
(elem (i32.const 0) $null)
|
||||
(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))
|
||||
(export "memory" (memory $0))
|
||||
(start $start)
|
||||
@ -56,7 +56,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -71,7 +71,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -86,7 +86,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -101,7 +101,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -116,7 +116,22 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -131,7 +146,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -146,7 +161,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -161,7 +176,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -176,7 +191,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -191,22 +206,7 @@
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
(func $rt/flags/test<~lib/set/Set<i64>> (; 12 ;) (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)
|
||||
(func $rt/flags/test<~lib/array/Array<rt/flags/Ref>> (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
|
||||
i32.const 16
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -221,7 +221,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -236,7 +236,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -251,7 +251,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -266,7 +266,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -281,7 +281,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -296,7 +296,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -311,7 +311,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -326,7 +326,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -341,7 +341,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -356,7 +356,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -371,7 +371,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -386,7 +386,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -401,7 +401,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -416,7 +416,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -431,7 +431,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -446,7 +446,22 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -461,7 +476,22 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -476,7 +506,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -491,7 +521,22 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -506,7 +551,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -521,7 +566,22 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -536,7 +596,22 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -551,7 +626,7 @@
|
||||
unreachable
|
||||
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
|
||||
call $~lib/rt/__typeinfo
|
||||
local.get $0
|
||||
@ -566,34 +641,206 @@
|
||||
unreachable
|
||||
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 8
|
||||
i32.or
|
||||
i32.const 16
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/array/Array<i8>>
|
||||
i32.const 1
|
||||
i32.const 8
|
||||
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.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/array/Array<i16>>
|
||||
i32.const 1
|
||||
i32.const 8
|
||||
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.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/array/Array<i32>>
|
||||
i32.const 1
|
||||
i32.const 8
|
||||
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.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/array/Array<i64>>
|
||||
i32.const 1
|
||||
i32.const 8
|
||||
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.or
|
||||
call $rt/flags/test<~lib/array/Array<v128>>
|
||||
@ -602,7 +849,7 @@
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 4096
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/array/Array<rt/flags/Ref>>
|
||||
i32.const 1
|
||||
@ -610,9 +857,9 @@
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.const 2048
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 4096
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/array/Array<rt/flags/Ref | null>>
|
||||
i32.const 2
|
||||
@ -620,28 +867,80 @@
|
||||
i32.or
|
||||
i32.const 16
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/set/Set<i8>>
|
||||
i32.const 2
|
||||
i32.const 8
|
||||
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.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/set/Set<i16>>
|
||||
i32.const 2
|
||||
i32.const 8
|
||||
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.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/set/Set<i32>>
|
||||
i32.const 2
|
||||
i32.const 8
|
||||
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.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/set/Set<i64>>
|
||||
i32.const 2
|
||||
i32.const 8
|
||||
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.or
|
||||
call $rt/flags/test<~lib/set/Set<v128>>
|
||||
@ -650,7 +949,7 @@
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 4096
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/set/Set<rt/flags/Ref>>
|
||||
i32.const 2
|
||||
@ -658,47 +957,63 @@
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.const 2048
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 4096
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/set/Set<rt/flags/Ref | null>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 32768
|
||||
i32.const 131072
|
||||
i32.or
|
||||
i32.const 16
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/map/Map<v128,i8>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 16384
|
||||
i32.const 65536
|
||||
i32.or
|
||||
i32.const 262144
|
||||
i32.or
|
||||
i32.const 32
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/map/Map<i64,i16>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 8192
|
||||
i32.const 32768
|
||||
i32.or
|
||||
i32.const 262144
|
||||
i32.or
|
||||
i32.const 64
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/map/Map<i32,i32>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 4096
|
||||
i32.const 16384
|
||||
i32.or
|
||||
i32.const 262144
|
||||
i32.or
|
||||
i32.const 128
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/map/Map<i16,i64>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 2048
|
||||
i32.const 8192
|
||||
i32.or
|
||||
i32.const 262144
|
||||
i32.or
|
||||
i32.const 256
|
||||
i32.or
|
||||
@ -708,29 +1023,35 @@
|
||||
i32.or
|
||||
global.get $rt/flags/KEY_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 131072
|
||||
i32.const 2097152
|
||||
i32.or
|
||||
i32.const 16
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/map/Map<rt/flags/Ref,i8>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
global.get $rt/flags/KEY_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 65536
|
||||
i32.const 1048576
|
||||
i32.or
|
||||
i32.const 131072
|
||||
i32.const 2097152
|
||||
i32.or
|
||||
i32.const 16
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
call $rt/flags/test<~lib/map/Map<rt/flags/Ref | null,i8>>
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 2048
|
||||
i32.const 8192
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 262144
|
||||
i32.or
|
||||
i32.const 4096
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
@ -738,11 +1059,13 @@
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 8192
|
||||
i32.or
|
||||
i32.const 262144
|
||||
i32.or
|
||||
i32.const 2048
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 4096
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
@ -750,19 +1073,33 @@
|
||||
i32.const 4
|
||||
i32.const 8
|
||||
i32.or
|
||||
i32.const 65536
|
||||
i32.const 1048576
|
||||
i32.or
|
||||
i32.const 131072
|
||||
i32.const 2097152
|
||||
i32.or
|
||||
global.get $rt/flags/KEY_ALIGN_REF
|
||||
i32.or
|
||||
i32.const 512
|
||||
i32.const 2048
|
||||
i32.or
|
||||
i32.const 1024
|
||||
i32.const 4096
|
||||
i32.or
|
||||
global.get $rt/flags/VALUE_ALIGN_REF
|
||||
i32.or
|
||||
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
|
||||
call $rt/flags/test<rt/flags/NoCycle>
|
||||
i32.const 0
|
||||
@ -786,9 +1123,9 @@
|
||||
i32.const 8
|
||||
call $rt/flags/test<rt/flags/InnerCycleMapValue>
|
||||
)
|
||||
(func $start (; 38 ;) (type $FUNCSIG$v)
|
||||
(func $start (; 51 ;) (type $FUNCSIG$v)
|
||||
call $start:rt/flags
|
||||
)
|
||||
(func $null (; 39 ;) (type $FUNCSIG$v)
|
||||
(func $null (; 52 ;) (type $FUNCSIG$v)
|
||||
)
|
||||
)
|
||||
|
@ -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 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 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/i (mut i32) (i32.const 0))
|
||||
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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)
|
||||
(elem (i32.const 0) $null)
|
||||
(global $std/array-literal/staticArrayI8 i32 (i32.const 48))
|
||||
|
@ -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 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 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)
|
||||
(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))
|
||||
|
@ -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 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 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)
|
||||
(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))
|
||||
|
@ -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 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 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/pure/CUR (mut i32) (i32.const 0))
|
||||
(global $~lib/rt/pure/END (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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)
|
||||
(elem (i32.const 0) $null)
|
||||
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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/pure/CUR (mut i32) (i32.const 0))
|
||||
(global $~lib/rt/pure/END (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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)
|
||||
(elem (i32.const 0) $null)
|
||||
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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/nullStr i32 (i32.const 0))
|
||||
(global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
|
||||
|
@ -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 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 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)
|
||||
(elem (i32.const 0) $null)
|
||||
(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
Loading…
x
Reference in New Issue
Block a user