diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 6f5ef8f1..0516bde4 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -489,6 +489,8 @@ declare class String { trim(): string; trimLeft(): string; trimRight(): string; + padStart(targetLength: i32, padString?: string): string; + padEnd(targetLength: i32, padString?: string): string; repeat(count?: i32): string; toString(): string; toUTF8(): usize; diff --git a/std/assembly/internal/string.ts b/std/assembly/internal/string.ts index 7e6e5daa..0f0d08ff 100644 --- a/std/assembly/internal/string.ts +++ b/std/assembly/internal/string.ts @@ -17,7 +17,7 @@ export const EMPTY = changetype(""); // TODO: is this a bad idea with '= @inline export function clamp(val: T, lo: T, hi: T): T { - return max(min(val, hi), lo); + return min(max(val, lo), hi); } /** Allocates a raw String with uninitialized contents. */ @@ -28,6 +28,15 @@ export function allocate(length: i32): String { return changetype(buffer); } +@inline +export function copyUnsafe(dest: String, destOffset: usize, src: String, srcOffset: usize, len: usize): void { + memory.copy( + changetype(dest) + (destOffset << 1) + HEADER_SIZE, + changetype(src) + (srcOffset << 1) + HEADER_SIZE, + len << 1 + ); +} + export function isWhiteSpaceOrLineTerminator(c: u16): bool { switch (c) { case 10: // @@ -76,24 +85,19 @@ export const enum CharCode { export function parse(str: String, radix: i32 = 0): T { var len: i32 = str.length; - if (!len) { - return NaN; - } + if (!len) return NaN; + var ptr = changetype(str) /* + HEAD -> offset */; var code = load(ptr, HEADER_SIZE); // determine sign var sign: T; if (code == CharCode.MINUS) { - if (!--len) { - return NaN; - } + if (!--len) return NaN; code = load(ptr += 2, HEADER_SIZE); sign = -1; } else if (code == CharCode.PLUS) { - if (!--len) { - return NaN; - } + if (!--len) return NaN; code = load(ptr += 2, HEADER_SIZE); sign = 1; } else { @@ -122,9 +126,7 @@ export function parse(str: String, radix: i32 = 0): T { radix = 16; break; } - default: { - radix = 10; - } + default: radix = 10; } } else radix = 10; } else if (radix < 2 || radix > 36) { @@ -141,22 +143,79 @@ export function parse(str: String, radix: i32 = 0): T { code -= CharCode.A - 10; } else if (code >= CharCode.a && code <= CharCode.z) { code -= CharCode.a - 10; - } else { - break; - } - if (code >= radix) { - break; - } + } else break; + if (code >= radix) break; num = (num * radix) + code; ptr += 2; } return sign * num; } -export function compareUTF16(ptr1: usize, ptr2: usize, len: usize): i32 { +export function compareUnsafe(str1: String, offset1: usize, str2: String, offset2: usize, len: usize): i32 { var cmp: i32 = 0; + var ptr1 = changetype(str1) + (offset1 << 1); + var ptr2 = changetype(str2) + (offset2 << 1); while (len && !(cmp = load(ptr1, HEADER_SIZE) - load(ptr2, HEADER_SIZE))) { --len, ++ptr1, ++ptr2; } return cmp; } + +export function repeatUnsafe(dest: String, destOffset: usize, src: String, count: i32): void { + var length = src.length; + if (ASC_SHRINK_LEVEL > 1) { + let strLen = length << 1; + let to = changetype(dest) + HEADER_SIZE + (destOffset << 1); + let from = changetype(src) + HEADER_SIZE; + for (let i = 0, len = strLen * count; i < len; i += strLen) { + memory.copy(to + i, from, strLen); + } + } else { + switch (length) { + case 0: break; + case 1: { + let cc = load(changetype(src), HEADER_SIZE); + let out = changetype(dest) + (destOffset << 1); + for (let i = 0; i < count; ++i) { + store(out + (i << 1), cc, HEADER_SIZE); + } + break; + } + case 2: { + let cc = load(changetype(src), HEADER_SIZE); + let out = changetype(dest) + (destOffset << 1); + for (let i = 0; i < count; ++i) { + store(out + (i << 2), cc, HEADER_SIZE); + } + break; + } + case 3: { + let cc1 = load(changetype(src), HEADER_SIZE + 0); + let cc2 = load(changetype(src), HEADER_SIZE + 4); + let out = changetype(dest) + (destOffset << 1); + for (let i = 0; i < count; ++i) { + store(out + (i << 2), cc1, HEADER_SIZE + 0); + store(out + (i << 1), cc2, HEADER_SIZE + 4); + } + break; + } + case 4: { + let cc = load(changetype(src), HEADER_SIZE); + let out = changetype(dest) + (destOffset << 1); + for (let i = 0; i < count; ++i) { + store(out + (i << 3), cc, HEADER_SIZE); + } + break; + } + default: { + let strLen = length << 1; + let to = changetype(dest) + HEADER_SIZE + (destOffset << 1); + let from = changetype(src) + HEADER_SIZE; + for (let i = 0, len = strLen * count; i < len; i += strLen) { + memory.copy(to + i, from, strLen); + } + break; + } + } + } +} diff --git a/std/assembly/string.ts b/std/assembly/string.ts index 492e7502..a623d961 100644 --- a/std/assembly/string.ts +++ b/std/assembly/string.ts @@ -4,7 +4,9 @@ import { EMPTY, clamp, allocate, - compareUTF16, + compareUnsafe, + repeatUnsafe, + copyUnsafe, isWhiteSpaceOrLineTerminator, CharCode, parse @@ -73,9 +75,8 @@ export class String { charCodeAt(pos: i32): i32 { assert(this !== null); - if (pos >= this.length) { - return -1; // (NaN) - } + if (pos >= this.length) return -1; // (NaN) + return load( changetype(this) + (pos << 1), HEADER_SIZE @@ -84,9 +85,8 @@ export class String { codePointAt(pos: i32): i32 { assert(this !== null); - if (pos >= this.length) { - return -1; // (undefined) - } + if (pos >= this.length) return -1; // (undefined) + var first = load( changetype(this) + (pos << 1), HEADER_SIZE @@ -111,24 +111,14 @@ export class String { concat(other: String): String { assert(this !== null); if (other === null) other = changetype("null"); + var thisLen: isize = this.length; var otherLen: isize = other.length; var outLen: usize = thisLen + otherLen; if (outLen == 0) return EMPTY; var out = allocate(outLen); - - memory.copy( - changetype(out) + HEADER_SIZE, - changetype(this) + HEADER_SIZE, - thisLen << 1 - ); - - memory.copy( - changetype(out) + HEADER_SIZE + (thisLen << 1), - changetype(other) + HEADER_SIZE, - otherLen << 1 - ); - + copyUnsafe(out, 0, this, 0, thisLen); + copyUnsafe(out, thisLen, other, 0, otherLen); return out; } @@ -139,11 +129,7 @@ export class String { var searchLength: isize = searchString.length; var start: isize = end - searchLength; if (start < 0) return false; - return !compareUTF16( - changetype(this) + (start << 1), - changetype(searchString), - searchLength - ); + return !compareUnsafe(this, start, searchString, 0, searchLength); } @operator("==") @@ -154,11 +140,7 @@ export class String { var leftLength = left.length; if (leftLength != right.length) return false; - return !compareUTF16( - changetype(left), - changetype(right), - leftLength - ); + return !compareUnsafe(left, 0, right, 0, leftLength); } @operator("!=") @@ -177,11 +159,7 @@ export class String { if (!rightLength) return true; var length = min(leftLength, rightLength); - return compareUTF16( - changetype(left), - changetype(right), - length - ) > 0; + return compareUnsafe(left, 0, right, 0, length) > 0; } @operator(">=") @@ -196,11 +174,7 @@ export class String { if (!rightLength) return true; var length = min(leftLength, rightLength); - return compareUTF16( - changetype(left), - changetype(right), - length - ) >= 0; + return compareUnsafe(left, 0, right, 0, length) >= 0; } @operator("<") @@ -214,11 +188,7 @@ export class String { if (!leftLength) return true; var length = min(leftLength, rightLength); - return compareUTF16( - changetype(left), - changetype(right), - length - ) < 0; + return compareUnsafe(left, 0, right, 0, length) < 0; } @operator("<=") @@ -233,11 +203,7 @@ export class String { if (!leftLength) return true; var length = min(leftLength, rightLength); - return compareUTF16( - changetype(left), - changetype(right), - length - ) <= 0; + return compareUnsafe(left, 0, right, 0, length) <= 0; } includes(searchString: String, position: i32 = 0): bool { @@ -247,6 +213,7 @@ export class String { indexOf(searchString: String, fromIndex: i32 = 0): i32 { assert(this !== null); if (searchString === null) searchString = changetype("null"); + var searchLen: isize = searchString.length; if (!searchLen) return 0; var len: isize = this.length; @@ -254,13 +221,7 @@ export class String { var start = clamp(fromIndex, 0, len); len -= searchLen; for (let k: isize = start; k <= len; ++k) { - if (!compareUTF16( - changetype(this) + (k << 1), - changetype(searchString), - searchLen - )) { - return k; - } + if (!compareUnsafe(this, k, searchString, 0, searchLen)) return k; } return -1; } @@ -268,21 +229,14 @@ export class String { lastIndexOf(searchString: String, fromIndex: i32 = i32.MAX_VALUE): i32 { assert(this !== null); if (searchString === null) searchString = changetype("null"); + var len: isize = this.length; var searchLen: isize = searchString.length; if (!searchLen) return len; if (!len) return -1; var start = clamp(fromIndex, 0, len - searchLen); - - // TODO: multiple char codes for (let k = start; k >= 0; --k) { - if (!compareUTF16( - changetype(this) + (k << 1), - changetype(searchString), - searchLen - )) { - return k; - } + if (!compareUnsafe(this, k, searchString, 0, searchLen)) return k; } return -1; } @@ -296,12 +250,7 @@ export class String { var start = clamp(pos, 0, len); var searchLength: isize = searchString.length; if (searchLength + start > len) return false; - - return !compareUTF16( - changetype(this) + (start << 1), - changetype(searchString), - searchLength - ); + return !compareUnsafe(this, start, searchString, 0, searchLength); } substr(start: i32, length: i32 = i32.MAX_VALUE): String { @@ -309,19 +258,11 @@ export class String { var intStart: isize = start; var end: isize = length; var size: isize = this.length; - if (intStart < 0) { - intStart = max(size + intStart, 0); - } + if (intStart < 0) intStart = max(size + intStart, 0); var resultLength = clamp(end, 0, size - intStart); - if (resultLength <= 0) { - return EMPTY; - } + if (resultLength <= 0) return EMPTY; var out = allocate(resultLength); - memory.copy( - changetype(out) + HEADER_SIZE, - changetype(this) + HEADER_SIZE + (intStart << 1), - resultLength << 1 - ); + copyUnsafe(out, 0, this, intStart, resultLength); return out; } @@ -333,18 +274,10 @@ export class String { var from = min(finalStart, finalEnd); var to = max(finalStart, finalEnd); len = to - from; - if (!len) { - return EMPTY; - } - if (!from && to == this.length) { - return this; - } + if (!len) return EMPTY; + if (!from && to == this.length) return this; var out = allocate(len); - memory.copy( - changetype(out) + HEADER_SIZE, - changetype(this) + HEADER_SIZE + (from << 1), - len << 1 - ); + copyUnsafe(out, 0, this, from, len); return out; } @@ -369,18 +302,10 @@ export class String { ) { ++start, --length; } - if (!length) { - return EMPTY; - } - if (!start && length == this.length) { - return this; - } + if (!length) return EMPTY; + if (!start && length == this.length) return this; var out = allocate(length); - memory.copy( - changetype(out) + HEADER_SIZE, - changetype(this) + HEADER_SIZE + (start << 1), - length << 1 - ); + copyUnsafe(out, 0, this, start, length); return out; } @@ -396,19 +321,11 @@ export class String { ) { ++start; } - if (!start) { - return this; - } + if (!start) return this; var outLen = len - start; - if (!outLen) { - return EMPTY; - } + if (!outLen) return EMPTY; var out = allocate(outLen); - memory.copy( - changetype(out) + HEADER_SIZE, - changetype(this) + HEADER_SIZE + (start << 1), - outLen << 1 - ); + copyUnsafe(out, 0, this, start, outLen); return out; } @@ -423,18 +340,50 @@ export class String { ) { --len; } - if (len <= 0) { - return EMPTY; - } - if (len == this.length) { - return this; - } + if (len <= 0) return EMPTY; + if (len == this.length) return this; var out = allocate(len); - memory.copy( - changetype(out) + HEADER_SIZE, - changetype(this) + HEADER_SIZE, - len << 1 - ); + copyUnsafe(out, 0, this, 0, len); + return out; + } + + padStart(targetLength: i32, padString: String = changetype(" ")): String { + assert(this !== null); + var length = this.length; + var padLen = padString.length; + if (targetLength < length || !padLen) return this; + var len = targetLength - length; + var out = allocate(targetLength); + if (len > padLen) { + let count = (len - 1) / padLen; + let base = count * padLen; + let rest = len - base; + repeatUnsafe(out, 0, padString, count); + if (rest) copyUnsafe(out, base, padString, 0, rest); + } else { + copyUnsafe(out, 0, padString, 0, len); + } + if (length) copyUnsafe(out, len, this, 0, length); + return out; + } + + padEnd(targetLength: i32, padString: String = changetype(" ")): String { + assert(this !== null); + var length = this.length; + var padLen = padString.length; + if (targetLength < length || !padLen) return this; + var len = targetLength - length; + var out = allocate(targetLength); + if (length) copyUnsafe(out, 0, this, 0, length); + if (len > padLen) { + let count = (len - 1) / padLen; + let base = count * padLen; + let rest = len - base; + repeatUnsafe(out, length, padString, count); + if (rest) copyUnsafe(out, base + length, padString, 0, rest); + } else { + copyUnsafe(out, length, padString, 0, len); + } return out; } @@ -451,20 +400,7 @@ export class String { if (count === 1) return this; var result = allocate(length * count); - var strLen = length << 1; - - /* - * TODO possible improvments: reuse existing result for exponentially concats like: - * 'a' + 'a' => 'aa' + 'aa' => 'aaaa' + 'aaaa' etc - */ - for (let offset = 0, len = strLen * count; offset < len; offset += strLen) { - memory.copy( - changetype(result) + HEADER_SIZE + offset, - changetype(this) + HEADER_SIZE, - strLen - ); - } - + repeatUnsafe(result, 0, this, count); return result; } @@ -551,24 +487,19 @@ export function parseI64(str: String, radix: i32 = 0): i64 { // FIXME: naive implementation export function parseFloat(str: String): f64 { var len: i32 = str.length; - if (!len) { - return NaN; - } + if (!len) return NaN; + var ptr = changetype(str) /* + HEAD -> offset */; var code = load(ptr, HEADER_SIZE); // determine sign var sign: f64; if (code == CharCode.MINUS) { - if (!--len) { - return NaN; - } + if (!--len) return NaN; code = load(ptr += 2, HEADER_SIZE); sign = -1; } else if (code == CharCode.PLUS) { - if (!--len) { - return NaN; - } + if (!--len) return NaN; code = load(ptr += 2, HEADER_SIZE); sign = 1; } else { @@ -588,9 +519,7 @@ export function parseFloat(str: String): f64 { assert(false); // TODO } code -= CharCode._0; - if (code > 9) { - break; - } + if (code > 9) break; num += code * fac; fac *= 0.1; ptr += 2; @@ -598,9 +527,7 @@ export function parseFloat(str: String): f64 { break; } code -= CharCode._0; - if (code >= 10) { - break; - } + if (code >= 10) break; num = (num * 10) + code; ptr += 2; } diff --git a/std/portable/index.d.ts b/std/portable/index.d.ts index 218dda71..753c78d3 100644 --- a/std/portable/index.d.ts +++ b/std/portable/index.d.ts @@ -290,14 +290,21 @@ declare class String { private constructor(); + charAt(index: i32): string; + charCodeAt(index: i32): i32; + concat(other: string): string; indexOf(other: string, fromIndex?: i32): i32; lastIndexOf(other: string, fromIndex?: i32): i32; includes(other: string): bool; - charAt(index: i32): string; - charCodeAt(index: i32): i32; - substring(from: i32, to?: i32): string; startsWith(other: string): bool; endsWith(other: string): bool; + substr(start: u32, length?: u32): string; + substring(from: i32, to?: i32): string; + trim(): string; + trimLeft(): string; + trimRight(): string; + padStart(targetLength: i32, padString?: string): string; + padEnd(targetLength: i32, padString?: string): string; replace(search: string, replacement: string): string; repeat(count?: i32): string; toString(): string; diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index 7768d1a8..f6f7e27d 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -3,7 +3,7 @@ (type $iv (func (param i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) - (type $iiii (func (param i32 i32 i32) (result i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) @@ -104,36 +104,50 @@ (get_local $0) ) ) - (func $~lib/internal/string/compareUTF16 (; 3 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/internal/string/compareUnsafe (; 3 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (set_local $1 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (loop $continue|0 (if - (if (result i32) - (get_local $2) - (i32.eqz - (tee_local $3 - (i32.sub - (i32.load16_u offset=4 - (get_local $0) - ) - (i32.load16_u offset=4 - (get_local $1) + (tee_local $0 + (if (result i32) + (get_local $4) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.load16_u offset=4 + (get_local $1) + ) + (i32.load16_u offset=4 + (get_local $2) + ) ) ) ) + (get_local $4) ) - (get_local $2) ) (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - (set_local $0 - (i32.add - (get_local $0) + (get_local $4) (i32.const 1) ) ) @@ -143,11 +157,17 @@ (i32.const 1) ) ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) (br $continue|0) ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__eq (; 4 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -196,9 +216,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $2) ) ) diff --git a/tests/compiler/object-literal.untouched.wat b/tests/compiler/object-literal.untouched.wat index d5348e36..5b1a49d5 100644 --- a/tests/compiler/object-literal.untouched.wat +++ b/tests/compiler/object-literal.untouched.wat @@ -3,7 +3,7 @@ (type $iv (func (param i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) - (type $iiii (func (param i32 i32 i32) (result i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) @@ -134,47 +134,67 @@ ) ) ) - (func $~lib/internal/string/compareUTF16 (; 3 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (set_local $3 + (func $~lib/internal/string/compareUnsafe (; 3 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 (i32.const 0) ) + (set_local $6 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (block $break|0 (loop $continue|0 (if (if (result i32) - (get_local $2) + (get_local $4) (i32.eqz - (tee_local $3 + (tee_local $5 (i32.sub (i32.load16_u offset=4 - (get_local $0) + (get_local $6) ) (i32.load16_u offset=4 - (get_local $1) + (get_local $7) ) ) ) ) - (get_local $2) + (get_local $4) ) (block (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) + (get_local $4) (i32.const 1) ) ) - (set_local $0 + (set_local $6 (i32.add - (get_local $0) + (get_local $6) (i32.const 1) ) ) - (set_local $1 + (set_local $7 (i32.add - (get_local $1) + (get_local $7) (i32.const 1) ) ) @@ -184,7 +204,7 @@ ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__eq (; 4 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -233,9 +253,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $3) ) ) diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 0d67350d..640c9f32 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -3,6 +3,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 12) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") @@ -59,36 +60,50 @@ ) ) ) - (func $~lib/internal/string/compareUTF16 (; 4 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/internal/string/compareUnsafe (; 4 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (set_local $1 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (loop $continue|0 (if - (if (result i32) - (get_local $2) - (i32.eqz - (tee_local $3 - (i32.sub - (i32.load16_u offset=4 - (get_local $0) - ) - (i32.load16_u offset=4 - (get_local $1) + (tee_local $0 + (if (result i32) + (get_local $4) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.load16_u offset=4 + (get_local $1) + ) + (i32.load16_u offset=4 + (get_local $2) + ) ) ) ) + (get_local $4) ) - (get_local $2) ) (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - (set_local $0 - (i32.add - (get_local $0) + (get_local $4) (i32.const 1) ) ) @@ -98,11 +113,17 @@ (i32.const 1) ) ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) (br $continue|0) ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String#startsWith (; 5 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -115,7 +136,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 12) - (i32.const 291) + (i32.const 245) (i32.const 4) ) (unreachable) @@ -137,46 +158,42 @@ (get_local $1) ) ) - (tee_local $2 + (tee_local $3 (select - (tee_local $2 + (tee_local $3 (select (get_local $2) - (tee_local $3 - (i32.load - (get_local $0) - ) - ) - (i32.lt_s + (i32.const 0) + (i32.gt_s (get_local $2) - (get_local $3) + (i32.const 0) ) ) ) - (i32.const 0) - (i32.gt_s + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.lt_s + (get_local $3) (get_local $2) - (i32.const 0) ) ) ) ) - (get_local $3) + (get_local $2) ) (return (i32.const 0) ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $2) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $3) (get_local $1) + (i32.const 0) (get_local $4) ) ) diff --git a/tests/compiler/std/array-access.untouched.wat b/tests/compiler/std/array-access.untouched.wat index 4cee9c77..56b0214a 100644 --- a/tests/compiler/std/array-access.untouched.wat +++ b/tests/compiler/std/array-access.untouched.wat @@ -3,6 +3,7 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) @@ -130,47 +131,67 @@ ) ) ) - (func $~lib/internal/string/compareUTF16 (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (set_local $3 + (func $~lib/internal/string/compareUnsafe (; 6 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 (i32.const 0) ) + (set_local $6 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (block $break|0 (loop $continue|0 (if (if (result i32) - (get_local $2) + (get_local $4) (i32.eqz - (tee_local $3 + (tee_local $5 (i32.sub (i32.load16_u offset=4 - (get_local $0) + (get_local $6) ) (i32.load16_u offset=4 - (get_local $1) + (get_local $7) ) ) ) ) - (get_local $2) + (get_local $4) ) (block (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) + (get_local $4) (i32.const 1) ) ) - (set_local $0 + (set_local $6 (i32.add - (get_local $0) + (get_local $6) (i32.const 1) ) ) - (set_local $1 + (set_local $7 (i32.add - (get_local $1) + (get_local $7) (i32.const 1) ) ) @@ -180,7 +201,7 @@ ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String#startsWith (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -201,7 +222,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 12) - (i32.const 291) + (i32.const 245) (i32.const 4) ) (unreachable) @@ -236,18 +257,18 @@ (get_local $3) ) (tee_local $7 - (get_local $4) + (get_local $5) ) - (i32.lt_s + (i32.gt_s (get_local $6) (get_local $7) ) ) ) (tee_local $7 - (get_local $5) + (get_local $4) ) - (i32.gt_s + (i32.lt_s (get_local $6) (get_local $7) ) @@ -272,15 +293,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $8) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $8) (get_local $1) + (i32.const 0) (get_local $9) ) ) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 8e2e6f57..0637502a 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -12,6 +12,7 @@ (type $Iv (func (param i64))) (type $II (func (param i64) (result i64))) (type $iv (func (param i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) @@ -5473,36 +5474,50 @@ ) ) ) - (func $~lib/internal/string/compareUTF16 (; 90 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/internal/string/compareUnsafe (; 90 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (set_local $1 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (loop $continue|0 (if - (if (result i32) - (get_local $2) - (i32.eqz - (tee_local $3 - (i32.sub - (i32.load16_u offset=4 - (get_local $0) - ) - (i32.load16_u offset=4 - (get_local $1) + (tee_local $0 + (if (result i32) + (get_local $4) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.load16_u offset=4 + (get_local $1) + ) + (i32.load16_u offset=4 + (get_local $2) + ) ) ) ) + (get_local $4) ) - (get_local $2) ) (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - (set_local $0 - (i32.add - (get_local $0) + (get_local $4) (i32.const 1) ) ) @@ -5512,11 +5527,17 @@ (i32.const 1) ) ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) (br $continue|0) ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__gt (; 91 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -5578,9 +5599,11 @@ ) ) (i32.gt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (select (get_local $2) (get_local $3) @@ -5653,9 +5676,11 @@ ) ) (i32.lt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (select (get_local $2) (get_local $3) @@ -5727,9 +5752,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $2) ) ) @@ -5861,7 +5888,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 696) - (i32.const 56) + (i32.const 58) (i32.const 4) ) (unreachable) @@ -5956,20 +5983,21 @@ (get_local $0) (i32.const 4) ) - (tee_local $0 - (i32.shl - (get_local $3) - (i32.const 1) - ) + (i32.shl + (get_local $3) + (i32.const 1) ) ) (call $~lib/memory/memory.copy (i32.add (i32.add (get_local $2) - (i32.const 4) + (i32.shl + (get_local $3) + (i32.const 1) + ) ) - (get_local $0) + (i32.const 4) ) (i32.add (get_local $1) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index fda4dfb5..6cba54b1 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -12,6 +12,7 @@ (type $Iv (func (param i64))) (type $II (func (param i64) (result i64))) (type $iv (func (param i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) @@ -7794,47 +7795,67 @@ ) ) ) - (func $~lib/internal/string/compareUTF16 (; 121 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (set_local $3 + (func $~lib/internal/string/compareUnsafe (; 121 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 (i32.const 0) ) + (set_local $6 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (block $break|0 (loop $continue|0 (if (if (result i32) - (get_local $2) + (get_local $4) (i32.eqz - (tee_local $3 + (tee_local $5 (i32.sub (i32.load16_u offset=4 - (get_local $0) + (get_local $6) ) (i32.load16_u offset=4 - (get_local $1) + (get_local $7) ) ) ) ) - (get_local $2) + (get_local $4) ) (block (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) + (get_local $4) (i32.const 1) ) ) - (set_local $0 + (set_local $6 (i32.add - (get_local $0) + (get_local $6) (i32.const 1) ) ) - (set_local $1 + (set_local $7 (i32.add - (get_local $1) + (get_local $7) (i32.const 1) ) ) @@ -7844,7 +7865,7 @@ ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__gt (; 122 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -7920,9 +7941,11 @@ ) ) (i32.gt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $6) ) (i32.const 0) @@ -8002,9 +8025,11 @@ ) ) (i32.lt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $6) ) (i32.const 0) @@ -8480,9 +8505,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $3) ) ) @@ -8691,7 +8718,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 696) - (i32.const 56) + (i32.const 58) (i32.const 4) ) (unreachable) @@ -8732,6 +8759,8 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) (if (i32.eqz (i32.ne @@ -8788,24 +8817,32 @@ (get_local $4) ) ) - (call $~lib/memory/memory.copy - (i32.add - (get_local $5) - (get_global $~lib/internal/string/HEADER_SIZE) + (block $~lib/internal/string/copyUnsafe|inlined.0 + (set_local $6 + (i32.const 0) ) - (i32.add - (get_local $0) - (get_global $~lib/internal/string/HEADER_SIZE) + (set_local $7 + (i32.const 0) ) - (i32.shl - (get_local $2) - (i32.const 1) - ) - ) - (call $~lib/memory/memory.copy - (i32.add + (call $~lib/memory/memory.copy (i32.add - (get_local $5) + (i32.add + (get_local $5) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) (get_global $~lib/internal/string/HEADER_SIZE) ) (i32.shl @@ -8813,13 +8850,36 @@ (i32.const 1) ) ) - (i32.add - (get_local $1) - (get_global $~lib/internal/string/HEADER_SIZE) + ) + (block $~lib/internal/string/copyUnsafe|inlined.1 + (set_local $7 + (i32.const 0) ) - (i32.shl - (get_local $3) - (i32.const 1) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $5) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $1) + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) ) ) (get_local $5) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 558b3138..dde8dddb 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -2,11 +2,12 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) (type $ii (func (param i32) (result i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) + (type $iiiv (func (param i32 i32 i32))) (type $i (func (result i32))) (type $iiF (func (param i32 i32) (result f64))) (type $iF (func (param i32) (result f64))) - (type $iiiv (func (param i32 i32 i32))) (type $Ii (func (param i64) (result i32))) (type $iIiv (func (param i32 i64 i32))) (type $v (func)) @@ -31,68 +32,76 @@ (data (i32.const 196) "\04\00\00\00n\00u\00l\00l") (data (i32.const 208) "\06\00\00\00s\00t\00r\00i\00n\00g") (data (i32.const 224) "\03\00\00\00I\00\'\00m") - (data (i32.const 236) "\01\00\00\00,") - (data (i32.const 244) "\01\00\00\00x") - (data (i32.const 252) "\03\00\00\00,\00 \00I") - (data (i32.const 264) "\01\00\00\00g") - (data (i32.const 272) "\01\00\00\00i") - (data (i32.const 280) "\01\00\00\000") - (data (i32.const 288) "\01\00\00\001") - (data (i32.const 296) "\05\00\00\000\00b\001\000\001") - (data (i32.const 312) "\05\00\00\000\00o\007\000\007") - (data (i32.const 328) "\05\00\00\000\00x\00f\000\00f") - (data (i32.const 344) "\05\00\00\000\00x\00F\000\00F") - (data (i32.const 360) "\03\00\00\000\001\001") - (data (i32.const 372) "\04\00\00\000\00x\001\00g") - (data (i32.const 384) "\03\00\00\000\00.\001") - (data (i32.const 396) "\03\00\00\00.\002\005") - (data (i32.const 408) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r") - (data (i32.const 428) "\01\00\00\00a") - (data (i32.const 436) "\01\00\00\00b") - (data (i32.const 444) "\02\00\00\00a\00b") - (data (i32.const 452) "\02\00\00\00b\00a") - (data (i32.const 460) "\02\00\00\00a\00a") - (data (i32.const 468) "\03\00\00\00a\00b\00c") - (data (i32.const 480) "\03\00\00\001\002\003") - (data (i32.const 492) "\03\00\00\00a\00a\00a") - (data (i32.const 504) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b") - (data (i32.const 524) "\05\00\00\00a\00a\00a\00a\00a") - (data (i32.const 540) "\06\00\00\00a\00a\00a\00a\00a\00a") - (data (i32.const 556) "\07\00\00\00a\00a\00a\00a\00a\00a\00a") - (data (i32.const 576) "H\02\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;") - (data (i32.const 648) "\90\02\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") - (data (i32.const 1168) "\01\00\00\008") - (data (i32.const 1176) "\05\00\00\00-\001\000\000\000") - (data (i32.const 1192) "\04\00\00\001\002\003\004") - (data (i32.const 1204) "\05\00\00\001\002\003\004\005") - (data (i32.const 1220) "\06\00\00\001\002\003\004\005\006") - (data (i32.const 1236) "\07\00\00\001\001\001\001\001\001\001") - (data (i32.const 1256) "\07\00\00\001\002\003\004\005\006\007") - (data (i32.const 1276) "\n\00\00\002\001\004\007\004\008\003\006\004\006") - (data (i32.const 1300) "\n\00\00\002\001\004\007\004\008\003\006\004\007") - (data (i32.const 1324) "\0b\00\00\00-\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 1352) "\02\00\00\00-\001") - (data (i32.const 1360) "\04\00\00\001\000\000\000") - (data (i32.const 1372) "\n\00\00\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 1396) "\n\00\00\004\002\009\004\009\006\007\002\009\005") - (data (i32.const 1424) "\98\05\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;") - (data (i32.const 1496) "\e0\05\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") - (data (i32.const 2016) "\08\00\00\009\009\009\009\009\009\009\009") - (data (i32.const 2036) "\t\00\00\001\000\000\000\000\000\000\000\000") - (data (i32.const 2060) "\0b\00\00\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2088) "\0c\00\00\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2116) "\0f\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2152) "\10\00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2188) "\11\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2228) "\14\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005") - (data (i32.const 2272) "\05\00\00\00-\001\002\003\004") - (data (i32.const 2288) "\0b\00\00\00-\004\002\009\004\009\006\007\002\009\005") - (data (i32.const 2316) "\0c\00\00\00-\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2344) "\0d\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2376) "\10\00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2412) "\12\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 2452) "\13\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007") - (data (i32.const 2496) "\14\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008") + (data (i32.const 236) "\01\00\00\00 ") + (data (i32.const 244) "\03\00\00\00 \00 \00 ") + (data (i32.const 256) "\01\00\00\00a") + (data (i32.const 264) "\03\00\00\00a\00b\00c") + (data (i32.const 276) "\05\00\00\00 \00 \00a\00b\00c") + (data (i32.const 292) "\03\00\00\001\002\003") + (data (i32.const 304) "\06\00\00\001\002\003\00a\00b\00c") + (data (i32.const 320) "\08\00\00\001\002\003\001\002\00a\00b\00c") + (data (i32.const 340) "\05\00\00\00a\00b\00c\00 \00 ") + (data (i32.const 356) "\06\00\00\00a\00b\00c\00a\00b\00c") + (data (i32.const 372) "\08\00\00\00a\00b\00c\00a\00b\00c\00a\00b") + (data (i32.const 392) "\01\00\00\00,") + (data (i32.const 400) "\01\00\00\00x") + (data (i32.const 408) "\03\00\00\00,\00 \00I") + (data (i32.const 420) "\01\00\00\00g") + (data (i32.const 428) "\01\00\00\00i") + (data (i32.const 436) "\01\00\00\000") + (data (i32.const 444) "\01\00\00\001") + (data (i32.const 452) "\05\00\00\000\00b\001\000\001") + (data (i32.const 468) "\05\00\00\000\00o\007\000\007") + (data (i32.const 484) "\05\00\00\000\00x\00f\000\00f") + (data (i32.const 500) "\05\00\00\000\00x\00F\000\00F") + (data (i32.const 516) "\03\00\00\000\001\001") + (data (i32.const 528) "\04\00\00\000\00x\001\00g") + (data (i32.const 540) "\03\00\00\000\00.\001") + (data (i32.const 552) "\03\00\00\00.\002\005") + (data (i32.const 564) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r") + (data (i32.const 584) "\01\00\00\00b") + (data (i32.const 592) "\02\00\00\00a\00b") + (data (i32.const 600) "\02\00\00\00b\00a") + (data (i32.const 608) "\02\00\00\00a\00a") + (data (i32.const 616) "\03\00\00\00a\00a\00a") + (data (i32.const 628) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b") + (data (i32.const 648) "\05\00\00\00a\00a\00a\00a\00a") + (data (i32.const 664) "\06\00\00\00a\00a\00a\00a\00a\00a") + (data (i32.const 680) "\07\00\00\00a\00a\00a\00a\00a\00a\00a") + (data (i32.const 704) "\c8\02\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;") + (data (i32.const 776) "\10\03\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") + (data (i32.const 1296) "\01\00\00\008") + (data (i32.const 1304) "\05\00\00\00-\001\000\000\000") + (data (i32.const 1320) "\04\00\00\001\002\003\004") + (data (i32.const 1332) "\05\00\00\001\002\003\004\005") + (data (i32.const 1348) "\06\00\00\001\002\003\004\005\006") + (data (i32.const 1364) "\07\00\00\001\001\001\001\001\001\001") + (data (i32.const 1384) "\07\00\00\001\002\003\004\005\006\007") + (data (i32.const 1404) "\n\00\00\002\001\004\007\004\008\003\006\004\006") + (data (i32.const 1428) "\n\00\00\002\001\004\007\004\008\003\006\004\007") + (data (i32.const 1452) "\0b\00\00\00-\002\001\004\007\004\008\003\006\004\008") + (data (i32.const 1480) "\02\00\00\00-\001") + (data (i32.const 1488) "\04\00\00\001\000\000\000") + (data (i32.const 1500) "\n\00\00\002\001\004\007\004\008\003\006\004\008") + (data (i32.const 1524) "\n\00\00\004\002\009\004\009\006\007\002\009\005") + (data (i32.const 1552) "\18\06\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;") + (data (i32.const 1624) "`\06\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") + (data (i32.const 2144) "\08\00\00\009\009\009\009\009\009\009\009") + (data (i32.const 2164) "\t\00\00\001\000\000\000\000\000\000\000\000") + (data (i32.const 2188) "\0b\00\00\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2216) "\0c\00\00\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2244) "\0f\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2280) "\10\00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2316) "\11\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2356) "\14\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005") + (data (i32.const 2400) "\05\00\00\00-\001\002\003\004") + (data (i32.const 2416) "\0b\00\00\00-\004\002\009\004\009\006\007\002\009\005") + (data (i32.const 2444) "\0c\00\00\00-\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2472) "\0d\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2504) "\10\00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2540) "\12\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") + (data (i32.const 2580) "\13\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007") + (data (i32.const 2624) "\14\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008") (export "memory" (memory $0)) (export "getString" (func $std/string/getString)) (start $start) @@ -105,7 +114,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 75) + (i32.const 77) (i32.const 4) ) (unreachable) @@ -289,36 +298,50 @@ ) (get_local $1) ) - (func $~lib/internal/string/compareUTF16 (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/internal/string/compareUnsafe (; 6 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (set_local $1 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (loop $continue|0 (if - (if (result i32) - (get_local $2) - (i32.eqz - (tee_local $3 - (i32.sub - (i32.load16_u offset=4 - (get_local $0) - ) - (i32.load16_u offset=4 - (get_local $1) + (tee_local $0 + (if (result i32) + (get_local $4) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.load16_u offset=4 + (get_local $1) + ) + (i32.load16_u offset=4 + (get_local $2) + ) ) ) ) + (get_local $4) ) - (get_local $2) ) (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - (set_local $0 - (i32.add - (get_local $0) + (get_local $4) (i32.const 1) ) ) @@ -328,11 +351,17 @@ (i32.const 1) ) ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) (br $continue|0) ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__eq (; 7 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -381,9 +410,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $2) ) ) @@ -400,7 +431,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 31) + (i32.const 33) (i32.const 4) ) (unreachable) @@ -474,7 +505,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 291) + (i32.const 245) (i32.const 4) ) (unreachable) @@ -496,46 +527,42 @@ (get_local $1) ) ) - (tee_local $2 + (tee_local $3 (select - (tee_local $2 + (tee_local $3 (select (get_local $2) - (tee_local $3 - (i32.load - (get_local $0) - ) - ) - (i32.lt_s + (i32.const 0) + (i32.gt_s (get_local $2) - (get_local $3) + (i32.const 0) ) ) ) - (i32.const 0) - (i32.gt_s + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.lt_s + (get_local $3) (get_local $2) - (i32.const 0) ) ) ) ) - (get_local $3) + (get_local $2) ) (return (i32.const 0) ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $2) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $3) (get_local $1) + (i32.const 0) (get_local $4) ) ) @@ -550,7 +577,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 136) + (i32.const 126) (i32.const 4) ) (unreachable) @@ -572,21 +599,21 @@ (tee_local $2 (select (get_local $2) - (tee_local $3 - (i32.load - (get_local $0) - ) - ) - (i32.lt_s + (i32.const 0) + (i32.gt_s (get_local $2) - (get_local $3) + (i32.const 0) ) ) ) - (i32.const 0) - (i32.gt_s + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.lt_s (get_local $2) - (i32.const 0) + (get_local $3) ) ) (tee_local $2 @@ -603,15 +630,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $3) (get_local $1) + (i32.const 0) (get_local $2) ) ) @@ -650,7 +673,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 248) + (i32.const 214) (i32.const 4) ) (unreachable) @@ -693,17 +716,17 @@ (tee_local $2 (select (get_local $2) - (get_local $3) - (i32.lt_s + (i32.const 0) + (i32.gt_s (get_local $2) - (get_local $3) + (i32.const 0) ) ) ) - (i32.const 0) - (i32.gt_s + (get_local $3) + (i32.lt_s (get_local $2) - (i32.const 0) + (get_local $3) ) ) ) @@ -722,15 +745,11 @@ ) ) (if - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $2) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $2) (get_local $1) + (i32.const 0) (get_local $4) ) (block @@ -760,763 +779,7 @@ (i32.const -1) ) ) - (func $~lib/string/String#lastIndexOf (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (if - (i32.eqz - (get_local $0) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 80) - (i32.const 269) - (i32.const 4) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (set_local $1 - (i32.const 196) - ) - ) - (set_local $3 - (i32.load - (get_local $0) - ) - ) - (if - (i32.eqz - (tee_local $4 - (i32.load - (get_local $1) - ) - ) - ) - (return - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $3) - ) - (return - (i32.const -1) - ) - ) - (block $break|0 - (set_local $3 - (select - (tee_local $2 - (select - (get_local $2) - (tee_local $3 - (i32.sub - (get_local $3) - (get_local $4) - ) - ) - (i32.lt_s - (get_local $2) - (get_local $3) - ) - ) - ) - (i32.const 0) - (i32.gt_s - (get_local $2) - (i32.const 0) - ) - ) - ) - (loop $repeat|0 - (br_if $break|0 - (i32.lt_s - (get_local $3) - (i32.const 0) - ) - ) - (if - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) - (get_local $1) - (get_local $4) - ) - (block - (set_local $3 - (i32.sub - (get_local $3) - (i32.const 1) - ) - ) - (br $repeat|0) - ) - (return - (get_local $3) - ) - ) - ) - ) - (i32.const -1) - ) - (func $~lib/string/String#lastIndexOf|trampoline (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (block $1of1 - (block $0of1 - (block $outOfRange - (br_table $0of1 $1of1 $outOfRange - (i32.sub - (get_global $~argc) - (i32.const 1) - ) - ) - ) - (unreachable) - ) - (set_local $2 - (i32.const 2147483647) - ) - ) - (call $~lib/string/String#lastIndexOf - (get_local $0) - (get_local $1) - (get_local $2) - ) - ) - (func $std/string/getString (; 16 ;) (type $i) (result i32) - (get_global $std/string/str) - ) - (func $~lib/internal/string/parse (; 17 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 f64) - (local $6 f64) - (if - (i32.eqz - (tee_local $4 - (i32.load - (get_local $0) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $6 - (if (result f64) - (i32.eq - (tee_local $2 - (i32.load16_u offset=4 - (tee_local $3 - (get_local $0) - ) - ) - ) - (i32.const 45) - ) - (block (result f64) - (if - (i32.eqz - (tee_local $4 - (i32.sub - (get_local $4) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $2 - (i32.load16_u offset=4 - (tee_local $3 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - ) - (f64.const -1) - ) - (block (result f64) - (if - (i32.eq - (get_local $2) - (i32.const 43) - ) - (block - (if - (i32.eqz - (tee_local $4 - (i32.sub - (get_local $4) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $2 - (i32.load16_u offset=4 - (tee_local $3 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - ) - ) - ) - (f64.const 1) - ) - ) - ) - (if - (get_local $1) - (block - (if - (i32.eqz - (tee_local $0 - (i32.lt_s - (get_local $1) - (i32.const 2) - ) - ) - ) - (set_local $0 - (i32.gt_s - (get_local $1) - (i32.const 36) - ) - ) - ) - (if - (get_local $0) - (return - (f64.const nan:0x8000000000000) - ) - ) - ) - (block - (if - (tee_local $0 - (i32.eq - (get_local $2) - (i32.const 48) - ) - ) - (set_local $0 - (i32.gt_s - (get_local $4) - (i32.const 2) - ) - ) - ) - (set_local $1 - (if (result i32) - (get_local $0) - (block $break|0 (result i32) - (block $case6|0 - (block $case5|0 - (block $case3|0 - (block $case1|0 - (br_if $case1|0 - (i32.eq - (tee_local $0 - (i32.load16_u offset=4 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - (i32.const 66) - ) - ) - (br_if $case1|0 - (i32.eq - (get_local $0) - (i32.const 98) - ) - ) - (br_if $case3|0 - (i32.eq - (get_local $0) - (i32.const 79) - ) - ) - (br_if $case3|0 - (i32.eq - (get_local $0) - (i32.const 111) - ) - ) - (br_if $case5|0 - (i32.eq - (get_local $0) - (i32.const 88) - ) - ) - (br_if $case5|0 - (i32.eq - (get_local $0) - (i32.const 120) - ) - ) - (br $case6|0) - ) - (set_local $3 - (i32.add - (get_local $3) - (i32.const 4) - ) - ) - (set_local $4 - (i32.sub - (get_local $4) - (i32.const 2) - ) - ) - (br $break|0 - (i32.const 2) - ) - ) - (set_local $3 - (i32.add - (get_local $3) - (i32.const 4) - ) - ) - (set_local $4 - (i32.sub - (get_local $4) - (i32.const 2) - ) - ) - (br $break|0 - (i32.const 8) - ) - ) - (set_local $3 - (i32.add - (get_local $3) - (i32.const 4) - ) - ) - (set_local $4 - (i32.sub - (get_local $4) - (i32.const 2) - ) - ) - (br $break|0 - (i32.const 16) - ) - ) - (i32.const 10) - ) - (i32.const 10) - ) - ) - ) - ) - (block $break|1 - (loop $continue|1 - (set_local $4 - (i32.sub - (tee_local $0 - (get_local $4) - ) - (i32.const 1) - ) - ) - (if - (get_local $0) - (block - (if - (tee_local $0 - (i32.ge_s - (tee_local $2 - (i32.load16_u offset=4 - (get_local $3) - ) - ) - (i32.const 48) - ) - ) - (set_local $0 - (i32.le_s - (get_local $2) - (i32.const 57) - ) - ) - ) - (br_if $break|1 - (i32.ge_s - (tee_local $2 - (if (result i32) - (get_local $0) - (i32.sub - (get_local $2) - (i32.const 48) - ) - (block (result i32) - (if - (tee_local $0 - (i32.ge_s - (get_local $2) - (i32.const 65) - ) - ) - (set_local $0 - (i32.le_s - (get_local $2) - (i32.const 90) - ) - ) - ) - (if (result i32) - (get_local $0) - (i32.sub - (get_local $2) - (i32.const 55) - ) - (block (result i32) - (if - (tee_local $0 - (i32.ge_s - (get_local $2) - (i32.const 97) - ) - ) - (set_local $0 - (i32.le_s - (get_local $2) - (i32.const 122) - ) - ) - ) - (br_if $break|1 - (i32.eqz - (get_local $0) - ) - ) - (i32.sub - (get_local $2) - (i32.const 87) - ) - ) - ) - ) - ) - ) - (get_local $1) - ) - ) - (set_local $5 - (f64.add - (f64.mul - (get_local $5) - (f64.convert_s/i32 - (get_local $1) - ) - ) - (f64.convert_s/i32 - (get_local $2) - ) - ) - ) - (set_local $3 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - (br $continue|1) - ) - ) - ) - ) - (f64.mul - (get_local $6) - (get_local $5) - ) - ) - (func $~lib/string/parseInt (; 18 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) - (call $~lib/internal/string/parse - (get_local $0) - (get_local $1) - ) - ) - (func $~lib/string/parseFloat (; 19 ;) (type $iF) (param $0 i32) (result f64) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 f64) - (local $5 f64) - (local $6 f64) - (if - (i32.eqz - (tee_local $3 - (i32.load - (get_local $0) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $6 - (if (result f64) - (i32.eq - (tee_local $2 - (i32.load16_u offset=4 - (tee_local $1 - (get_local $0) - ) - ) - ) - (i32.const 45) - ) - (block (result f64) - (if - (i32.eqz - (tee_local $3 - (i32.sub - (get_local $3) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (drop - (i32.load16_u offset=4 - (tee_local $1 - (i32.add - (get_local $1) - (i32.const 2) - ) - ) - ) - ) - (f64.const -1) - ) - (block (result f64) - (if - (i32.eq - (get_local $2) - (i32.const 43) - ) - (block - (if - (i32.eqz - (tee_local $3 - (i32.sub - (get_local $3) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (drop - (i32.load16_u offset=4 - (tee_local $1 - (i32.add - (get_local $1) - (i32.const 2) - ) - ) - ) - ) - ) - ) - (f64.const 1) - ) - ) - ) - (block $break|0 - (loop $continue|0 - (set_local $3 - (i32.sub - (tee_local $0 - (get_local $3) - ) - (i32.const 1) - ) - ) - (if - (get_local $0) - (block - (if - (i32.eq - (tee_local $2 - (i32.load16_u offset=4 - (get_local $1) - ) - ) - (i32.const 46) - ) - (block - (set_local $1 - (i32.add - (get_local $1) - (i32.const 2) - ) - ) - (set_local $5 - (f64.const 0.1) - ) - (block $break|1 - (loop $continue|1 - (set_local $3 - (i32.sub - (tee_local $0 - (get_local $3) - ) - (i32.const 1) - ) - ) - (if - (get_local $0) - (block - (if - (i32.eqz - (tee_local $0 - (i32.eq - (tee_local $2 - (i32.load16_u offset=4 - (get_local $1) - ) - ) - (i32.const 69) - ) - ) - ) - (set_local $0 - (i32.eq - (get_local $2) - (i32.const 101) - ) - ) - ) - (if - (get_local $0) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 80) - (i32.const 588) - (i32.const 10) - ) - (unreachable) - ) - ) - (br_if $break|1 - (i32.gt_u - (tee_local $2 - (i32.sub - (get_local $2) - (i32.const 48) - ) - ) - (i32.const 9) - ) - ) - (set_local $4 - (f64.add - (get_local $4) - (f64.mul - (f64.convert_s/i32 - (get_local $2) - ) - (get_local $5) - ) - ) - ) - (set_local $5 - (f64.mul - (get_local $5) - (f64.const 0.1) - ) - ) - (set_local $1 - (i32.add - (get_local $1) - (i32.const 2) - ) - ) - (br $continue|1) - ) - ) - ) - ) - (br $break|0) - ) - ) - (br_if $break|0 - (i32.ge_u - (tee_local $2 - (i32.sub - (get_local $2) - (i32.const 48) - ) - ) - (i32.const 10) - ) - ) - (set_local $4 - (f64.add - (f64.mul - (get_local $4) - (f64.const 10) - ) - (f64.convert_s/i32 - (get_local $2) - ) - ) - ) - (set_local $1 - (i32.add - (get_local $1) - (i32.const 2) - ) - ) - (br $continue|0) - ) - ) - ) - ) - (f64.mul - (get_local $6) - (get_local $4) - ) - ) - (func $~lib/memory/memcpy (; 20 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memcpy (; 14 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2902,7 +2165,7 @@ ) ) ) - (func $~lib/memory/memmove (; 21 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memmove (; 15 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (if @@ -3194,14 +2457,1414 @@ ) ) ) - (func $~lib/memory/memory.copy (; 22 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 16 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (call $~lib/memory/memmove (get_local $0) (get_local $1) (get_local $2) ) ) - (func $~lib/string/String#concat (; 23 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/string/repeatUnsafe (; 17 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i64) + (block $break|0 + (block $case5|0 + (block $case4|0 + (block $case3|0 + (block $case2|0 + (block $case1|0 + (block $case0|0 + (set_local $5 + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + (br_if $break|0 + (i32.eqz + (get_local $6) + ) + ) + (block $tablify|0 + (br_table $case1|0 $case2|0 $case3|0 $case4|0 $tablify|0 + (i32.sub + (get_local $5) + (i32.const 1) + ) + ) + ) + (br $case5|0) + ) + ) + (set_local $5 + (i32.load16_u offset=4 + (get_local $2) + ) + ) + (set_local $4 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|1 + (set_local $0 + (i32.const 0) + ) + (loop $repeat|1 + (br_if $break|1 + (i32.ge_s + (get_local $0) + (get_local $3) + ) + ) + (i32.store16 offset=4 + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + (get_local $5) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $repeat|1) + ) + ) + (br $break|0) + ) + (set_local $4 + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|2 + (set_local $0 + (i32.const 0) + ) + (loop $repeat|2 + (br_if $break|2 + (i32.ge_s + (get_local $0) + (get_local $3) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (get_local $4) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $repeat|2) + ) + ) + (br $break|0) + ) + (set_local $5 + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $4 + (i32.load16_u offset=8 + (get_local $2) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|3 + (set_local $1 + (i32.const 0) + ) + (loop $repeat|3 + (br_if $break|3 + (i32.ge_s + (get_local $1) + (get_local $3) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (get_local $5) + ) + (i32.store16 offset=8 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (get_local $4) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $repeat|3) + ) + ) + (br $break|0) + ) + (set_local $7 + (i64.load offset=4 + (get_local $2) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|4 + (loop $repeat|4 + (br_if $break|4 + (i32.ge_s + (get_local $4) + (get_local $3) + ) + ) + (i64.store offset=4 + (i32.add + (get_local $0) + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (get_local $7) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (br $repeat|4) + ) + ) + (br $break|0) + ) + (set_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 4) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (block $break|5 + (set_local $1 + (i32.const 0) + ) + (set_local $2 + (i32.mul + (tee_local $0 + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (get_local $3) + ) + ) + (loop $repeat|5 + (br_if $break|5 + (i32.ge_s + (get_local $1) + (get_local $2) + ) + ) + (call $~lib/memory/memory.copy + (i32.add + (get_local $4) + (get_local $1) + ) + (get_local $5) + (get_local $0) + ) + (set_local $1 + (i32.add + (get_local $1) + (get_local $0) + ) + ) + (br $repeat|5) + ) + ) + ) + ) + (func $~lib/string/String#padStart (; 18 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.eqz + (get_local $0) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 351) + (i32.const 4) + ) + (unreachable) + ) + ) + (set_local $3 + (i32.load + (get_local $2) + ) + ) + (if + (i32.eqz + (tee_local $4 + (i32.lt_s + (get_local $1) + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (get_local $3) + ) + ) + ) + (if + (get_local $4) + (return + (get_local $0) + ) + ) + (set_local $5 + (call $~lib/internal/string/allocate + (get_local $1) + ) + ) + (if + (i32.gt_s + (tee_local $1 + (i32.sub + (get_local $1) + (get_local $6) + ) + ) + (get_local $3) + ) + (block + (set_local $3 + (i32.mul + (tee_local $4 + (i32.div_s + (i32.sub + (get_local $1) + (i32.const 1) + ) + (get_local $3) + ) + ) + (get_local $3) + ) + ) + (call $~lib/internal/string/repeatUnsafe + (get_local $5) + (i32.const 0) + (get_local $2) + (get_local $4) + ) + (if + (tee_local $4 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $5) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + (i32.const 4) + ) + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + ) + ) + (call $~lib/memory/memory.copy + (i32.add + (get_local $5) + (i32.const 4) + ) + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (if + (get_local $6) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $5) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 4) + ) + (i32.add + (get_local $0) + (i32.const 4) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (get_local $5) + ) + (func $~lib/string/String#padStart|trampoline (; 19 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $outOfRange + (br_table $0of1 $1of1 $outOfRange + (i32.sub + (get_global $~argc) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 236) + ) + ) + (call $~lib/string/String#padStart + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $~lib/string/String#padEnd (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.eqz + (get_local $0) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 371) + (i32.const 4) + ) + (unreachable) + ) + ) + (set_local $5 + (i32.load + (get_local $2) + ) + ) + (if + (i32.eqz + (tee_local $4 + (i32.lt_s + (get_local $1) + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (get_local $5) + ) + ) + ) + (if + (get_local $4) + (return + (get_local $0) + ) + ) + (set_local $6 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $1 + (call $~lib/internal/string/allocate + (get_local $1) + ) + ) + (if + (get_local $3) + (call $~lib/memory/memory.copy + (i32.add + (get_local $1) + (i32.const 4) + ) + (i32.add + (get_local $0) + (i32.const 4) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (if + (i32.gt_s + (get_local $6) + (get_local $5) + ) + (block + (set_local $4 + (i32.mul + (tee_local $0 + (i32.div_s + (i32.sub + (get_local $6) + (i32.const 1) + ) + (get_local $5) + ) + ) + (get_local $5) + ) + ) + (call $~lib/internal/string/repeatUnsafe + (get_local $1) + (get_local $3) + (get_local $2) + (get_local $0) + ) + (if + (tee_local $0 + (i32.sub + (get_local $6) + (get_local $4) + ) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $1) + (i32.shl + (i32.add + (get_local $4) + (get_local $3) + ) + (i32.const 1) + ) + ) + (i32.const 4) + ) + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $1) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + (i32.const 4) + ) + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (get_local $1) + ) + (func $~lib/string/String#padEnd|trampoline (; 21 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $outOfRange + (br_table $0of1 $1of1 $outOfRange + (i32.sub + (get_global $~argc) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 236) + ) + ) + (call $~lib/string/String#padEnd + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $~lib/string/String#lastIndexOf (; 22 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.eqz + (get_local $0) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 230) + (i32.const 4) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (set_local $1 + (i32.const 196) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (tee_local $4 + (i32.load + (get_local $1) + ) + ) + ) + (return + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (return + (i32.const -1) + ) + ) + (block $break|0 + (set_local $3 + (select + (tee_local $2 + (select + (get_local $2) + (i32.const 0) + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + ) + ) + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (i32.lt_s + (get_local $2) + (get_local $3) + ) + ) + ) + (loop $repeat|0 + (br_if $break|0 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (if + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $3) + (get_local $1) + (i32.const 0) + (get_local $4) + ) + (block + (set_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + (br $repeat|0) + ) + (return + (get_local $3) + ) + ) + ) + ) + (i32.const -1) + ) + (func $~lib/string/String#lastIndexOf|trampoline (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $outOfRange + (br_table $0of1 $1of1 $outOfRange + (i32.sub + (get_global $~argc) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 2147483647) + ) + ) + (call $~lib/string/String#lastIndexOf + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $std/string/getString (; 24 ;) (type $i) (result i32) + (get_global $std/string/str) + ) + (func $~lib/internal/string/parse (; 25 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f64) + (local $6 f64) + (if + (i32.eqz + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $6 + (if (result f64) + (i32.eq + (tee_local $2 + (i32.load16_u offset=4 + (tee_local $3 + (get_local $0) + ) + ) + ) + (i32.const 45) + ) + (block (result f64) + (if + (i32.eqz + (tee_local $4 + (i32.sub + (get_local $4) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $2 + (i32.load16_u offset=4 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (f64.const -1) + ) + (block (result f64) + (if + (i32.eq + (get_local $2) + (i32.const 43) + ) + (block + (if + (i32.eqz + (tee_local $4 + (i32.sub + (get_local $4) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $2 + (i32.load16_u offset=4 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (f64.const 1) + ) + ) + ) + (if + (get_local $1) + (block + (if + (i32.eqz + (tee_local $0 + (i32.lt_s + (get_local $1) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.gt_s + (get_local $1) + (i32.const 36) + ) + ) + ) + (if + (get_local $0) + (return + (f64.const nan:0x8000000000000) + ) + ) + ) + (block + (if + (tee_local $0 + (i32.eq + (get_local $2) + (i32.const 48) + ) + ) + (set_local $0 + (i32.gt_s + (get_local $4) + (i32.const 2) + ) + ) + ) + (set_local $1 + (if (result i32) + (get_local $0) + (block $break|0 (result i32) + (block $case6|0 + (block $case5|0 + (block $case3|0 + (block $case1|0 + (br_if $case1|0 + (i32.eq + (tee_local $0 + (i32.load16_u offset=4 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + (i32.const 66) + ) + ) + (br_if $case1|0 + (i32.eq + (get_local $0) + (i32.const 98) + ) + ) + (br_if $case3|0 + (i32.eq + (get_local $0) + (i32.const 79) + ) + ) + (br_if $case3|0 + (i32.eq + (get_local $0) + (i32.const 111) + ) + ) + (br_if $case5|0 + (i32.eq + (get_local $0) + (i32.const 88) + ) + ) + (br_if $case5|0 + (i32.eq + (get_local $0) + (i32.const 120) + ) + ) + (br $case6|0) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $4 + (i32.sub + (get_local $4) + (i32.const 2) + ) + ) + (br $break|0 + (i32.const 2) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $4 + (i32.sub + (get_local $4) + (i32.const 2) + ) + ) + (br $break|0 + (i32.const 8) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $4 + (i32.sub + (get_local $4) + (i32.const 2) + ) + ) + (br $break|0 + (i32.const 16) + ) + ) + (i32.const 10) + ) + (i32.const 10) + ) + ) + ) + ) + (block $break|1 + (loop $continue|1 + (set_local $4 + (i32.sub + (tee_local $0 + (get_local $4) + ) + (i32.const 1) + ) + ) + (if + (get_local $0) + (block + (if + (tee_local $0 + (i32.ge_s + (tee_local $2 + (i32.load16_u offset=4 + (get_local $3) + ) + ) + (i32.const 48) + ) + ) + (set_local $0 + (i32.le_s + (get_local $2) + (i32.const 57) + ) + ) + ) + (br_if $break|1 + (i32.ge_s + (tee_local $2 + (if (result i32) + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 48) + ) + (block (result i32) + (if + (tee_local $0 + (i32.ge_s + (get_local $2) + (i32.const 65) + ) + ) + (set_local $0 + (i32.le_s + (get_local $2) + (i32.const 90) + ) + ) + ) + (if (result i32) + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 55) + ) + (block (result i32) + (if + (tee_local $0 + (i32.ge_s + (get_local $2) + (i32.const 97) + ) + ) + (set_local $0 + (i32.le_s + (get_local $2) + (i32.const 122) + ) + ) + ) + (br_if $break|1 + (i32.eqz + (get_local $0) + ) + ) + (i32.sub + (get_local $2) + (i32.const 87) + ) + ) + ) + ) + ) + ) + (get_local $1) + ) + ) + (set_local $5 + (f64.add + (f64.mul + (get_local $5) + (f64.convert_s/i32 + (get_local $1) + ) + ) + (f64.convert_s/i32 + (get_local $2) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (f64.mul + (get_local $6) + (get_local $5) + ) + ) + (func $~lib/string/parseInt (; 26 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (call $~lib/internal/string/parse + (get_local $0) + (get_local $1) + ) + ) + (func $~lib/string/parseFloat (; 27 ;) (type $iF) (param $0 i32) (result f64) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 f64) + (local $6 f64) + (if + (i32.eqz + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $6 + (if (result f64) + (i32.eq + (tee_local $2 + (i32.load16_u offset=4 + (tee_local $1 + (get_local $0) + ) + ) + ) + (i32.const 45) + ) + (block (result f64) + (if + (i32.eqz + (tee_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (drop + (i32.load16_u offset=4 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + (f64.const -1) + ) + (block (result f64) + (if + (i32.eq + (get_local $2) + (i32.const 43) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (drop + (i32.load16_u offset=4 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (f64.const 1) + ) + ) + ) + (block $break|0 + (loop $continue|0 + (set_local $3 + (i32.sub + (tee_local $0 + (get_local $3) + ) + (i32.const 1) + ) + ) + (if + (get_local $0) + (block + (if + (i32.eq + (tee_local $2 + (i32.load16_u offset=4 + (get_local $1) + ) + ) + (i32.const 46) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (set_local $5 + (f64.const 0.1) + ) + (block $break|1 + (loop $continue|1 + (set_local $3 + (i32.sub + (tee_local $0 + (get_local $3) + ) + (i32.const 1) + ) + ) + (if + (get_local $0) + (block + (if + (i32.eqz + (tee_local $0 + (i32.eq + (tee_local $2 + (i32.load16_u offset=4 + (get_local $1) + ) + ) + (i32.const 69) + ) + ) + ) + (set_local $0 + (i32.eq + (get_local $2) + (i32.const 101) + ) + ) + ) + (if + (get_local $0) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 519) + (i32.const 10) + ) + (unreachable) + ) + ) + (br_if $break|1 + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $2) + (i32.const 48) + ) + ) + (i32.const 9) + ) + ) + (set_local $4 + (f64.add + (get_local $4) + (f64.mul + (f64.convert_s/i32 + (get_local $2) + ) + (get_local $5) + ) + ) + ) + (set_local $5 + (f64.mul + (get_local $5) + (f64.const 0.1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (br $break|0) + ) + ) + (br_if $break|0 + (i32.ge_u + (tee_local $2 + (i32.sub + (get_local $2) + (i32.const 48) + ) + ) + (i32.const 10) + ) + ) + (set_local $4 + (f64.add + (f64.mul + (get_local $4) + (f64.const 10) + ) + (f64.convert_s/i32 + (get_local $2) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (f64.mul + (get_local $6) + (get_local $4) + ) + ) + (func $~lib/string/String#concat (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3261,20 +3924,21 @@ (get_local $0) (i32.const 4) ) - (tee_local $0 - (i32.shl - (get_local $3) - (i32.const 1) - ) + (i32.shl + (get_local $3) + (i32.const 1) ) ) (call $~lib/memory/memory.copy (i32.add (i32.add (get_local $2) - (i32.const 4) + (i32.shl + (get_local $3) + (i32.const 1) + ) ) - (get_local $0) + (i32.const 4) ) (i32.add (get_local $1) @@ -3287,7 +3951,7 @@ ) (get_local $2) ) - (func $~lib/string/String.__concat (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (if (i32.eqz (get_local $0) @@ -3301,7 +3965,7 @@ (get_local $1) ) ) - (func $~lib/string/String.__ne (; 25 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (i32.eqz (call $~lib/string/String.__eq (get_local $0) @@ -3309,7 +3973,7 @@ ) ) ) - (func $~lib/string/String.__gt (; 26 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gt (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (if @@ -3369,9 +4033,11 @@ ) ) (i32.gt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (select (get_local $2) (get_local $3) @@ -3384,7 +4050,7 @@ (i32.const 0) ) ) - (func $~lib/string/String.__gte (; 27 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gte (; 32 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (if @@ -3444,9 +4110,11 @@ ) ) (i32.ge_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (select (get_local $2) (get_local $3) @@ -3459,7 +4127,7 @@ (i32.const 0) ) ) - (func $~lib/string/String.__lt (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lt (; 33 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (if @@ -3519,9 +4187,11 @@ ) ) (i32.lt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (select (get_local $2) (get_local $3) @@ -3534,7 +4204,7 @@ (i32.const 0) ) ) - (func $~lib/string/String.__lte (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lte (; 34 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (if @@ -3594,9 +4264,11 @@ ) ) (i32.le_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (select (get_local $2) (get_local $3) @@ -3609,10 +4281,9 @@ (i32.const 0) ) ) - (func $~lib/string/String#repeat (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#repeat (; 35 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) (if (i32.eqz (get_local $0) @@ -3621,7 +4292,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 442) + (i32.const 391) (i32.const 4) ) (unreachable) @@ -3657,7 +4328,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 447) + (i32.const 396) (i32.const 6) ) (unreachable) @@ -3692,69 +4363,29 @@ (get_local $0) ) ) - (set_local $4 - (call $~lib/internal/string/allocate - (i32.mul - (get_local $3) - (get_local $1) - ) - ) - ) - (block $break|0 - (set_local $2 - (i32.const 0) - ) - (set_local $1 - (i32.mul - (tee_local $3 - (i32.shl - (get_local $3) - (i32.const 1) - ) - ) - (get_local $1) - ) - ) - (loop $repeat|0 - (br_if $break|0 - (i32.ge_s - (get_local $2) + (call $~lib/internal/string/repeatUnsafe + (tee_local $2 + (call $~lib/internal/string/allocate + (i32.mul + (get_local $3) (get_local $1) ) ) - (call $~lib/memory/memory.copy - (i32.add - (i32.add - (get_local $4) - (i32.const 4) - ) - (get_local $2) - ) - (i32.add - (get_local $0) - (i32.const 4) - ) - (get_local $3) - ) - (set_local $2 - (i32.add - (get_local $2) - (get_local $3) - ) - ) - (br $repeat|0) ) + (i32.const 0) + (get_local $0) + (get_local $1) ) - (get_local $4) + (get_local $2) ) - (func $~lib/internal/itoa/decimalCountU32 (; 31 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/itoa/decimalCountU32 (; 36 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (set_local $2 (i32.load offset=8 (i32.add (i32.load - (i32.const 576) + (i32.const 704) ) (i32.shl (tee_local $1 @@ -3787,12 +4418,12 @@ (i32.const 1) ) ) - (func $~lib/internal/itoa/utoa32_lut (; 32 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/itoa/utoa32_lut (; 37 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (set_local $3 (i32.load - (i32.const 648) + (i32.const 776) ) ) (loop $continue|0 @@ -3948,7 +4579,7 @@ ) ) ) - (func $~lib/internal/itoa/itoa32 (; 33 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/itoa/itoa32 (; 38 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3957,7 +4588,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (if @@ -3999,7 +4630,7 @@ ) (get_local $2) ) - (func $~lib/internal/itoa/utoa32 (; 34 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/itoa/utoa32 (; 39 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (if @@ -4007,7 +4638,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (call $~lib/internal/itoa/utoa32_lut @@ -4025,14 +4656,14 @@ ) (get_local $2) ) - (func $~lib/internal/itoa/decimalCountU64 (; 35 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/itoa/decimalCountU64 (; 40 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i64) (set_local $2 (i64.load32_u offset=8 (i32.add (i32.load - (i32.const 1424) + (i32.const 1552) ) (i32.shl (i32.sub @@ -4073,14 +4704,14 @@ (i32.const 1) ) ) - (func $~lib/internal/itoa/utoa64_lut (; 36 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/internal/itoa/utoa64_lut (; 41 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (set_local $3 (i32.load - (i32.const 1496) + (i32.const 1624) ) ) (loop $continue|0 @@ -4219,7 +4850,7 @@ (get_local $2) ) ) - (func $~lib/internal/itoa/utoa64 (; 37 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/itoa/utoa64 (; 42 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4228,7 +4859,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (if @@ -4269,7 +4900,7 @@ ) (get_local $2) ) - (func $~lib/internal/itoa/itoa64 (; 38 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/itoa/itoa64 (; 43 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4279,7 +4910,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (if @@ -4347,9 +4978,9 @@ ) (get_local $3) ) - (func $start (; 39 ;) (type $v) + (func $start (; 44 ;) (type $v) (set_global $~lib/allocator/arena/startOffset - (i32.const 2544) + (i32.const 2672) ) (set_global $~lib/allocator/arena/offset (get_global $~lib/allocator/arena/startOffset) @@ -4572,6 +5203,366 @@ (unreachable) ) ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart|trampoline + (get_global $std/string/str) + (i32.const 0) + (i32.const 0) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 28) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart|trampoline + (get_global $std/string/str) + (i32.const 15) + (i32.const 0) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 29) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart|trampoline + (i32.const 8) + (i32.const 3) + (i32.const 0) + ) + (i32.const 244) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 30) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 8) + (i32.const 10) + (i32.const 8) + ) + (i32.const 8) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 31) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 256) + (i32.const 100) + (i32.const 8) + ) + (i32.const 256) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 32) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart|trampoline + (i32.const 264) + (i32.const 5) + (i32.const 0) + ) + (i32.const 276) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 33) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 264) + (i32.const 6) + (i32.const 292) + ) + (i32.const 304) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 34) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 264) + (i32.const 8) + (i32.const 292) + ) + (i32.const 320) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 35) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd|trampoline + (get_global $std/string/str) + (i32.const 0) + (i32.const 0) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 37) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd|trampoline + (get_global $std/string/str) + (i32.const 15) + (i32.const 0) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 38) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd|trampoline + (i32.const 8) + (i32.const 3) + (i32.const 0) + ) + (i32.const 244) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 39) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 8) + (i32.const 10) + (i32.const 8) + ) + (i32.const 8) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 40) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 256) + (i32.const 100) + (i32.const 8) + ) + (i32.const 256) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 41) + (i32.const 0) + ) + (unreachable) + ) + ) + (set_global $~argc + (i32.const 1) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd|trampoline + (i32.const 264) + (i32.const 5) + (i32.const 0) + ) + (i32.const 340) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 42) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 264) + (i32.const 6) + (i32.const 264) + ) + (i32.const 356) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 43) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 264) + (i32.const 8) + (i32.const 264) + ) + (i32.const 372) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 44) + (i32.const 0) + ) + (unreachable) + ) + ) (if (call $~lib/string/String#indexOf (i32.const 8) @@ -4582,7 +5573,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 28) + (i32.const 46) (i32.const 0) ) (unreachable) @@ -4601,7 +5592,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 29) + (i32.const 47) (i32.const 0) ) (unreachable) @@ -4617,7 +5608,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 30) + (i32.const 48) (i32.const 0) ) (unreachable) @@ -4627,7 +5618,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 0) ) (i32.const 2) @@ -4636,7 +5627,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 31) + (i32.const 49) (i32.const 0) ) (unreachable) @@ -4646,7 +5637,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 244) + (i32.const 400) (i32.const 0) ) (i32.const -1) @@ -4655,7 +5646,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 32) + (i32.const 50) (i32.const 0) ) (unreachable) @@ -4665,7 +5656,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 2) ) (i32.const 2) @@ -4674,7 +5665,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 33) + (i32.const 51) (i32.const 0) ) (unreachable) @@ -4684,7 +5675,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 3) ) (i32.const -1) @@ -4693,7 +5684,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 34) + (i32.const 52) (i32.const 0) ) (unreachable) @@ -4703,7 +5694,7 @@ (i32.ne (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 252) + (i32.const 408) (i32.const -1) ) (i32.const 2) @@ -4712,7 +5703,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 35) + (i32.const 53) (i32.const 0) ) (unreachable) @@ -4731,7 +5722,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 37) + (i32.const 55) (i32.const 0) ) (unreachable) @@ -4753,7 +5744,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 38) + (i32.const 56) (i32.const 0) ) (unreachable) @@ -4777,7 +5768,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 39) + (i32.const 57) (i32.const 0) ) (unreachable) @@ -4790,7 +5781,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 0) ) (i32.const 2) @@ -4799,7 +5790,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 40) + (i32.const 58) (i32.const 0) ) (unreachable) @@ -4812,7 +5803,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) - (i32.const 244) + (i32.const 400) (i32.const 0) ) (i32.const -1) @@ -4821,7 +5812,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 41) + (i32.const 59) (i32.const 0) ) (unreachable) @@ -4834,7 +5825,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) - (i32.const 264) + (i32.const 420) (i32.const 0) ) (i32.const 15) @@ -4843,7 +5834,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 42) + (i32.const 60) (i32.const 0) ) (unreachable) @@ -4853,7 +5844,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 2) ) (i32.const 2) @@ -4862,7 +5853,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 43) + (i32.const 61) (i32.const 0) ) (unreachable) @@ -4872,7 +5863,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 3) ) (i32.const 2) @@ -4881,7 +5872,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 44) + (i32.const 62) (i32.const 0) ) (unreachable) @@ -4891,7 +5882,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 252) + (i32.const 408) (i32.const -1) ) (i32.const -1) @@ -4900,7 +5891,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 45) + (i32.const 63) (i32.const 0) ) (unreachable) @@ -4910,7 +5901,7 @@ (i32.ne (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 272) + (i32.const 428) (i32.const 0) ) (i32.const -1) @@ -4919,7 +5910,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 46) + (i32.const 64) (i32.const 0) ) (unreachable) @@ -4931,218 +5922,6 @@ (i32.const 188) (i32.const 0) ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 47) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 280) - (i32.const 0) - ) - (f64.const 0) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 53) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 288) - (i32.const 0) - ) - (f64.const 1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 54) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 296) - (i32.const 0) - ) - (f64.const 5) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 55) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 312) - (i32.const 0) - ) - (f64.const 455) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 56) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 328) - (i32.const 0) - ) - (f64.const 3855) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 57) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 344) - (i32.const 0) - ) - (f64.const 3855) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 58) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 360) - (i32.const 0) - ) - (f64.const 11) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 59) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseInt - (i32.const 372) - (i32.const 0) - ) - (f64.const 1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 60) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseFloat - (i32.const 280) - ) - (f64.const 0) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 62) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseFloat - (i32.const 288) - ) - (f64.const 1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 63) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseFloat - (i32.const 384) - ) - (f64.const 0.1) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 64) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (f64.ne - (call $~lib/string/parseFloat - (i32.const 396) - ) - (f64.const 0.25) - ) (block (call $~lib/env/abort (i32.const 0) @@ -5153,10 +5932,188 @@ (unreachable) ) ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 436) + (i32.const 0) + ) + (f64.const 0) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 71) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 444) + (i32.const 0) + ) + (f64.const 1) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 72) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 452) + (i32.const 0) + ) + (f64.const 5) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 73) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 468) + (i32.const 0) + ) + (f64.const 455) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 74) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 484) + (i32.const 0) + ) + (f64.const 3855) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 75) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 500) + (i32.const 0) + ) + (f64.const 3855) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 76) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 516) + (i32.const 0) + ) + (f64.const 11) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 77) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseInt + (i32.const 528) + (i32.const 0) + ) + (f64.const 1) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 78) + (i32.const 0) + ) + (unreachable) + ) + ) (if (f64.ne (call $~lib/string/parseFloat - (i32.const 408) + (i32.const 436) + ) + (f64.const 0) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 80) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseFloat + (i32.const 444) + ) + (f64.const 1) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 81) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseFloat + (i32.const 540) ) (f64.const 0.1) ) @@ -5164,7 +6121,41 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 66) + (i32.const 82) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseFloat + (i32.const 552) + ) + (f64.const 0.25) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 83) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (f64.ne + (call $~lib/string/parseFloat + (i32.const 564) + ) + (f64.const 0.1) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 84) (i32.const 0) ) (unreachable) @@ -5172,22 +6163,22 @@ ) (set_global $std/string/c (call $~lib/string/String.__concat - (i32.const 428) - (i32.const 436) + (i32.const 256) + (i32.const 584) ) ) (if (i32.eqz (call $~lib/string/String.__eq (get_global $std/string/c) - (i32.const 444) + (i32.const 592) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 69) + (i32.const 87) (i32.const 0) ) (unreachable) @@ -5197,14 +6188,14 @@ (i32.eqz (call $~lib/string/String.__ne (get_global $std/string/c) - (i32.const 428) + (i32.const 256) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 70) + (i32.const 88) (i32.const 0) ) (unreachable) @@ -5221,7 +6212,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 71) + (i32.const 89) (i32.const 0) ) (unreachable) @@ -5238,7 +6229,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 72) + (i32.const 90) (i32.const 0) ) (unreachable) @@ -5247,15 +6238,15 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 436) - (i32.const 428) + (i32.const 584) + (i32.const 256) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 74) + (i32.const 92) (i32.const 0) ) (unreachable) @@ -5264,15 +6255,15 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 452) - (i32.const 428) + (i32.const 600) + (i32.const 256) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 75) + (i32.const 93) (i32.const 0) ) (unreachable) @@ -5281,15 +6272,15 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 452) - (i32.const 460) + (i32.const 600) + (i32.const 608) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 76) + (i32.const 94) (i32.const 0) ) (unreachable) @@ -5298,15 +6289,15 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 452) - (i32.const 444) + (i32.const 600) + (i32.const 592) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 77) + (i32.const 95) (i32.const 0) ) (unreachable) @@ -5314,14 +6305,14 @@ ) (if (call $~lib/string/String.__lt - (i32.const 452) - (i32.const 444) + (i32.const 600) + (i32.const 592) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 78) + (i32.const 96) (i32.const 0) ) (unreachable) @@ -5329,14 +6320,14 @@ ) (if (call $~lib/string/String.__lt - (i32.const 436) + (i32.const 584) (get_global $std/string/nullStr) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 80) + (i32.const 98) (i32.const 0) ) (unreachable) @@ -5345,13 +6336,13 @@ (if (call $~lib/string/String.__lt (get_global $std/string/nullStr) - (i32.const 436) + (i32.const 584) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 81) + (i32.const 99) (i32.const 0) ) (unreachable) @@ -5360,7 +6351,7 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 468) + (i32.const 264) (i32.const 8) ) ) @@ -5368,7 +6359,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 83) + (i32.const 101) (i32.const 0) ) (unreachable) @@ -5378,14 +6369,14 @@ (i32.eqz (call $~lib/string/String.__lt (i32.const 8) - (i32.const 468) + (i32.const 264) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 84) + (i32.const 102) (i32.const 0) ) (unreachable) @@ -5394,7 +6385,7 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 468) + (i32.const 264) (i32.const 8) ) ) @@ -5402,7 +6393,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 85) + (i32.const 103) (i32.const 0) ) (unreachable) @@ -5412,14 +6403,14 @@ (i32.eqz (call $~lib/string/String.__lte (i32.const 8) - (i32.const 468) + (i32.const 264) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 86) + (i32.const 104) (i32.const 0) ) (unreachable) @@ -5427,14 +6418,14 @@ ) (if (call $~lib/string/String.__lt - (i32.const 468) + (i32.const 264) (i32.const 8) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 87) + (i32.const 105) (i32.const 0) ) (unreachable) @@ -5443,13 +6434,13 @@ (if (call $~lib/string/String.__gt (i32.const 8) - (i32.const 468) + (i32.const 264) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 88) + (i32.const 106) (i32.const 0) ) (unreachable) @@ -5464,7 +6455,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 89) + (i32.const 107) (i32.const 0) ) (unreachable) @@ -5479,7 +6470,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 90) + (i32.const 108) (i32.const 0) ) (unreachable) @@ -5496,7 +6487,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 91) + (i32.const 109) (i32.const 0) ) (unreachable) @@ -5513,7 +6504,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 92) + (i32.const 110) (i32.const 0) ) (unreachable) @@ -5545,7 +6536,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 96) + (i32.const 114) (i32.const 0) ) (unreachable) @@ -5554,7 +6545,7 @@ (if (i32.ne (i32.load - (i32.const 480) + (i32.const 292) ) (i32.const 3) ) @@ -5562,7 +6553,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 98) + (i32.const 116) (i32.const 0) ) (unreachable) @@ -5578,337 +6569,6 @@ (i32.const 8) ) ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 100) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 0) - ) - (i32.const 8) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 101) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 1) - ) - (i32.const 428) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 102) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 2) - ) - (i32.const 460) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 103) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 3) - ) - (i32.const 492) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 104) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 444) - (i32.const 4) - ) - (i32.const 504) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 105) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 5) - ) - (i32.const 524) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 106) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 6) - ) - (i32.const 540) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 107) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 7) - ) - (i32.const 556) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 108) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 0) - ) - (i32.const 280) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 110) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1) - ) - (i32.const 288) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 111) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 8) - ) - (i32.const 1168) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 112) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 123) - ) - (i32.const 480) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 113) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const -1000) - ) - (i32.const 1176) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 114) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1234) - ) - (i32.const 1192) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 115) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 12345) - ) - (i32.const 1204) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 116) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 123456) - ) - (i32.const 1220) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 117) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1111111) - ) - (i32.const 1236) - ) - ) (block (call $~lib/env/abort (i32.const 0) @@ -5922,10 +6582,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1234567) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 0) ) - (i32.const 1256) + (i32.const 8) ) ) (block @@ -5941,10 +6602,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 2147483646) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 1) ) - (i32.const 1276) + (i32.const 256) ) ) (block @@ -5960,10 +6622,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 2147483647) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 2) ) - (i32.const 1300) + (i32.const 608) ) ) (block @@ -5979,10 +6642,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const -2147483648) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 3) ) - (i32.const 1324) + (i32.const 616) ) ) (block @@ -5998,10 +6662,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const -1) + (call $~lib/string/String#repeat + (i32.const 592) + (i32.const 4) ) - (i32.const 1352) + (i32.const 628) ) ) (block @@ -6017,10 +6682,31 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const 0) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 5) ) - (i32.const 280) + (i32.const 648) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 124) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 6) + ) + (i32.const 664) ) ) (block @@ -6036,10 +6722,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const 1000) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 7) ) - (i32.const 1360) + (i32.const 680) ) ) (block @@ -6055,29 +6742,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const 2147483647) + (call $~lib/internal/itoa/itoa32 + (i32.const 0) ) - (i32.const 1300) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 127) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const -2147483648) - ) - (i32.const 1372) + (i32.const 436) ) ) (block @@ -6093,10 +6761,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const -1) + (call $~lib/internal/itoa/itoa32 + (i32.const 1) ) - (i32.const 1396) + (i32.const 444) ) ) (block @@ -6112,10 +6780,29 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 0) + (call $~lib/internal/itoa/itoa32 + (i32.const 8) ) - (i32.const 280) + (i32.const 1296) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 130) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa32 + (i32.const 123) + ) + (i32.const 292) ) ) (block @@ -6131,10 +6818,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 1234) + (call $~lib/internal/itoa/itoa32 + (i32.const -1000) ) - (i32.const 1192) + (i32.const 1304) ) ) (block @@ -6150,10 +6837,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 99999999) + (call $~lib/internal/itoa/itoa32 + (i32.const 1234) ) - (i32.const 2016) + (i32.const 1320) ) ) (block @@ -6169,10 +6856,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 100000000) + (call $~lib/internal/itoa/itoa32 + (i32.const 12345) ) - (i32.const 2036) + (i32.const 1332) ) ) (block @@ -6188,10 +6875,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 4294967295) + (call $~lib/internal/itoa/itoa32 + (i32.const 123456) ) - (i32.const 1396) + (i32.const 1348) ) ) (block @@ -6207,10 +6894,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 68719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 1111111) ) - (i32.const 2060) + (i32.const 1364) ) ) (block @@ -6226,10 +6913,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 1234567) ) - (i32.const 2088) + (i32.const 1384) ) ) (block @@ -6245,10 +6932,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 999868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 2147483646) ) - (i32.const 2116) + (i32.const 1404) ) ) (block @@ -6264,10 +6951,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 9999868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 2147483647) ) - (i32.const 2152) + (i32.const 1428) ) ) (block @@ -6283,10 +6970,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 19999868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const -2147483648) ) - (i32.const 2188) + (i32.const 1452) ) ) (block @@ -6302,10 +6989,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const -1) + (call $~lib/internal/itoa/itoa32 + (i32.const -1) ) - (i32.const 2228) + (i32.const 1480) ) ) (block @@ -6321,10 +7008,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 0) + (call $~lib/internal/itoa/utoa32 + (i32.const 0) ) - (i32.const 280) + (i32.const 436) ) ) (block @@ -6340,10 +7027,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -1234) + (call $~lib/internal/itoa/utoa32 + (i32.const 1000) ) - (i32.const 2272) + (i32.const 1488) ) ) (block @@ -6359,10 +7046,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 4294967295) + (call $~lib/internal/itoa/utoa32 + (i32.const 2147483647) ) - (i32.const 1396) + (i32.const 1428) ) ) (block @@ -6378,10 +7065,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -4294967295) + (call $~lib/internal/itoa/utoa32 + (i32.const -2147483648) ) - (i32.const 2288) + (i32.const 1500) ) ) (block @@ -6397,10 +7084,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 68719476735) + (call $~lib/internal/itoa/utoa32 + (i32.const -1) ) - (i32.const 2060) + (i32.const 1524) ) ) (block @@ -6416,29 +7103,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -68719476735) + (call $~lib/internal/itoa/utoa64 + (i64.const 0) ) - (i32.const 2316) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 148) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -868719476735) - ) - (i32.const 2344) + (i32.const 436) ) ) (block @@ -6454,10 +7122,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -999868719476735) + (call $~lib/internal/itoa/utoa64 + (i64.const 1234) ) - (i32.const 2376) + (i32.const 1320) ) ) (block @@ -6473,10 +7141,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -19999868719476735) + (call $~lib/internal/itoa/utoa64 + (i64.const 99999999) ) - (i32.const 2412) + (i32.const 2144) ) ) (block @@ -6492,10 +7160,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 9223372036854775807) + (call $~lib/internal/itoa/utoa64 + (i64.const 100000000) ) - (i32.const 2452) + (i32.const 2164) ) ) (block @@ -6511,10 +7179,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -9223372036854775808) + (call $~lib/internal/itoa/utoa64 + (i64.const 4294967295) ) - (i32.const 2496) + (i32.const 1524) ) ) (block @@ -6527,5 +7195,328 @@ (unreachable) ) ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 68719476735) + ) + (i32.const 2188) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 154) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 868719476735) + ) + (i32.const 2216) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 155) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 999868719476735) + ) + (i32.const 2244) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 156) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 9999868719476735) + ) + (i32.const 2280) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 157) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 19999868719476735) + ) + (i32.const 2316) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 158) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const -1) + ) + (i32.const 2356) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 159) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 0) + ) + (i32.const 436) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 161) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -1234) + ) + (i32.const 2400) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 162) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 4294967295) + ) + (i32.const 1524) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 163) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -4294967295) + ) + (i32.const 2416) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 164) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 68719476735) + ) + (i32.const 2188) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 165) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -68719476735) + ) + (i32.const 2444) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 166) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -868719476735) + ) + (i32.const 2472) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 167) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -999868719476735) + ) + (i32.const 2504) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 168) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -19999868719476735) + ) + (i32.const 2540) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 169) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 9223372036854775807) + ) + (i32.const 2580) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 170) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -9223372036854775808) + ) + (i32.const 2624) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 171) + (i32.const 0) + ) + (unreachable) + ) + ) ) ) diff --git a/tests/compiler/std/string.ts b/tests/compiler/std/string.ts index 22bdf6b1..933e1a79 100644 --- a/tests/compiler/std/string.ts +++ b/tests/compiler/std/string.ts @@ -25,6 +25,24 @@ assert(str.startsWith("hi")); assert(str.endsWith("string")); assert(str.includes("I'm")); +assert(str.padStart(0) == str); +assert(str.padStart(15) == str); +assert("".padStart(3) == " "); +assert("".padStart(10, "") == ""); +assert("a".padStart(100, "") == "a"); +assert("abc".padStart(5) == " abc"); +assert("abc".padStart(6, "123") == "123abc"); +assert("abc".padStart(8, "123") == "12312abc"); + +assert(str.padEnd(0) == str); +assert(str.padEnd(15) == str); +assert("".padEnd(3) == " "); +assert("".padEnd(10, "") == ""); +assert("a".padEnd(100, "") == "a"); +assert("abc".padEnd(5) == "abc "); +assert("abc".padEnd(6, "abc") == "abcabc"); +assert("abc".padEnd(8, "abc") == "abcabcab"); + assert("".indexOf("") == 0); assert("".indexOf("hi") == -1); assert(str.indexOf("") == 0); diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index a01ca93f..51038617 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -2,11 +2,12 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) (type $ii (func (param i32) (result i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) + (type $iiiv (func (param i32 i32 i32))) (type $i (func (result i32))) (type $iiF (func (param i32 i32) (result f64))) (type $iF (func (param i32) (result f64))) - (type $iiiv (func (param i32 i32 i32))) (type $Ii (func (param i64) (result i32))) (type $iIiv (func (param i32 i64 i32))) (type $v (func)) @@ -25,6 +26,7 @@ (global $std/string/str (mut i32) (i32.const 12)) (global $std/string/nullStr (mut i32) (i32.const 0)) (global $~argc (mut i32) (i32.const 0)) + (global $ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $NaN f64 (f64.const nan:0x8000000000000)) (global $~lib/internal/string/CharCode.PLUS i32 (i32.const 43)) @@ -55,12 +57,11 @@ (global $std/string/c (mut i32) (i32.const 0)) (global $std/string/a (mut i32) (i32.const 0)) (global $std/string/b (mut i32) (i32.const 0)) - (global $ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/builtins/u64.MAX_VALUE i64 (i64.const -1)) (global $~lib/builtins/i64.MAX_VALUE i64 (i64.const 9223372036854775807)) (global $~lib/builtins/i64.MIN_VALUE i64 (i64.const -9223372036854775808)) - (global $HEAP_BASE i32 (i32.const 2540)) + (global $HEAP_BASE i32 (i32.const 2668)) (memory $0 1) (data (i32.const 8) "\00\00\00\00") (data (i32.const 12) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g\00") @@ -74,68 +75,76 @@ (data (i32.const 196) "\04\00\00\00n\00u\00l\00l\00") (data (i32.const 208) "\06\00\00\00s\00t\00r\00i\00n\00g\00") (data (i32.const 224) "\03\00\00\00I\00\'\00m\00") - (data (i32.const 236) "\01\00\00\00,\00") - (data (i32.const 244) "\01\00\00\00x\00") - (data (i32.const 252) "\03\00\00\00,\00 \00I\00") - (data (i32.const 264) "\01\00\00\00g\00") - (data (i32.const 272) "\01\00\00\00i\00") - (data (i32.const 280) "\01\00\00\000\00") - (data (i32.const 288) "\01\00\00\001\00") - (data (i32.const 296) "\05\00\00\000\00b\001\000\001\00") - (data (i32.const 312) "\05\00\00\000\00o\007\000\007\00") - (data (i32.const 328) "\05\00\00\000\00x\00f\000\00f\00") - (data (i32.const 344) "\05\00\00\000\00x\00F\000\00F\00") - (data (i32.const 360) "\03\00\00\000\001\001\00") - (data (i32.const 372) "\04\00\00\000\00x\001\00g\00") - (data (i32.const 384) "\03\00\00\000\00.\001\00") - (data (i32.const 396) "\03\00\00\00.\002\005\00") - (data (i32.const 408) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r\00") - (data (i32.const 428) "\01\00\00\00a\00") - (data (i32.const 436) "\01\00\00\00b\00") - (data (i32.const 444) "\02\00\00\00a\00b\00") - (data (i32.const 452) "\02\00\00\00b\00a\00") - (data (i32.const 460) "\02\00\00\00a\00a\00") - (data (i32.const 468) "\03\00\00\00a\00b\00c\00") - (data (i32.const 480) "\03\00\00\001\002\003\00") - (data (i32.const 492) "\03\00\00\00a\00a\00a\00") - (data (i32.const 504) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00") - (data (i32.const 524) "\05\00\00\00a\00a\00a\00a\00a\00") - (data (i32.const 540) "\06\00\00\00a\00a\00a\00a\00a\00a\00") - (data (i32.const 556) "\07\00\00\00a\00a\00a\00a\00a\00a\00a\00") - (data (i32.const 576) "H\02\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 648) "\90\02\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00\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\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\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") - (data (i32.const 1168) "\01\00\00\008\00") - (data (i32.const 1176) "\05\00\00\00-\001\000\000\000\00") - (data (i32.const 1192) "\04\00\00\001\002\003\004\00") - (data (i32.const 1204) "\05\00\00\001\002\003\004\005\00") - (data (i32.const 1220) "\06\00\00\001\002\003\004\005\006\00") - (data (i32.const 1236) "\07\00\00\001\001\001\001\001\001\001\00") - (data (i32.const 1256) "\07\00\00\001\002\003\004\005\006\007\00") - (data (i32.const 1276) "\n\00\00\002\001\004\007\004\008\003\006\004\006\00") - (data (i32.const 1300) "\n\00\00\002\001\004\007\004\008\003\006\004\007\00") - (data (i32.const 1324) "\0b\00\00\00-\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 1352) "\02\00\00\00-\001\00") - (data (i32.const 1360) "\04\00\00\001\000\000\000\00") - (data (i32.const 1372) "\n\00\00\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 1396) "\n\00\00\004\002\009\004\009\006\007\002\009\005\00") - (data (i32.const 1424) "\98\05\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 1496) "\e0\05\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00\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\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\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") - (data (i32.const 2016) "\08\00\00\009\009\009\009\009\009\009\009\00") - (data (i32.const 2036) "\t\00\00\001\000\000\000\000\000\000\000\000\00") - (data (i32.const 2060) "\0b\00\00\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2088) "\0c\00\00\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2116) "\0f\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2152) "\10\00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2188) "\11\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2228) "\14\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00") - (data (i32.const 2272) "\05\00\00\00-\001\002\003\004\00") - (data (i32.const 2288) "\0b\00\00\00-\004\002\009\004\009\006\007\002\009\005\00") - (data (i32.const 2316) "\0c\00\00\00-\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2344) "\0d\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2376) "\10\00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2412) "\12\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 2452) "\13\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00") - (data (i32.const 2496) "\14\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008\00") + (data (i32.const 236) "\01\00\00\00 \00") + (data (i32.const 244) "\03\00\00\00 \00 \00 \00") + (data (i32.const 256) "\01\00\00\00a\00") + (data (i32.const 264) "\03\00\00\00a\00b\00c\00") + (data (i32.const 276) "\05\00\00\00 \00 \00a\00b\00c\00") + (data (i32.const 292) "\03\00\00\001\002\003\00") + (data (i32.const 304) "\06\00\00\001\002\003\00a\00b\00c\00") + (data (i32.const 320) "\08\00\00\001\002\003\001\002\00a\00b\00c\00") + (data (i32.const 340) "\05\00\00\00a\00b\00c\00 \00 \00") + (data (i32.const 356) "\06\00\00\00a\00b\00c\00a\00b\00c\00") + (data (i32.const 372) "\08\00\00\00a\00b\00c\00a\00b\00c\00a\00b\00") + (data (i32.const 392) "\01\00\00\00,\00") + (data (i32.const 400) "\01\00\00\00x\00") + (data (i32.const 408) "\03\00\00\00,\00 \00I\00") + (data (i32.const 420) "\01\00\00\00g\00") + (data (i32.const 428) "\01\00\00\00i\00") + (data (i32.const 436) "\01\00\00\000\00") + (data (i32.const 444) "\01\00\00\001\00") + (data (i32.const 452) "\05\00\00\000\00b\001\000\001\00") + (data (i32.const 468) "\05\00\00\000\00o\007\000\007\00") + (data (i32.const 484) "\05\00\00\000\00x\00f\000\00f\00") + (data (i32.const 500) "\05\00\00\000\00x\00F\000\00F\00") + (data (i32.const 516) "\03\00\00\000\001\001\00") + (data (i32.const 528) "\04\00\00\000\00x\001\00g\00") + (data (i32.const 540) "\03\00\00\000\00.\001\00") + (data (i32.const 552) "\03\00\00\00.\002\005\00") + (data (i32.const 564) "\08\00\00\00.\001\00f\00o\00o\00b\00a\00r\00") + (data (i32.const 584) "\01\00\00\00b\00") + (data (i32.const 592) "\02\00\00\00a\00b\00") + (data (i32.const 600) "\02\00\00\00b\00a\00") + (data (i32.const 608) "\02\00\00\00a\00a\00") + (data (i32.const 616) "\03\00\00\00a\00a\00a\00") + (data (i32.const 628) "\08\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00") + (data (i32.const 648) "\05\00\00\00a\00a\00a\00a\00a\00") + (data (i32.const 664) "\06\00\00\00a\00a\00a\00a\00a\00a\00") + (data (i32.const 680) "\07\00\00\00a\00a\00a\00a\00a\00a\00a\00") + (data (i32.const 704) "\c8\02\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 776) "\10\03\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00\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\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\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") + (data (i32.const 1296) "\01\00\00\008\00") + (data (i32.const 1304) "\05\00\00\00-\001\000\000\000\00") + (data (i32.const 1320) "\04\00\00\001\002\003\004\00") + (data (i32.const 1332) "\05\00\00\001\002\003\004\005\00") + (data (i32.const 1348) "\06\00\00\001\002\003\004\005\006\00") + (data (i32.const 1364) "\07\00\00\001\001\001\001\001\001\001\00") + (data (i32.const 1384) "\07\00\00\001\002\003\004\005\006\007\00") + (data (i32.const 1404) "\n\00\00\002\001\004\007\004\008\003\006\004\006\00") + (data (i32.const 1428) "\n\00\00\002\001\004\007\004\008\003\006\004\007\00") + (data (i32.const 1452) "\0b\00\00\00-\002\001\004\007\004\008\003\006\004\008\00") + (data (i32.const 1480) "\02\00\00\00-\001\00") + (data (i32.const 1488) "\04\00\00\001\000\000\000\00") + (data (i32.const 1500) "\n\00\00\002\001\004\007\004\008\003\006\004\008\00") + (data (i32.const 1524) "\n\00\00\004\002\009\004\009\006\007\002\009\005\00") + (data (i32.const 1552) "\18\06\00\00\n\00\00\00(\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1624) "`\06\00\00d\00\00\00\90\01\00\00\00\00\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00\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\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\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") + (data (i32.const 2144) "\08\00\00\009\009\009\009\009\009\009\009\00") + (data (i32.const 2164) "\t\00\00\001\000\000\000\000\000\000\000\000\00") + (data (i32.const 2188) "\0b\00\00\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2216) "\0c\00\00\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2244) "\0f\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2280) "\10\00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2316) "\11\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2356) "\14\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00") + (data (i32.const 2400) "\05\00\00\00-\001\002\003\004\00") + (data (i32.const 2416) "\0b\00\00\00-\004\002\009\004\009\006\007\002\009\005\00") + (data (i32.const 2444) "\0c\00\00\00-\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2472) "\0d\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2504) "\10\00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2540) "\12\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") + (data (i32.const 2580) "\13\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00") + (data (i32.const 2624) "\14\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008\00") (export "memory" (memory $0)) (export "getString" (func $std/string/getString)) (start $start) @@ -151,7 +160,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 75) + (i32.const 77) (i32.const 4) ) (unreachable) @@ -360,47 +369,67 @@ ) (get_local $1) ) - (func $~lib/internal/string/compareUTF16 (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (set_local $3 + (func $~lib/internal/string/compareUnsafe (; 6 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 (i32.const 0) ) + (set_local $6 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (block $break|0 (loop $continue|0 (if (if (result i32) - (get_local $2) + (get_local $4) (i32.eqz - (tee_local $3 + (tee_local $5 (i32.sub (i32.load16_u offset=4 - (get_local $0) + (get_local $6) ) (i32.load16_u offset=4 - (get_local $1) + (get_local $7) ) ) ) ) - (get_local $2) + (get_local $4) ) (block (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) + (get_local $4) (i32.const 1) ) ) - (set_local $0 + (set_local $6 (i32.add - (get_local $0) + (get_local $6) (i32.const 1) ) ) - (set_local $1 + (set_local $7 (i32.add - (get_local $1) + (get_local $7) (i32.const 1) ) ) @@ -410,7 +439,7 @@ ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__eq (; 7 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -459,9 +488,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $3) ) ) @@ -482,7 +513,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 31) + (i32.const 33) (i32.const 4) ) (unreachable) @@ -576,7 +607,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 291) + (i32.const 245) (i32.const 4) ) (unreachable) @@ -611,18 +642,18 @@ (get_local $3) ) (tee_local $7 - (get_local $4) + (get_local $5) ) - (i32.lt_s + (i32.gt_s (get_local $6) (get_local $7) ) ) ) (tee_local $7 - (get_local $5) + (get_local $4) ) - (i32.gt_s + (i32.lt_s (get_local $6) (get_local $7) ) @@ -647,15 +678,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $8) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $8) (get_local $1) + (i32.const 0) (get_local $9) ) ) @@ -679,7 +706,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 136) + (i32.const 126) (i32.const 4) ) (unreachable) @@ -711,18 +738,18 @@ (get_local $2) ) (tee_local $6 - (get_local $4) + (get_local $3) ) - (i32.lt_s + (i32.gt_s (get_local $5) (get_local $6) ) ) ) (tee_local $6 - (get_local $3) + (get_local $4) ) - (i32.gt_s + (i32.lt_s (get_local $5) (get_local $6) ) @@ -750,15 +777,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $9) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $9) (get_local $1) + (i32.const 0) (get_local $8) ) ) @@ -804,7 +827,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 248) + (i32.const 214) (i32.const 4) ) (unreachable) @@ -857,18 +880,18 @@ (get_local $2) ) (tee_local $7 - (get_local $4) + (get_local $5) ) - (i32.lt_s + (i32.gt_s (get_local $6) (get_local $7) ) ) ) (tee_local $7 - (get_local $5) + (get_local $4) ) - (i32.gt_s + (i32.lt_s (get_local $6) (get_local $7) ) @@ -896,15 +919,11 @@ ) (if (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $5) - (i32.const 1) - ) - ) + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $5) (get_local $1) + (i32.const 0) (get_local $3) ) ) @@ -933,844 +952,7 @@ (i32.const -1) ) ) - (func $~lib/string/String#lastIndexOf (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (if - (i32.eqz - (i32.ne - (get_local $0) - (i32.const 0) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 80) - (i32.const 269) - (i32.const 4) - ) - (unreachable) - ) - ) - (if - (i32.eq - (get_local $1) - (i32.const 0) - ) - (set_local $1 - (i32.const 196) - ) - ) - (set_local $3 - (i32.load - (get_local $0) - ) - ) - (set_local $4 - (i32.load - (get_local $1) - ) - ) - (if - (i32.eqz - (get_local $4) - ) - (return - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $3) - ) - (return - (i32.const -1) - ) - ) - (set_local $9 - (block $~lib/internal/string/clamp|inlined.3 (result i32) - (set_local $5 - (i32.const 0) - ) - (set_local $6 - (i32.sub - (get_local $3) - (get_local $4) - ) - ) - (select - (tee_local $7 - (select - (tee_local $7 - (get_local $2) - ) - (tee_local $8 - (get_local $6) - ) - (i32.lt_s - (get_local $7) - (get_local $8) - ) - ) - ) - (tee_local $8 - (get_local $5) - ) - (i32.gt_s - (get_local $7) - (get_local $8) - ) - ) - ) - ) - (block $break|0 - (set_local $6 - (get_local $9) - ) - (loop $repeat|0 - (br_if $break|0 - (i32.eqz - (i32.ge_s - (get_local $6) - (i32.const 0) - ) - ) - ) - (if - (i32.eqz - (call $~lib/internal/string/compareUTF16 - (i32.add - (get_local $0) - (i32.shl - (get_local $6) - (i32.const 1) - ) - ) - (get_local $1) - (get_local $4) - ) - ) - (return - (get_local $6) - ) - ) - (set_local $6 - (i32.sub - (get_local $6) - (i32.const 1) - ) - ) - (br $repeat|0) - ) - ) - (i32.const -1) - ) - (func $~lib/string/String#lastIndexOf|trampoline (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (block $1of1 - (block $0of1 - (block $outOfRange - (br_table $0of1 $1of1 $outOfRange - (i32.sub - (get_global $~argc) - (i32.const 1) - ) - ) - ) - (unreachable) - ) - (set_local $2 - (get_global $~lib/builtins/i32.MAX_VALUE) - ) - ) - (call $~lib/string/String#lastIndexOf - (get_local $0) - (get_local $1) - (get_local $2) - ) - ) - (func $std/string/getString (; 16 ;) (type $i) (result i32) - (get_global $std/string/str) - ) - (func $~lib/internal/string/parse (; 17 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 f64) - (local $6 i32) - (local $7 f64) - (set_local $2 - (i32.load - (get_local $0) - ) - ) - (if - (i32.eqz - (get_local $2) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $3 - (get_local $0) - ) - (set_local $4 - (i32.load16_u offset=4 - (get_local $3) - ) - ) - (if - (i32.eq - (get_local $4) - (get_global $~lib/internal/string/CharCode.MINUS) - ) - (block - (if - (i32.eqz - (tee_local $2 - (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $4 - (i32.load16_u offset=4 - (tee_local $3 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - ) - (set_local $5 - (f64.const -1) - ) - ) - (if - (i32.eq - (get_local $4) - (get_global $~lib/internal/string/CharCode.PLUS) - ) - (block - (if - (i32.eqz - (tee_local $2 - (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $4 - (i32.load16_u offset=4 - (tee_local $3 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - ) - (set_local $5 - (f64.const 1) - ) - ) - (set_local $5 - (f64.const 1) - ) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (if - (if (result i32) - (tee_local $6 - (i32.eq - (get_local $4) - (get_global $~lib/internal/string/CharCode._0) - ) - ) - (i32.gt_s - (get_local $2) - (i32.const 2) - ) - (get_local $6) - ) - (block $break|0 - (block $case6|0 - (block $case5|0 - (block $case4|0 - (block $case3|0 - (block $case2|0 - (block $case1|0 - (block $case0|0 - (set_local $6 - (i32.load16_u offset=4 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - (br_if $case0|0 - (i32.eq - (get_local $6) - (get_global $~lib/internal/string/CharCode.B) - ) - ) - (br_if $case1|0 - (i32.eq - (get_local $6) - (get_global $~lib/internal/string/CharCode.b) - ) - ) - (br_if $case2|0 - (i32.eq - (get_local $6) - (get_global $~lib/internal/string/CharCode.O) - ) - ) - (br_if $case3|0 - (i32.eq - (get_local $6) - (get_global $~lib/internal/string/CharCode.o) - ) - ) - (br_if $case4|0 - (i32.eq - (get_local $6) - (get_global $~lib/internal/string/CharCode.X) - ) - ) - (br_if $case5|0 - (i32.eq - (get_local $6) - (get_global $~lib/internal/string/CharCode.x) - ) - ) - (br $case6|0) - ) - ) - (block - (set_local $3 - (i32.add - (get_local $3) - (i32.const 4) - ) - ) - (set_local $2 - (i32.sub - (get_local $2) - (i32.const 2) - ) - ) - (set_local $1 - (i32.const 2) - ) - (br $break|0) - ) - ) - ) - (block - (set_local $3 - (i32.add - (get_local $3) - (i32.const 4) - ) - ) - (set_local $2 - (i32.sub - (get_local $2) - (i32.const 2) - ) - ) - (set_local $1 - (i32.const 8) - ) - (br $break|0) - ) - ) - ) - (block - (set_local $3 - (i32.add - (get_local $3) - (i32.const 4) - ) - ) - (set_local $2 - (i32.sub - (get_local $2) - (i32.const 2) - ) - ) - (set_local $1 - (i32.const 16) - ) - (br $break|0) - ) - ) - (set_local $1 - (i32.const 10) - ) - ) - (set_local $1 - (i32.const 10) - ) - ) - (if - (if (result i32) - (tee_local $6 - (i32.lt_s - (get_local $1) - (i32.const 2) - ) - ) - (get_local $6) - (i32.gt_s - (get_local $1) - (i32.const 36) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - ) - (set_local $7 - (f64.const 0) - ) - (block $break|1 - (loop $continue|1 - (if - (block (result i32) - (set_local $6 - (get_local $2) - ) - (set_local $2 - (i32.sub - (get_local $6) - (i32.const 1) - ) - ) - (get_local $6) - ) - (block - (block - (set_local $4 - (i32.load16_u offset=4 - (get_local $3) - ) - ) - (if - (if (result i32) - (tee_local $6 - (i32.ge_s - (get_local $4) - (get_global $~lib/internal/string/CharCode._0) - ) - ) - (i32.le_s - (get_local $4) - (get_global $~lib/internal/string/CharCode._9) - ) - (get_local $6) - ) - (set_local $4 - (i32.sub - (get_local $4) - (get_global $~lib/internal/string/CharCode._0) - ) - ) - (if - (if (result i32) - (tee_local $6 - (i32.ge_s - (get_local $4) - (get_global $~lib/internal/string/CharCode.A) - ) - ) - (i32.le_s - (get_local $4) - (get_global $~lib/internal/string/CharCode.Z) - ) - (get_local $6) - ) - (set_local $4 - (i32.sub - (get_local $4) - (i32.sub - (get_global $~lib/internal/string/CharCode.A) - (i32.const 10) - ) - ) - ) - (if - (if (result i32) - (tee_local $6 - (i32.ge_s - (get_local $4) - (get_global $~lib/internal/string/CharCode.a) - ) - ) - (i32.le_s - (get_local $4) - (get_global $~lib/internal/string/CharCode.z) - ) - (get_local $6) - ) - (set_local $4 - (i32.sub - (get_local $4) - (i32.sub - (get_global $~lib/internal/string/CharCode.a) - (i32.const 10) - ) - ) - ) - (br $break|1) - ) - ) - ) - (if - (i32.ge_s - (get_local $4) - (get_local $1) - ) - (br $break|1) - ) - (set_local $7 - (f64.add - (f64.mul - (get_local $7) - (f64.convert_s/i32 - (get_local $1) - ) - ) - (f64.convert_s/i32 - (get_local $4) - ) - ) - ) - (set_local $3 - (i32.add - (get_local $3) - (i32.const 2) - ) - ) - ) - (br $continue|1) - ) - ) - ) - ) - (f64.mul - (get_local $5) - (get_local $7) - ) - ) - (func $~lib/string/parseInt (; 18 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) - (call $~lib/internal/string/parse - (get_local $0) - (get_local $1) - ) - ) - (func $~lib/string/parseFloat (; 19 ;) (type $iF) (param $0 i32) (result f64) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 f64) - (local $5 f64) - (local $6 i32) - (local $7 f64) - (set_local $1 - (i32.load - (get_local $0) - ) - ) - (if - (i32.eqz - (get_local $1) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $2 - (get_local $0) - ) - (set_local $3 - (i32.load16_u offset=4 - (get_local $2) - ) - ) - (if - (i32.eq - (get_local $3) - (get_global $~lib/internal/string/CharCode.MINUS) - ) - (block - (if - (i32.eqz - (tee_local $1 - (i32.sub - (get_local $1) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $3 - (i32.load16_u offset=4 - (tee_local $2 - (i32.add - (get_local $2) - (i32.const 2) - ) - ) - ) - ) - (set_local $4 - (f64.const -1) - ) - ) - (if - (i32.eq - (get_local $3) - (get_global $~lib/internal/string/CharCode.PLUS) - ) - (block - (if - (i32.eqz - (tee_local $1 - (i32.sub - (get_local $1) - (i32.const 1) - ) - ) - ) - (return - (f64.const nan:0x8000000000000) - ) - ) - (set_local $3 - (i32.load16_u offset=4 - (tee_local $2 - (i32.add - (get_local $2) - (i32.const 2) - ) - ) - ) - ) - (set_local $4 - (f64.const 1) - ) - ) - (set_local $4 - (f64.const 1) - ) - ) - ) - (set_local $5 - (f64.const 0) - ) - (block $break|0 - (loop $continue|0 - (if - (block (result i32) - (set_local $6 - (get_local $1) - ) - (set_local $1 - (i32.sub - (get_local $6) - (i32.const 1) - ) - ) - (get_local $6) - ) - (block - (block - (set_local $3 - (i32.load16_u offset=4 - (get_local $2) - ) - ) - (if - (i32.eq - (get_local $3) - (get_global $~lib/internal/string/CharCode.DOT) - ) - (block - (set_local $2 - (i32.add - (get_local $2) - (i32.const 2) - ) - ) - (set_local $7 - (f64.const 0.1) - ) - (block $break|1 - (loop $continue|1 - (if - (block (result i32) - (set_local $6 - (get_local $1) - ) - (set_local $1 - (i32.sub - (get_local $6) - (i32.const 1) - ) - ) - (get_local $6) - ) - (block - (block - (set_local $3 - (i32.load16_u offset=4 - (get_local $2) - ) - ) - (if - (if (result i32) - (tee_local $6 - (i32.eq - (get_local $3) - (get_global $~lib/internal/string/CharCode.E) - ) - ) - (get_local $6) - (i32.eq - (get_local $3) - (get_global $~lib/internal/string/CharCode.e) - ) - ) - (if - (i32.eqz - (i32.const 0) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 80) - (i32.const 588) - (i32.const 10) - ) - (unreachable) - ) - ) - ) - (set_local $3 - (i32.sub - (get_local $3) - (get_global $~lib/internal/string/CharCode._0) - ) - ) - (if - (i32.gt_u - (get_local $3) - (i32.const 9) - ) - (br $break|1) - ) - (set_local $5 - (f64.add - (get_local $5) - (f64.mul - (f64.convert_s/i32 - (get_local $3) - ) - (get_local $7) - ) - ) - ) - (set_local $7 - (f64.mul - (get_local $7) - (f64.const 0.1) - ) - ) - (set_local $2 - (i32.add - (get_local $2) - (i32.const 2) - ) - ) - ) - (br $continue|1) - ) - ) - ) - ) - (br $break|0) - ) - ) - (set_local $3 - (i32.sub - (get_local $3) - (get_global $~lib/internal/string/CharCode._0) - ) - ) - (if - (i32.ge_u - (get_local $3) - (i32.const 10) - ) - (br $break|0) - ) - (set_local $5 - (f64.add - (f64.mul - (get_local $5) - (f64.const 10) - ) - (f64.convert_s/i32 - (get_local $3) - ) - ) - ) - (set_local $2 - (i32.add - (get_local $2) - (i32.const 2) - ) - ) - ) - (br $continue|0) - ) - ) - ) - ) - (f64.mul - (get_local $4) - (get_local $5) - ) - ) - (func $~lib/memory/memcpy (; 20 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memcpy (; 14 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3572,7 +2754,7 @@ ) ) ) - (func $~lib/memory/memmove (; 21 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memmove (; 15 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (if (i32.eq @@ -3890,18 +3072,1653 @@ ) ) ) - (func $~lib/memory/memory.copy (; 22 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 16 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (call $~lib/memory/memmove (get_local $0) (get_local $1) (get_local $2) ) ) - (func $~lib/string/String#concat (; 23 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/string/repeatUnsafe (; 17 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i64) + (local $10 i32) + (set_local $4 + (i32.load + (get_local $2) + ) + ) + (block $break|0 + (block $case5|0 + (block $case4|0 + (block $case3|0 + (block $case2|0 + (block $case1|0 + (block $case0|0 + (set_local $5 + (get_local $4) + ) + (br_if $case0|0 + (i32.eq + (get_local $5) + (i32.const 0) + ) + ) + (br_if $case1|0 + (i32.eq + (get_local $5) + (i32.const 1) + ) + ) + (br_if $case2|0 + (i32.eq + (get_local $5) + (i32.const 2) + ) + ) + (br_if $case3|0 + (i32.eq + (get_local $5) + (i32.const 3) + ) + ) + (br_if $case4|0 + (i32.eq + (get_local $5) + (i32.const 4) + ) + ) + (br $case5|0) + ) + (br $break|0) + ) + (block + (set_local $5 + (i32.load16_u offset=4 + (get_local $2) + ) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|1 + (set_local $7 + (i32.const 0) + ) + (loop $repeat|1 + (br_if $break|1 + (i32.eqz + (i32.lt_s + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.store16 offset=4 + (i32.add + (get_local $6) + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (get_local $5) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $repeat|1) + ) + ) + (br $break|0) + ) + ) + (block + (set_local $6 + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|2 + (set_local $7 + (i32.const 0) + ) + (loop $repeat|2 + (br_if $break|2 + (i32.eqz + (i32.lt_s + (get_local $7) + (get_local $3) + ) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $5) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + (get_local $6) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $repeat|2) + ) + ) + (br $break|0) + ) + ) + (block + (set_local $5 + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $6 + (i32.load16_u offset=8 + (get_local $2) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|3 + (set_local $8 + (i32.const 0) + ) + (loop $repeat|3 + (br_if $break|3 + (i32.eqz + (i32.lt_s + (get_local $8) + (get_local $3) + ) + ) + ) + (block + (i32.store offset=4 + (i32.add + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + (get_local $5) + ) + (i32.store16 offset=8 + (i32.add + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + (get_local $6) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $repeat|3) + ) + ) + (br $break|0) + ) + ) + (block + (set_local $9 + (i64.load offset=4 + (get_local $2) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (block $break|4 + (set_local $6 + (i32.const 0) + ) + (loop $repeat|4 + (br_if $break|4 + (i32.eqz + (i32.lt_s + (get_local $6) + (get_local $3) + ) + ) + ) + (i64.store offset=4 + (i32.add + (get_local $7) + (i32.shl + (get_local $6) + (i32.const 3) + ) + ) + (get_local $9) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $repeat|4) + ) + ) + (br $break|0) + ) + ) + (block + (set_local $7 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (set_local $6 + (i32.add + (i32.add + (get_local $0) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $2) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + ) + (block $break|5 + (block + (set_local $8 + (i32.const 0) + ) + (set_local $10 + (i32.mul + (get_local $7) + (get_local $3) + ) + ) + ) + (loop $repeat|5 + (br_if $break|5 + (i32.eqz + (i32.lt_s + (get_local $8) + (get_local $10) + ) + ) + ) + (call $~lib/memory/memory.copy + (i32.add + (get_local $6) + (get_local $8) + ) + (get_local $5) + (get_local $7) + ) + (set_local $8 + (i32.add + (get_local $8) + (get_local $7) + ) + ) + (br $repeat|5) + ) + ) + (br $break|0) + ) + ) + ) + (func $~lib/string/String#padStart (; 18 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (if + (i32.eqz + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 351) + (i32.const 4) + ) + (unreachable) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (set_local $4 + (i32.load + (get_local $2) + ) + ) + (if + (if (result i32) + (tee_local $5 + (i32.lt_s + (get_local $1) + (get_local $3) + ) + ) + (get_local $5) + (i32.eqz + (get_local $4) + ) + ) + (return + (get_local $0) + ) + ) + (set_local $6 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $7 + (call $~lib/internal/string/allocate + (get_local $1) + ) + ) + (if + (i32.gt_s + (get_local $6) + (get_local $4) + ) + (block + (set_local $5 + (i32.div_s + (i32.sub + (get_local $6) + (i32.const 1) + ) + (get_local $4) + ) + ) + (set_local $8 + (i32.mul + (get_local $5) + (get_local $4) + ) + ) + (set_local $9 + (i32.sub + (get_local $6) + (get_local $8) + ) + ) + (call $~lib/internal/string/repeatUnsafe + (get_local $7) + (i32.const 0) + (get_local $2) + (get_local $5) + ) + (if + (get_local $9) + (block $~lib/internal/string/copyUnsafe|inlined.0 + (set_local $10 + (i32.const 0) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $2) + (i32.shl + (get_local $10) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + ) + ) + ) + (block $~lib/internal/string/copyUnsafe|inlined.1 + (set_local $9 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $2) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (if + (get_local $3) + (block $~lib/internal/string/copyUnsafe|inlined.2 + (set_local $8 + (i32.const 0) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + (get_local $7) + ) + (func $~lib/string/String#padStart|trampoline (; 19 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $outOfRange + (br_table $0of1 $1of1 $outOfRange + (i32.sub + (get_global $~argc) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 236) + ) + ) + (call $~lib/string/String#padStart + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $~lib/string/String#padEnd (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (if + (i32.eqz + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 371) + (i32.const 4) + ) + (unreachable) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (set_local $4 + (i32.load + (get_local $2) + ) + ) + (if + (if (result i32) + (tee_local $5 + (i32.lt_s + (get_local $1) + (get_local $3) + ) + ) + (get_local $5) + (i32.eqz + (get_local $4) + ) + ) + (return + (get_local $0) + ) + ) + (set_local $6 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $7 + (call $~lib/internal/string/allocate + (get_local $1) + ) + ) + (if + (get_local $3) + (block $~lib/internal/string/copyUnsafe|inlined.3 + (set_local $5 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.gt_s + (get_local $6) + (get_local $4) + ) + (block + (set_local $8 + (i32.div_s + (i32.sub + (get_local $6) + (i32.const 1) + ) + (get_local $4) + ) + ) + (set_local $5 + (i32.mul + (get_local $8) + (get_local $4) + ) + ) + (set_local $9 + (i32.sub + (get_local $6) + (get_local $5) + ) + ) + (call $~lib/internal/string/repeatUnsafe + (get_local $7) + (get_local $3) + (get_local $2) + (get_local $8) + ) + (if + (get_local $9) + (block $~lib/internal/string/copyUnsafe|inlined.4 + (set_local $10 + (i32.add + (get_local $5) + (get_local $3) + ) + ) + (set_local $11 + (i32.const 0) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $10) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $2) + (i32.shl + (get_local $11) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + ) + ) + ) + (block $~lib/internal/string/copyUnsafe|inlined.5 + (set_local $9 + (i32.const 0) + ) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $2) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (get_local $7) + ) + (func $~lib/string/String#padEnd|trampoline (; 21 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $outOfRange + (br_table $0of1 $1of1 $outOfRange + (i32.sub + (get_global $~argc) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 236) + ) + ) + (call $~lib/string/String#padEnd + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $~lib/string/String#lastIndexOf (; 22 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (if + (i32.eqz + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 230) + (i32.const 4) + ) + (unreachable) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 0) + ) + (set_local $1 + (i32.const 196) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (set_local $4 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $4) + ) + (return + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (return + (i32.const -1) + ) + ) + (set_local $9 + (block $~lib/internal/string/clamp|inlined.3 (result i32) + (set_local $5 + (i32.const 0) + ) + (set_local $6 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (select + (tee_local $7 + (select + (tee_local $7 + (get_local $2) + ) + (tee_local $8 + (get_local $5) + ) + (i32.gt_s + (get_local $7) + (get_local $8) + ) + ) + ) + (tee_local $8 + (get_local $6) + ) + (i32.lt_s + (get_local $7) + (get_local $8) + ) + ) + ) + ) + (block $break|0 + (set_local $6 + (get_local $9) + ) + (loop $repeat|0 + (br_if $break|0 + (i32.eqz + (i32.ge_s + (get_local $6) + (i32.const 0) + ) + ) + ) + (if + (i32.eqz + (call $~lib/internal/string/compareUnsafe + (get_local $0) + (get_local $6) + (get_local $1) + (i32.const 0) + (get_local $4) + ) + ) + (return + (get_local $6) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (i32.const 1) + ) + ) + (br $repeat|0) + ) + ) + (i32.const -1) + ) + (func $~lib/string/String#lastIndexOf|trampoline (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $outOfRange + (br_table $0of1 $1of1 $outOfRange + (i32.sub + (get_global $~argc) + (i32.const 1) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (get_global $~lib/builtins/i32.MAX_VALUE) + ) + ) + (call $~lib/string/String#lastIndexOf + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $std/string/getString (; 24 ;) (type $i) (result i32) + (get_global $std/string/str) + ) + (func $~lib/internal/string/parse (; 25 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f64) + (local $6 i32) + (local $7 f64) + (set_local $2 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $3 + (get_local $0) + ) + (set_local $4 + (i32.load16_u offset=4 + (get_local $3) + ) + ) + (if + (i32.eq + (get_local $4) + (get_global $~lib/internal/string/CharCode.MINUS) + ) + (block + (if + (i32.eqz + (tee_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $4 + (i32.load16_u offset=4 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (set_local $5 + (f64.const -1) + ) + ) + (if + (i32.eq + (get_local $4) + (get_global $~lib/internal/string/CharCode.PLUS) + ) + (block + (if + (i32.eqz + (tee_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $4 + (i32.load16_u offset=4 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (set_local $5 + (f64.const 1) + ) + ) + (set_local $5 + (f64.const 1) + ) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (if + (if (result i32) + (tee_local $6 + (i32.eq + (get_local $4) + (get_global $~lib/internal/string/CharCode._0) + ) + ) + (i32.gt_s + (get_local $2) + (i32.const 2) + ) + (get_local $6) + ) + (block $break|0 + (block $case6|0 + (block $case5|0 + (block $case4|0 + (block $case3|0 + (block $case2|0 + (block $case1|0 + (block $case0|0 + (set_local $6 + (i32.load16_u offset=4 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + (br_if $case0|0 + (i32.eq + (get_local $6) + (get_global $~lib/internal/string/CharCode.B) + ) + ) + (br_if $case1|0 + (i32.eq + (get_local $6) + (get_global $~lib/internal/string/CharCode.b) + ) + ) + (br_if $case2|0 + (i32.eq + (get_local $6) + (get_global $~lib/internal/string/CharCode.O) + ) + ) + (br_if $case3|0 + (i32.eq + (get_local $6) + (get_global $~lib/internal/string/CharCode.o) + ) + ) + (br_if $case4|0 + (i32.eq + (get_local $6) + (get_global $~lib/internal/string/CharCode.X) + ) + ) + (br_if $case5|0 + (i32.eq + (get_local $6) + (get_global $~lib/internal/string/CharCode.x) + ) + ) + (br $case6|0) + ) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 2) + ) + ) + (set_local $1 + (i32.const 2) + ) + (br $break|0) + ) + ) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 2) + ) + ) + (set_local $1 + (i32.const 8) + ) + (br $break|0) + ) + ) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 2) + ) + ) + (set_local $1 + (i32.const 16) + ) + (br $break|0) + ) + ) + (set_local $1 + (i32.const 10) + ) + ) + (set_local $1 + (i32.const 10) + ) + ) + (if + (if (result i32) + (tee_local $6 + (i32.lt_s + (get_local $1) + (i32.const 2) + ) + ) + (get_local $6) + (i32.gt_s + (get_local $1) + (i32.const 36) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + ) + (set_local $7 + (f64.const 0) + ) + (block $break|1 + (loop $continue|1 + (if + (block (result i32) + (set_local $6 + (get_local $2) + ) + (set_local $2 + (i32.sub + (get_local $6) + (i32.const 1) + ) + ) + (get_local $6) + ) + (block + (block + (set_local $4 + (i32.load16_u offset=4 + (get_local $3) + ) + ) + (if + (if (result i32) + (tee_local $6 + (i32.ge_s + (get_local $4) + (get_global $~lib/internal/string/CharCode._0) + ) + ) + (i32.le_s + (get_local $4) + (get_global $~lib/internal/string/CharCode._9) + ) + (get_local $6) + ) + (set_local $4 + (i32.sub + (get_local $4) + (get_global $~lib/internal/string/CharCode._0) + ) + ) + (if + (if (result i32) + (tee_local $6 + (i32.ge_s + (get_local $4) + (get_global $~lib/internal/string/CharCode.A) + ) + ) + (i32.le_s + (get_local $4) + (get_global $~lib/internal/string/CharCode.Z) + ) + (get_local $6) + ) + (set_local $4 + (i32.sub + (get_local $4) + (i32.sub + (get_global $~lib/internal/string/CharCode.A) + (i32.const 10) + ) + ) + ) + (if + (if (result i32) + (tee_local $6 + (i32.ge_s + (get_local $4) + (get_global $~lib/internal/string/CharCode.a) + ) + ) + (i32.le_s + (get_local $4) + (get_global $~lib/internal/string/CharCode.z) + ) + (get_local $6) + ) + (set_local $4 + (i32.sub + (get_local $4) + (i32.sub + (get_global $~lib/internal/string/CharCode.a) + (i32.const 10) + ) + ) + ) + (br $break|1) + ) + ) + ) + (if + (i32.ge_s + (get_local $4) + (get_local $1) + ) + (br $break|1) + ) + (set_local $7 + (f64.add + (f64.mul + (get_local $7) + (f64.convert_s/i32 + (get_local $1) + ) + ) + (f64.convert_s/i32 + (get_local $4) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (f64.mul + (get_local $5) + (get_local $7) + ) + ) + (func $~lib/string/parseInt (; 26 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (call $~lib/internal/string/parse + (get_local $0) + (get_local $1) + ) + ) + (func $~lib/string/parseFloat (; 27 ;) (type $iF) (param $0 i32) (result f64) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 f64) + (local $6 i32) + (local $7 f64) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $2 + (get_local $0) + ) + (set_local $3 + (i32.load16_u offset=4 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $3) + (get_global $~lib/internal/string/CharCode.MINUS) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.sub + (get_local $1) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $3 + (i32.load16_u offset=4 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (set_local $4 + (f64.const -1) + ) + ) + (if + (i32.eq + (get_local $3) + (get_global $~lib/internal/string/CharCode.PLUS) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.sub + (get_local $1) + (i32.const 1) + ) + ) + ) + (return + (f64.const nan:0x8000000000000) + ) + ) + (set_local $3 + (i32.load16_u offset=4 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (set_local $4 + (f64.const 1) + ) + ) + (set_local $4 + (f64.const 1) + ) + ) + ) + (set_local $5 + (f64.const 0) + ) + (block $break|0 + (loop $continue|0 + (if + (block (result i32) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (i32.sub + (get_local $6) + (i32.const 1) + ) + ) + (get_local $6) + ) + (block + (block + (set_local $3 + (i32.load16_u offset=4 + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $3) + (get_global $~lib/internal/string/CharCode.DOT) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + (set_local $7 + (f64.const 0.1) + ) + (block $break|1 + (loop $continue|1 + (if + (block (result i32) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (i32.sub + (get_local $6) + (i32.const 1) + ) + ) + (get_local $6) + ) + (block + (block + (set_local $3 + (i32.load16_u offset=4 + (get_local $2) + ) + ) + (if + (if (result i32) + (tee_local $6 + (i32.eq + (get_local $3) + (get_global $~lib/internal/string/CharCode.E) + ) + ) + (get_local $6) + (i32.eq + (get_local $3) + (get_global $~lib/internal/string/CharCode.e) + ) + ) + (if + (i32.eqz + (i32.const 0) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 80) + (i32.const 519) + (i32.const 10) + ) + (unreachable) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (get_global $~lib/internal/string/CharCode._0) + ) + ) + (if + (i32.gt_u + (get_local $3) + (i32.const 9) + ) + (br $break|1) + ) + (set_local $5 + (f64.add + (get_local $5) + (f64.mul + (f64.convert_s/i32 + (get_local $3) + ) + (get_local $7) + ) + ) + ) + (set_local $7 + (f64.mul + (get_local $7) + (f64.const 0.1) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (br $break|0) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (get_global $~lib/internal/string/CharCode._0) + ) + ) + (if + (i32.ge_u + (get_local $3) + (i32.const 10) + ) + (br $break|0) + ) + (set_local $5 + (f64.add + (f64.mul + (get_local $5) + (f64.const 10) + ) + (f64.convert_s/i32 + (get_local $3) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (f64.mul + (get_local $4) + (get_local $5) + ) + ) + (func $~lib/string/String#concat (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) (if (i32.eqz (i32.ne @@ -3958,24 +4775,32 @@ (get_local $4) ) ) - (call $~lib/memory/memory.copy - (i32.add - (get_local $5) - (get_global $~lib/internal/string/HEADER_SIZE) + (block $~lib/internal/string/copyUnsafe|inlined.6 + (set_local $6 + (i32.const 0) ) - (i32.add - (get_local $0) - (get_global $~lib/internal/string/HEADER_SIZE) + (set_local $7 + (i32.const 0) ) - (i32.shl - (get_local $2) - (i32.const 1) - ) - ) - (call $~lib/memory/memory.copy - (i32.add + (call $~lib/memory/memory.copy (i32.add - (get_local $5) + (i32.add + (get_local $5) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) (get_global $~lib/internal/string/HEADER_SIZE) ) (i32.shl @@ -3983,18 +4808,41 @@ (i32.const 1) ) ) - (i32.add - (get_local $1) - (get_global $~lib/internal/string/HEADER_SIZE) + ) + (block $~lib/internal/string/copyUnsafe|inlined.7 + (set_local $7 + (i32.const 0) ) - (i32.shl - (get_local $3) - (i32.const 1) + (call $~lib/memory/memory.copy + (i32.add + (i32.add + (get_local $5) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.add + (i32.add + (get_local $1) + (i32.shl + (get_local $7) + (i32.const 1) + ) + ) + (get_global $~lib/internal/string/HEADER_SIZE) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) ) ) (get_local $5) ) - (func $~lib/string/String.__concat (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (if (i32.eqz (get_local $0) @@ -4008,7 +4856,7 @@ (get_local $1) ) ) - (func $~lib/string/String.__ne (; 25 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (i32.eqz (call $~lib/string/String.__eq (get_local $0) @@ -4016,7 +4864,7 @@ ) ) ) - (func $~lib/string/String.__gt (; 26 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gt (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4090,15 +4938,17 @@ ) ) (i32.gt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $6) ) (i32.const 0) ) ) - (func $~lib/string/String.__gte (; 27 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gte (; 32 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4174,15 +5024,17 @@ ) ) (i32.ge_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $6) ) (i32.const 0) ) ) - (func $~lib/string/String.__lt (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lt (; 33 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4256,15 +5108,17 @@ ) ) (i32.lt_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $6) ) (i32.const 0) ) ) - (func $~lib/string/String.__lte (; 29 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lte (; 34 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4340,20 +5194,20 @@ ) ) (i32.le_s - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $6) ) (i32.const 0) ) ) - (func $~lib/string/String#repeat (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#repeat (; 35 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 i32) (if (i32.eqz (i32.ne @@ -4365,7 +5219,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 442) + (i32.const 391) (i32.const 4) ) (unreachable) @@ -4400,7 +5254,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 80) - (i32.const 447) + (i32.const 396) (i32.const 6) ) (unreachable) @@ -4440,59 +5294,15 @@ ) ) ) - (set_local $5 - (i32.shl - (get_local $2) - (i32.const 1) - ) - ) - (block $break|0 - (block - (set_local $3 - (i32.const 0) - ) - (set_local $6 - (i32.mul - (get_local $5) - (get_local $1) - ) - ) - ) - (loop $repeat|0 - (br_if $break|0 - (i32.eqz - (i32.lt_s - (get_local $3) - (get_local $6) - ) - ) - ) - (call $~lib/memory/memory.copy - (i32.add - (i32.add - (get_local $4) - (get_global $~lib/internal/string/HEADER_SIZE) - ) - (get_local $3) - ) - (i32.add - (get_local $0) - (get_global $~lib/internal/string/HEADER_SIZE) - ) - (get_local $5) - ) - (set_local $3 - (i32.add - (get_local $3) - (get_local $5) - ) - ) - (br $repeat|0) - ) + (call $~lib/internal/string/repeatUnsafe + (get_local $4) + (i32.const 0) + (get_local $0) + (get_local $1) ) (get_local $4) ) - (func $~lib/internal/itoa/decimalCountU32 (; 31 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/itoa/decimalCountU32 (; 36 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4517,7 +5327,7 @@ (set_local $3 (i32.load (block $~lib/internal/itoa/POWERS10|inlined.0 (result i32) - (i32.const 576) + (i32.const 704) ) ) ) @@ -4548,7 +5358,7 @@ (i32.const 1) ) ) - (func $~lib/internal/itoa/utoa32_lut (; 32 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/itoa/utoa32_lut (; 37 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4559,7 +5369,7 @@ (set_local $3 (i32.load (block $~lib/internal/itoa/DIGITS|inlined.0 (result i32) - (i32.const 648) + (i32.const 776) ) ) ) @@ -4767,7 +5577,7 @@ ) ) ) - (func $~lib/internal/itoa/itoa32 (; 33 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/itoa/itoa32 (; 38 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4776,7 +5586,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (set_local $1 @@ -4823,7 +5633,7 @@ ) (get_local $3) ) - (func $~lib/internal/itoa/utoa32 (; 34 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/internal/itoa/utoa32 (; 39 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (if @@ -4831,7 +5641,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (set_local $1 @@ -4853,7 +5663,7 @@ ) (get_local $2) ) - (func $~lib/internal/itoa/decimalCountU64 (; 35 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/itoa/decimalCountU64 (; 40 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4881,7 +5691,7 @@ (set_local $3 (i32.load (block $~lib/internal/itoa/POWERS10|inlined.1 (result i32) - (i32.const 1424) + (i32.const 1552) ) ) ) @@ -4921,7 +5731,7 @@ (i32.const 1) ) ) - (func $~lib/internal/itoa/utoa64_lut (; 36 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/internal/itoa/utoa64_lut (; 41 ;) (type $iIiv) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i64) (local $5 i32) @@ -4936,7 +5746,7 @@ (set_local $3 (i32.load (block $~lib/internal/itoa/DIGITS|inlined.1 (result i32) - (i32.const 1496) + (i32.const 1624) ) ) ) @@ -5115,7 +5925,7 @@ (get_local $2) ) ) - (func $~lib/internal/itoa/utoa64 (; 37 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/itoa/utoa64 (; 42 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5124,7 +5934,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (if @@ -5180,7 +5990,7 @@ ) (get_local $1) ) - (func $~lib/internal/itoa/itoa64 (; 38 ;) (type $Ii) (param $0 i64) (result i32) + (func $~lib/internal/itoa/itoa64 (; 43 ;) (type $Ii) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5190,7 +6000,7 @@ (get_local $0) ) (return - (i32.const 280) + (i32.const 436) ) ) (set_local $1 @@ -5274,7 +6084,7 @@ ) (get_local $2) ) - (func $start (; 39 ;) (type $v) + (func $start (; 44 ;) (type $v) (set_global $~lib/allocator/arena/startOffset (i32.and (i32.add @@ -5519,6 +6329,382 @@ (unreachable) ) ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padStart|trampoline + (get_global $std/string/str) + (i32.const 0) + (i32.const 0) + ) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 28) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padStart|trampoline + (get_global $std/string/str) + (i32.const 15) + (i32.const 0) + ) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 29) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padStart|trampoline + (i32.const 8) + (i32.const 3) + (i32.const 0) + ) + ) + (i32.const 244) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 30) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 8) + (i32.const 10) + (i32.const 8) + ) + (i32.const 8) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 31) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 256) + (i32.const 100) + (i32.const 8) + ) + (i32.const 256) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 32) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padStart|trampoline + (i32.const 264) + (i32.const 5) + (i32.const 0) + ) + ) + (i32.const 276) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 33) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 264) + (i32.const 6) + (i32.const 292) + ) + (i32.const 304) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 34) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padStart + (i32.const 264) + (i32.const 8) + (i32.const 292) + ) + (i32.const 320) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 35) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padEnd|trampoline + (get_global $std/string/str) + (i32.const 0) + (i32.const 0) + ) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 37) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padEnd|trampoline + (get_global $std/string/str) + (i32.const 15) + (i32.const 0) + ) + ) + (get_global $std/string/str) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 38) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padEnd|trampoline + (i32.const 8) + (i32.const 3) + (i32.const 0) + ) + ) + (i32.const 244) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 39) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 8) + (i32.const 10) + (i32.const 8) + ) + (i32.const 8) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 40) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 256) + (i32.const 100) + (i32.const 8) + ) + (i32.const 256) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 41) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (block (result i32) + (set_global $~argc + (i32.const 1) + ) + (call $~lib/string/String#padEnd|trampoline + (i32.const 264) + (i32.const 5) + (i32.const 0) + ) + ) + (i32.const 340) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 42) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 264) + (i32.const 6) + (i32.const 264) + ) + (i32.const 356) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 43) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#padEnd + (i32.const 264) + (i32.const 8) + (i32.const 264) + ) + (i32.const 372) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 44) + (i32.const 0) + ) + (unreachable) + ) + ) (if (i32.eqz (i32.eq @@ -5534,7 +6720,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 28) + (i32.const 46) (i32.const 0) ) (unreachable) @@ -5555,7 +6741,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 29) + (i32.const 47) (i32.const 0) ) (unreachable) @@ -5576,7 +6762,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 30) + (i32.const 48) (i32.const 0) ) (unreachable) @@ -5587,7 +6773,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 0) ) (i32.const 2) @@ -5597,7 +6783,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 31) + (i32.const 49) (i32.const 0) ) (unreachable) @@ -5608,7 +6794,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 244) + (i32.const 400) (i32.const 0) ) (i32.const -1) @@ -5618,7 +6804,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 32) + (i32.const 50) (i32.const 0) ) (unreachable) @@ -5629,7 +6815,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 2) ) (i32.const 2) @@ -5639,7 +6825,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 33) + (i32.const 51) (i32.const 0) ) (unreachable) @@ -5650,7 +6836,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 3) ) (i32.const -1) @@ -5660,7 +6846,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 34) + (i32.const 52) (i32.const 0) ) (unreachable) @@ -5671,7 +6857,7 @@ (i32.eq (call $~lib/string/String#indexOf (get_global $std/string/str) - (i32.const 252) + (i32.const 408) (i32.const -1) ) (i32.const 2) @@ -5681,7 +6867,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 35) + (i32.const 53) (i32.const 0) ) (unreachable) @@ -5707,7 +6893,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 37) + (i32.const 55) (i32.const 0) ) (unreachable) @@ -5733,7 +6919,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 38) + (i32.const 56) (i32.const 0) ) (unreachable) @@ -5761,7 +6947,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 39) + (i32.const 57) (i32.const 0) ) (unreachable) @@ -5776,7 +6962,7 @@ ) (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 0) ) ) @@ -5787,7 +6973,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 40) + (i32.const 58) (i32.const 0) ) (unreachable) @@ -5802,7 +6988,7 @@ ) (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) - (i32.const 244) + (i32.const 400) (i32.const 0) ) ) @@ -5813,7 +6999,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 41) + (i32.const 59) (i32.const 0) ) (unreachable) @@ -5828,7 +7014,7 @@ ) (call $~lib/string/String#lastIndexOf|trampoline (get_global $std/string/str) - (i32.const 264) + (i32.const 420) (i32.const 0) ) ) @@ -5839,7 +7025,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 42) + (i32.const 60) (i32.const 0) ) (unreachable) @@ -5850,7 +7036,7 @@ (i32.eq (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 2) ) (i32.const 2) @@ -5860,7 +7046,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 43) + (i32.const 61) (i32.const 0) ) (unreachable) @@ -5871,7 +7057,7 @@ (i32.eq (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 236) + (i32.const 392) (i32.const 3) ) (i32.const 2) @@ -5881,7 +7067,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 44) + (i32.const 62) (i32.const 0) ) (unreachable) @@ -5892,7 +7078,7 @@ (i32.eq (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 252) + (i32.const 408) (i32.const -1) ) (i32.const -1) @@ -5902,7 +7088,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 45) + (i32.const 63) (i32.const 0) ) (unreachable) @@ -5913,7 +7099,7 @@ (i32.eq (call $~lib/string/String#lastIndexOf (get_global $std/string/str) - (i32.const 272) + (i32.const 428) (i32.const 0) ) (i32.const -1) @@ -5923,7 +7109,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 46) + (i32.const 64) (i32.const 0) ) (unreachable) @@ -5940,242 +7126,6 @@ (i32.const 0) ) ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 47) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 280) - (i32.const 0) - ) - (f64.const 0) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 53) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 288) - (i32.const 0) - ) - (f64.const 1) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 54) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 296) - (i32.const 0) - ) - (f64.const 5) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 55) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 312) - (i32.const 0) - ) - (f64.const 455) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 56) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 328) - (i32.const 0) - ) - (f64.const 3855) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 57) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 344) - (i32.const 0) - ) - (f64.const 3855) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 58) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 360) - (i32.const 0) - ) - (f64.const 11) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 59) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseInt - (i32.const 372) - (i32.const 0) - ) - (f64.const 1) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 60) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseFloat - (i32.const 280) - ) - (f64.const 0) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 62) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseFloat - (i32.const 288) - ) - (f64.const 1) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 63) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseFloat - (i32.const 384) - ) - (f64.const 0.1) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 64) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (f64.eq - (call $~lib/string/parseFloat - (i32.const 396) - ) - (f64.const 0.25) - ) - ) (block (call $~lib/env/abort (i32.const 0) @@ -6186,11 +7136,209 @@ (unreachable) ) ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 436) + (i32.const 0) + ) + (f64.const 0) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 71) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 444) + (i32.const 0) + ) + (f64.const 1) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 72) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 452) + (i32.const 0) + ) + (f64.const 5) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 73) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 468) + (i32.const 0) + ) + (f64.const 455) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 74) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 484) + (i32.const 0) + ) + (f64.const 3855) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 75) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 500) + (i32.const 0) + ) + (f64.const 3855) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 76) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 516) + (i32.const 0) + ) + (f64.const 11) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 77) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseInt + (i32.const 528) + (i32.const 0) + ) + (f64.const 1) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 78) + (i32.const 0) + ) + (unreachable) + ) + ) (if (i32.eqz (f64.eq (call $~lib/string/parseFloat - (i32.const 408) + (i32.const 436) + ) + (f64.const 0) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 80) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseFloat + (i32.const 444) + ) + (f64.const 1) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 81) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseFloat + (i32.const 540) ) (f64.const 0.1) ) @@ -6199,7 +7347,45 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 66) + (i32.const 82) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseFloat + (i32.const 552) + ) + (f64.const 0.25) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 83) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (f64.eq + (call $~lib/string/parseFloat + (i32.const 564) + ) + (f64.const 0.1) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 84) (i32.const 0) ) (unreachable) @@ -6207,22 +7393,22 @@ ) (set_global $std/string/c (call $~lib/string/String.__concat - (i32.const 428) - (i32.const 436) + (i32.const 256) + (i32.const 584) ) ) (if (i32.eqz (call $~lib/string/String.__eq (get_global $std/string/c) - (i32.const 444) + (i32.const 592) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 69) + (i32.const 87) (i32.const 0) ) (unreachable) @@ -6232,14 +7418,14 @@ (i32.eqz (call $~lib/string/String.__ne (get_global $std/string/c) - (i32.const 428) + (i32.const 256) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 70) + (i32.const 88) (i32.const 0) ) (unreachable) @@ -6256,7 +7442,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 71) + (i32.const 89) (i32.const 0) ) (unreachable) @@ -6273,7 +7459,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 72) + (i32.const 90) (i32.const 0) ) (unreachable) @@ -6282,15 +7468,15 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 436) - (i32.const 428) + (i32.const 584) + (i32.const 256) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 74) + (i32.const 92) (i32.const 0) ) (unreachable) @@ -6299,15 +7485,15 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 452) - (i32.const 428) + (i32.const 600) + (i32.const 256) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 75) + (i32.const 93) (i32.const 0) ) (unreachable) @@ -6316,15 +7502,15 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 452) - (i32.const 460) + (i32.const 600) + (i32.const 608) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 76) + (i32.const 94) (i32.const 0) ) (unreachable) @@ -6333,15 +7519,15 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 452) - (i32.const 444) + (i32.const 600) + (i32.const 592) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 77) + (i32.const 95) (i32.const 0) ) (unreachable) @@ -6351,8 +7537,8 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 452) - (i32.const 444) + (i32.const 600) + (i32.const 592) ) ) ) @@ -6360,7 +7546,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 78) + (i32.const 96) (i32.const 0) ) (unreachable) @@ -6370,7 +7556,7 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 436) + (i32.const 584) (get_global $std/string/nullStr) ) ) @@ -6379,7 +7565,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 80) + (i32.const 98) (i32.const 0) ) (unreachable) @@ -6390,7 +7576,7 @@ (i32.eqz (call $~lib/string/String.__lt (get_global $std/string/nullStr) - (i32.const 436) + (i32.const 584) ) ) ) @@ -6398,7 +7584,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 81) + (i32.const 99) (i32.const 0) ) (unreachable) @@ -6407,7 +7593,7 @@ (if (i32.eqz (call $~lib/string/String.__gt - (i32.const 468) + (i32.const 264) (i32.const 8) ) ) @@ -6415,7 +7601,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 83) + (i32.const 101) (i32.const 0) ) (unreachable) @@ -6425,14 +7611,14 @@ (i32.eqz (call $~lib/string/String.__lt (i32.const 8) - (i32.const 468) + (i32.const 264) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 84) + (i32.const 102) (i32.const 0) ) (unreachable) @@ -6441,7 +7627,7 @@ (if (i32.eqz (call $~lib/string/String.__gte - (i32.const 468) + (i32.const 264) (i32.const 8) ) ) @@ -6449,7 +7635,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 85) + (i32.const 103) (i32.const 0) ) (unreachable) @@ -6459,14 +7645,14 @@ (i32.eqz (call $~lib/string/String.__lte (i32.const 8) - (i32.const 468) + (i32.const 264) ) ) (block (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 86) + (i32.const 104) (i32.const 0) ) (unreachable) @@ -6476,7 +7662,7 @@ (i32.eqz (i32.eqz (call $~lib/string/String.__lt - (i32.const 468) + (i32.const 264) (i32.const 8) ) ) @@ -6485,7 +7671,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 87) + (i32.const 105) (i32.const 0) ) (unreachable) @@ -6496,7 +7682,7 @@ (i32.eqz (call $~lib/string/String.__gt (i32.const 8) - (i32.const 468) + (i32.const 264) ) ) ) @@ -6504,7 +7690,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 88) + (i32.const 106) (i32.const 0) ) (unreachable) @@ -6523,7 +7709,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 89) + (i32.const 107) (i32.const 0) ) (unreachable) @@ -6542,7 +7728,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 90) + (i32.const 108) (i32.const 0) ) (unreachable) @@ -6559,7 +7745,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 91) + (i32.const 109) (i32.const 0) ) (unreachable) @@ -6576,7 +7762,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 92) + (i32.const 110) (i32.const 0) ) (unreachable) @@ -6608,7 +7794,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 96) + (i32.const 114) (i32.const 0) ) (unreachable) @@ -6618,7 +7804,7 @@ (i32.eqz (i32.eq (i32.load - (i32.const 480) + (i32.const 292) ) (i32.const 3) ) @@ -6627,7 +7813,7 @@ (call $~lib/env/abort (i32.const 0) (i32.const 48) - (i32.const 98) + (i32.const 116) (i32.const 0) ) (unreachable) @@ -6643,337 +7829,6 @@ (i32.const 8) ) ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 100) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 0) - ) - (i32.const 8) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 101) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 1) - ) - (i32.const 428) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 102) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 2) - ) - (i32.const 460) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 103) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 3) - ) - (i32.const 492) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 104) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 444) - (i32.const 4) - ) - (i32.const 504) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 105) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 5) - ) - (i32.const 524) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 106) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 6) - ) - (i32.const 540) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 107) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/string/String#repeat - (i32.const 428) - (i32.const 7) - ) - (i32.const 556) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 108) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 0) - ) - (i32.const 280) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 110) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1) - ) - (i32.const 288) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 111) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 8) - ) - (i32.const 1168) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 112) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 123) - ) - (i32.const 480) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 113) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const -1000) - ) - (i32.const 1176) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 114) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1234) - ) - (i32.const 1192) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 115) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 12345) - ) - (i32.const 1204) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 116) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 123456) - ) - (i32.const 1220) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 117) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1111111) - ) - (i32.const 1236) - ) - ) (block (call $~lib/env/abort (i32.const 0) @@ -6987,10 +7842,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 1234567) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 0) ) - (i32.const 1256) + (i32.const 8) ) ) (block @@ -7006,10 +7862,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 2147483646) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 1) ) - (i32.const 1276) + (i32.const 256) ) ) (block @@ -7025,10 +7882,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const 2147483647) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 2) ) - (i32.const 1300) + (i32.const 608) ) ) (block @@ -7044,10 +7902,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const -2147483648) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 3) ) - (i32.const 1324) + (i32.const 616) ) ) (block @@ -7063,10 +7922,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa32 - (i32.const -1) + (call $~lib/string/String#repeat + (i32.const 592) + (i32.const 4) ) - (i32.const 1352) + (i32.const 628) ) ) (block @@ -7082,10 +7942,31 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const 0) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 5) ) - (i32.const 280) + (i32.const 648) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 124) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 6) + ) + (i32.const 664) ) ) (block @@ -7101,10 +7982,11 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const 1000) + (call $~lib/string/String#repeat + (i32.const 256) + (i32.const 7) ) - (i32.const 1360) + (i32.const 680) ) ) (block @@ -7120,29 +8002,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const 2147483647) + (call $~lib/internal/itoa/itoa32 + (i32.const 0) ) - (i32.const 1300) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 127) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (i32.const -2147483648) - ) - (i32.const 1372) + (i32.const 436) ) ) (block @@ -7158,10 +8021,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa32 - (get_global $~lib/builtins/u32.MAX_VALUE) + (call $~lib/internal/itoa/itoa32 + (i32.const 1) ) - (i32.const 1396) + (i32.const 444) ) ) (block @@ -7177,10 +8040,29 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 0) + (call $~lib/internal/itoa/itoa32 + (i32.const 8) ) - (i32.const 280) + (i32.const 1296) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 130) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa32 + (i32.const 123) + ) + (i32.const 292) ) ) (block @@ -7196,10 +8078,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 1234) + (call $~lib/internal/itoa/itoa32 + (i32.const -1000) ) - (i32.const 1192) + (i32.const 1304) ) ) (block @@ -7215,10 +8097,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 99999999) + (call $~lib/internal/itoa/itoa32 + (i32.const 1234) ) - (i32.const 2016) + (i32.const 1320) ) ) (block @@ -7234,10 +8116,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 100000000) + (call $~lib/internal/itoa/itoa32 + (i32.const 12345) ) - (i32.const 2036) + (i32.const 1332) ) ) (block @@ -7253,10 +8135,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 4294967295) + (call $~lib/internal/itoa/itoa32 + (i32.const 123456) ) - (i32.const 1396) + (i32.const 1348) ) ) (block @@ -7272,10 +8154,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 68719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 1111111) ) - (i32.const 2060) + (i32.const 1364) ) ) (block @@ -7291,10 +8173,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 1234567) ) - (i32.const 2088) + (i32.const 1384) ) ) (block @@ -7310,10 +8192,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 999868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 2147483646) ) - (i32.const 2116) + (i32.const 1404) ) ) (block @@ -7329,10 +8211,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 9999868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const 2147483647) ) - (i32.const 2152) + (i32.const 1428) ) ) (block @@ -7348,10 +8230,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (i64.const 19999868719476735) + (call $~lib/internal/itoa/itoa32 + (i32.const -2147483648) ) - (i32.const 2188) + (i32.const 1452) ) ) (block @@ -7367,10 +8249,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/utoa64 - (get_global $~lib/builtins/u64.MAX_VALUE) + (call $~lib/internal/itoa/itoa32 + (i32.const -1) ) - (i32.const 2228) + (i32.const 1480) ) ) (block @@ -7386,10 +8268,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 0) + (call $~lib/internal/itoa/utoa32 + (i32.const 0) ) - (i32.const 280) + (i32.const 436) ) ) (block @@ -7405,10 +8287,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -1234) + (call $~lib/internal/itoa/utoa32 + (i32.const 1000) ) - (i32.const 2272) + (i32.const 1488) ) ) (block @@ -7424,10 +8306,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 4294967295) + (call $~lib/internal/itoa/utoa32 + (i32.const 2147483647) ) - (i32.const 1396) + (i32.const 1428) ) ) (block @@ -7443,10 +8325,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -4294967295) + (call $~lib/internal/itoa/utoa32 + (i32.const -2147483648) ) - (i32.const 2288) + (i32.const 1500) ) ) (block @@ -7462,10 +8344,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const 68719476735) + (call $~lib/internal/itoa/utoa32 + (get_global $~lib/builtins/u32.MAX_VALUE) ) - (i32.const 2060) + (i32.const 1524) ) ) (block @@ -7481,29 +8363,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -68719476735) + (call $~lib/internal/itoa/utoa64 + (i64.const 0) ) - (i32.const 2316) - ) - ) - (block - (call $~lib/env/abort - (i32.const 0) - (i32.const 48) - (i32.const 148) - (i32.const 0) - ) - (unreachable) - ) - ) - (if - (i32.eqz - (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -868719476735) - ) - (i32.const 2344) + (i32.const 436) ) ) (block @@ -7519,10 +8382,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -999868719476735) + (call $~lib/internal/itoa/utoa64 + (i64.const 1234) ) - (i32.const 2376) + (i32.const 1320) ) ) (block @@ -7538,10 +8401,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (i64.const -19999868719476735) + (call $~lib/internal/itoa/utoa64 + (i64.const 99999999) ) - (i32.const 2412) + (i32.const 2144) ) ) (block @@ -7557,10 +8420,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (get_global $~lib/builtins/i64.MAX_VALUE) + (call $~lib/internal/itoa/utoa64 + (i64.const 100000000) ) - (i32.const 2452) + (i32.const 2164) ) ) (block @@ -7576,10 +8439,10 @@ (if (i32.eqz (call $~lib/string/String.__eq - (call $~lib/internal/itoa/itoa64 - (get_global $~lib/builtins/i64.MIN_VALUE) + (call $~lib/internal/itoa/utoa64 + (i64.const 4294967295) ) - (i32.const 2496) + (i32.const 1524) ) ) (block @@ -7592,5 +8455,328 @@ (unreachable) ) ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 68719476735) + ) + (i32.const 2188) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 154) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 868719476735) + ) + (i32.const 2216) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 155) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 999868719476735) + ) + (i32.const 2244) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 156) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 9999868719476735) + ) + (i32.const 2280) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 157) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (i64.const 19999868719476735) + ) + (i32.const 2316) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 158) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/utoa64 + (get_global $~lib/builtins/u64.MAX_VALUE) + ) + (i32.const 2356) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 159) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 0) + ) + (i32.const 436) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 161) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -1234) + ) + (i32.const 2400) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 162) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 4294967295) + ) + (i32.const 1524) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 163) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -4294967295) + ) + (i32.const 2416) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 164) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const 68719476735) + ) + (i32.const 2188) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 165) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -68719476735) + ) + (i32.const 2444) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 166) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -868719476735) + ) + (i32.const 2472) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 167) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -999868719476735) + ) + (i32.const 2504) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 168) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (i64.const -19999868719476735) + ) + (i32.const 2540) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 169) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (get_global $~lib/builtins/i64.MAX_VALUE) + ) + (i32.const 2580) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 170) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (call $~lib/string/String.__eq + (call $~lib/internal/itoa/itoa64 + (get_global $~lib/builtins/i64.MIN_VALUE) + ) + (i32.const 2624) + ) + ) + (block + (call $~lib/env/abort + (i32.const 0) + (i32.const 48) + (i32.const 171) + (i32.const 0) + ) + (unreachable) + ) + ) ) ) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index 5c02d34f..cd35fa75 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -5,6 +5,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $iiv (func (param i32 i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) @@ -679,36 +680,50 @@ ) (get_local $2) ) - (func $~lib/internal/string/compareUTF16 (; 12 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/internal/string/compareUnsafe (; 12 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (set_local $1 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (loop $continue|0 (if - (if (result i32) - (get_local $2) - (i32.eqz - (tee_local $3 - (i32.sub - (i32.load16_u offset=4 - (get_local $0) - ) - (i32.load16_u offset=4 - (get_local $1) + (tee_local $0 + (if (result i32) + (get_local $4) + (i32.eqz + (tee_local $5 + (i32.sub + (i32.load16_u offset=4 + (get_local $1) + ) + (i32.load16_u offset=4 + (get_local $2) + ) ) ) ) + (get_local $4) ) - (get_local $2) ) (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) - (i32.const 1) - ) - ) - (set_local $0 - (i32.add - (get_local $0) + (get_local $4) (i32.const 1) ) ) @@ -718,11 +733,17 @@ (i32.const 1) ) ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) (br $continue|0) ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__eq (; 13 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -771,9 +792,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $2) ) ) diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat index b0bc0b85..f974d62f 100644 --- a/tests/compiler/std/symbol.untouched.wat +++ b/tests/compiler/std/symbol.untouched.wat @@ -5,6 +5,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) + (type $iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $iiv (func (param i32 i32))) (type $v (func)) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) @@ -854,47 +855,67 @@ ) (get_local $1) ) - (func $~lib/internal/string/compareUTF16 (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (set_local $3 + (func $~lib/internal/string/compareUnsafe (; 14 ;) (type $iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 (i32.const 0) ) + (set_local $6 + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $2) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) (block $break|0 (loop $continue|0 (if (if (result i32) - (get_local $2) + (get_local $4) (i32.eqz - (tee_local $3 + (tee_local $5 (i32.sub (i32.load16_u offset=4 - (get_local $0) + (get_local $6) ) (i32.load16_u offset=4 - (get_local $1) + (get_local $7) ) ) ) ) - (get_local $2) + (get_local $4) ) (block (block - (set_local $2 + (set_local $4 (i32.sub - (get_local $2) + (get_local $4) (i32.const 1) ) ) - (set_local $0 + (set_local $6 (i32.add - (get_local $0) + (get_local $6) (i32.const 1) ) ) - (set_local $1 + (set_local $7 (i32.add - (get_local $1) + (get_local $7) (i32.const 1) ) ) @@ -904,7 +925,7 @@ ) ) ) - (get_local $3) + (get_local $5) ) (func $~lib/string/String.__eq (; 15 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -953,9 +974,11 @@ ) ) (i32.eqz - (call $~lib/internal/string/compareUTF16 + (call $~lib/internal/string/compareUnsafe (get_local $0) + (i32.const 0) (get_local $1) + (i32.const 0) (get_local $3) ) )