From 1417d2808c57ca9af99f50e4593828f46fb9a536 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Fri, 29 Nov 2019 02:53:27 +0200 Subject: [PATCH 1/2] optimize substring. Fix substr. Add tests --- std/assembly/string.ts | 28 +- tests/compiler/number.optimized.wat | 44 +- tests/compiler/number.untouched.wat | 18 +- tests/compiler/resolve-binary.optimized.wat | 44 +- tests/compiler/resolve-binary.untouched.wat | 18 +- .../resolve-elementaccess.optimized.wat | 44 +- .../resolve-elementaccess.untouched.wat | 18 +- tests/compiler/resolve-ternary.optimized.wat | 44 +- tests/compiler/resolve-ternary.untouched.wat | 18 +- tests/compiler/std/array.optimized.wat | 44 +- tests/compiler/std/array.untouched.wat | 18 +- tests/compiler/std/string.optimized.wat | 1579 +++++++---- tests/compiler/std/string.ts | 22 + tests/compiler/std/string.untouched.wat | 2338 ++++++++++------- tests/compiler/std/typedarray.optimized.wat | 44 +- tests/compiler/std/typedarray.untouched.wat | 18 +- 16 files changed, 2626 insertions(+), 1713 deletions(-) diff --git a/std/assembly/string.ts b/std/assembly/string.ts index dddb707530..1533cad9f8 100644 --- a/std/assembly/string.ts +++ b/std/assembly/string.ts @@ -174,12 +174,12 @@ import { idof } from "./builtins"; substr(start: i32, length: i32 = i32.MAX_VALUE): String { // legacy var intStart: isize = start; var end: isize = length; - var size: isize = this.length; - if (intStart < 0) intStart = max(size + intStart, 0); - var resultLength = min(max(end, 0), size - intStart); - if (resultLength <= 0) return changetype(""); - var out = __alloc(resultLength << 1, idof()); - memory.copy(out, changetype(this) + intStart, resultLength); + var len: isize = this.length; + if (intStart < 0) intStart = max(len + intStart, 0); + var size = min(max(end, 0), len - intStart) << 1; + if (size <= 0) return changetype(""); + var out = __alloc(size, idof()); + memory.copy(out, changetype(this) + (intStart << 1), size); return changetype(out); // retains } @@ -189,17 +189,17 @@ import { idof } from "./builtins"; var finalEnd = min(max(end, 0), len); var fromPos = min(finalStart, finalEnd) << 1; var toPos = max(finalStart, finalEnd) << 1; - len = toPos - fromPos; - if (!len) return changetype(""); - if (!fromPos && toPos == this.length << 1) return this; - var out = __alloc(len, idof()); - memory.copy(out, changetype(this) + fromPos, len); + var size = toPos - fromPos; + if (!size) return changetype(""); + if (!fromPos && toPos == len << 1) return this; + var out = __alloc(size, idof()); + memory.copy(out, changetype(this) + fromPos, size); return changetype(out); // retains } trim(): String { - var length = this.length; - var size: usize = length << 1; + var len = this.length; + var size: usize = len << 1; while (size && isSpace(load(changetype(this) + size - 2))) { size -= 2; } @@ -208,7 +208,7 @@ import { idof } from "./builtins"; offset += 2; size -= 2; } if (!size) return changetype(""); - if (!offset && size == length << 1) return this; + if (!offset && size == len << 1) return this; var out = __alloc(size, idof()); memory.copy(out, changetype(this) + offset, size); return changetype(out); // retains diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 8397484cd5..68475772eb 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -1360,6 +1360,7 @@ (func $~lib/string/String#substring (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/string/String#get:length @@ -1381,54 +1382,51 @@ local.get $2 i32.lt_s select - local.tee $2 + local.tee $1 local.get $3 - local.get $2 + local.get $1 i32.gt_s select i32.const 1 i32.shl - local.tee $1 + local.tee $4 local.get $3 - local.get $2 + local.get $1 local.get $3 - local.get $2 + local.get $1 i32.lt_s select i32.const 1 i32.shl - local.tee $3 + local.tee $1 i32.sub - local.tee $2 + local.tee $3 i32.eqz if i32.const 1288 return end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end + i32.const 0 + local.get $2 + i32.const 1 + i32.shl + local.get $4 + i32.eq + local.get $1 + select if local.get $0 return end - local.get $2 + local.get $3 call $~lib/rt/stub/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $3 + local.get $1 i32.add - local.get $2 + local.get $3 call $~lib/memory/memory.copy - local.get $1 + local.get $2 ) (func $~lib/rt/stub/__free (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) diff --git a/tests/compiler/number.untouched.wat b/tests/compiler/number.untouched.wat index bf9e86e4e7..b2c9883417 100644 --- a/tests/compiler/number.untouched.wat +++ b/tests/compiler/number.untouched.wat @@ -3171,6 +3171,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length local.set $3 @@ -3231,8 +3232,8 @@ local.get $9 local.get $8 i32.sub - local.set $3 - local.get $3 + local.set $10 + local.get $10 i32.eqz if i32.const 1736 @@ -3243,8 +3244,7 @@ i32.eqz if (result i32) local.get $9 - local.get $0 - call $~lib/string/String#get:length + local.get $3 i32.const 1 i32.shl i32.eq @@ -3256,17 +3256,17 @@ call $~lib/rt/stub/__retain return end - local.get $3 + local.get $10 i32.const 1 call $~lib/rt/stub/__alloc - local.set $10 - local.get $10 + local.set $11 + local.get $11 local.get $0 local.get $8 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $10 + call $~lib/memory/memory.copy + local.get $11 call $~lib/rt/stub/__retain ) (func $~lib/rt/stub/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index 3b2562fabb..322bb33d15 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -1546,6 +1546,7 @@ (func $~lib/string/String#substring (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/string/String#get:length @@ -1567,55 +1568,52 @@ local.get $2 i32.lt_s select - local.tee $2 + local.tee $1 local.get $3 - local.get $2 + local.get $1 i32.gt_s select i32.const 1 i32.shl - local.tee $1 + local.tee $4 local.get $3 - local.get $2 + local.get $1 local.get $3 - local.get $2 + local.get $1 i32.lt_s select i32.const 1 i32.shl - local.tee $3 + local.tee $1 i32.sub - local.tee $2 + local.tee $3 i32.eqz if i32.const 1408 return end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end + i32.const 0 + local.get $2 + i32.const 1 + i32.shl + local.get $4 + i32.eq + local.get $1 + select if local.get $0 return end - local.get $2 + local.get $3 i32.const 1 call $~lib/rt/stub/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $3 + local.get $1 i32.add - local.get $2 + local.get $3 call $~lib/memory/memory.copy - local.get $1 + local.get $2 ) (func $~lib/rt/stub/__free (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) diff --git a/tests/compiler/resolve-binary.untouched.wat b/tests/compiler/resolve-binary.untouched.wat index 3b8017cecd..11a804a394 100644 --- a/tests/compiler/resolve-binary.untouched.wat +++ b/tests/compiler/resolve-binary.untouched.wat @@ -4366,6 +4366,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length local.set $3 @@ -4426,8 +4427,8 @@ local.get $9 local.get $8 i32.sub - local.set $3 - local.get $3 + local.set $10 + local.get $10 i32.eqz if i32.const 1856 @@ -4438,8 +4439,7 @@ i32.eqz if (result i32) local.get $9 - local.get $0 - call $~lib/string/String#get:length + local.get $3 i32.const 1 i32.shl i32.eq @@ -4451,17 +4451,17 @@ call $~lib/rt/stub/__retain return end - local.get $3 + local.get $10 i32.const 1 call $~lib/rt/stub/__alloc - local.set $10 - local.get $10 + local.set $11 + local.get $11 local.get $0 local.get $8 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $10 + call $~lib/memory/memory.copy + local.get $11 call $~lib/rt/stub/__retain ) (func $~lib/rt/stub/__free (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index 572ea9221d..72d36abfc2 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -1456,6 +1456,7 @@ (func $~lib/string/String#substring (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/string/String#get:length @@ -1477,55 +1478,52 @@ local.get $2 i32.lt_s select - local.tee $2 + local.tee $1 local.get $3 - local.get $2 + local.get $1 i32.gt_s select i32.const 1 i32.shl - local.tee $1 + local.tee $4 local.get $3 - local.get $2 + local.get $1 local.get $3 - local.get $2 + local.get $1 i32.lt_s select i32.const 1 i32.shl - local.tee $3 + local.tee $1 i32.sub - local.tee $2 + local.tee $3 i32.eqz if i32.const 1416 return end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end + i32.const 0 + local.get $2 + i32.const 1 + i32.shl + local.get $4 + i32.eq + local.get $1 + select if local.get $0 return end - local.get $2 + local.get $3 i32.const 1 call $~lib/rt/stub/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $3 + local.get $1 i32.add - local.get $2 + local.get $3 call $~lib/memory/memory.copy - local.get $1 + local.get $2 ) (func $~lib/rt/stub/__free (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) diff --git a/tests/compiler/resolve-elementaccess.untouched.wat b/tests/compiler/resolve-elementaccess.untouched.wat index ee1cb8006b..6766ffede4 100644 --- a/tests/compiler/resolve-elementaccess.untouched.wat +++ b/tests/compiler/resolve-elementaccess.untouched.wat @@ -3304,6 +3304,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length local.set $3 @@ -3364,8 +3365,8 @@ local.get $9 local.get $8 i32.sub - local.set $3 - local.get $3 + local.set $10 + local.get $10 i32.eqz if i32.const 1864 @@ -3376,8 +3377,7 @@ i32.eqz if (result i32) local.get $9 - local.get $0 - call $~lib/string/String#get:length + local.get $3 i32.const 1 i32.shl i32.eq @@ -3389,17 +3389,17 @@ call $~lib/rt/stub/__retain return end - local.get $3 + local.get $10 i32.const 1 call $~lib/rt/stub/__alloc - local.set $10 - local.get $10 + local.set $11 + local.get $11 local.get $0 local.get $8 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $10 + call $~lib/memory/memory.copy + local.get $11 call $~lib/rt/stub/__retain ) (func $~lib/rt/stub/__free (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index fdeb65c852..936454826b 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -2959,6 +2959,7 @@ (func $~lib/string/String#substring (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/string/String#get:length @@ -2980,56 +2981,53 @@ local.get $2 i32.lt_s select - local.tee $2 + local.tee $1 local.get $3 - local.get $2 + local.get $1 i32.gt_s select i32.const 1 i32.shl - local.tee $1 + local.tee $4 local.get $3 - local.get $2 + local.get $1 local.get $3 - local.get $2 + local.get $1 i32.lt_s select i32.const 1 i32.shl - local.tee $3 + local.tee $1 i32.sub - local.tee $2 + local.tee $3 i32.eqz if i32.const 1552 return end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end + i32.const 0 + local.get $2 + i32.const 1 + i32.shl + local.get $4 + i32.eq + local.get $1 + select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $2 + local.get $3 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $3 + local.get $1 i32.add - local.get $2 + local.get $3 call $~lib/memory/memory.copy - local.get $1 + local.get $2 call $~lib/rt/pure/__retain ) (func $~lib/util/number/dtoa (; 36 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat index 8005227519..f73ba7d52b 100644 --- a/tests/compiler/resolve-ternary.untouched.wat +++ b/tests/compiler/resolve-ternary.untouched.wat @@ -5024,6 +5024,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length local.set $3 @@ -5084,8 +5085,8 @@ local.get $9 local.get $8 i32.sub - local.set $3 - local.get $3 + local.set $10 + local.get $10 i32.eqz if i32.const 2000 @@ -5096,8 +5097,7 @@ i32.eqz if (result i32) local.get $9 - local.get $0 - call $~lib/string/String#get:length + local.get $3 i32.const 1 i32.shl i32.eq @@ -5109,17 +5109,17 @@ call $~lib/rt/pure/__retain return end - local.get $3 + local.get $10 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $10 - local.get $10 + local.set $11 + local.get $11 local.get $0 local.get $8 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $10 + call $~lib/memory/memory.copy + local.get $11 call $~lib/rt/pure/__retain ) (func $~lib/util/number/dtoa (; 41 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index eb3cacd8d4..b9831566c9 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -7134,6 +7134,7 @@ (func $~lib/string/String#substring (; 157 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/string/String#get:length @@ -7155,56 +7156,53 @@ local.get $2 i32.lt_s select - local.tee $2 + local.tee $1 local.get $3 - local.get $2 + local.get $1 i32.gt_s select i32.const 1 i32.shl - local.tee $1 + local.tee $4 local.get $3 - local.get $2 + local.get $1 local.get $3 - local.get $2 + local.get $1 i32.lt_s select i32.const 1 i32.shl - local.tee $3 + local.tee $1 i32.sub - local.tee $2 + local.tee $3 i32.eqz if i32.const 4456 return end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end + i32.const 0 + local.get $2 + i32.const 1 + i32.shl + local.get $4 + i32.eq + local.get $1 + select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $2 + local.get $3 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $3 + local.get $1 i32.add - local.get $2 + local.get $3 call $~lib/memory/memory.copy - local.get $1 + local.get $2 call $~lib/rt/pure/__retain ) (func $~lib/util/string/joinBooleanArray (; 158 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 6c9f34bd6a..93b37ee043 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -12461,6 +12461,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length local.set $3 @@ -12521,8 +12522,8 @@ local.get $9 local.get $8 i32.sub - local.set $3 - local.get $3 + local.set $10 + local.get $10 i32.eqz if i32.const 4456 @@ -12533,8 +12534,7 @@ i32.eqz if (result i32) local.get $9 - local.get $0 - call $~lib/string/String#get:length + local.get $3 i32.const 1 i32.shl i32.eq @@ -12546,17 +12546,17 @@ call $~lib/rt/pure/__retain return end - local.get $3 + local.get $10 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $10 - local.get $10 + local.set $11 + local.get $11 local.get $0 local.get $8 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $10 + call $~lib/memory/memory.copy + local.get $11 call $~lib/rt/pure/__retain ) (func $~lib/util/string/joinBooleanArray (; 241 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 111fab49fc..0a018f19b9 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -275,97 +275,101 @@ (data (i32.const 10768) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00c\00d\00e\00f\00g") (data (i32.const 10800) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00d\00e\00f\00g\00h") (data (i32.const 10832) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m") - (data (i32.const 10880) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 10928) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 11040) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00a\00,\00b\00,\00c") - (data (i32.const 11072) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00a\00,\00 \00b\00,\00 \00c") - (data (i32.const 11104) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 ") - (data (i32.const 11128) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00a\00,\00b\00,\00,\00c") - (data (i32.const 11160) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00,\00a\00,\00b\00,\00c") - (data (i32.const 11192) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00a\00,\00b\00,\00c\00,") - (data (i32.const 11224) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\008") - (data (i32.const 11248) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\001\002") - (data (i32.const 11272) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00-\001\000\000\000") - (data (i32.const 11304) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\001\002\003\004") - (data (i32.const 11328) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\002\003\004\005") - (data (i32.const 11360) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\002\003\004\005\006") - (data (i32.const 11392) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\001\001\001\001\001\001") - (data (i32.const 11424) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\002\003\004\005\006\007") - (data (i32.const 11456) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\001\002\003\004\005\006\007\008") - (data (i32.const 11488) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\002\003\004\005\006\007\008\009") - (data (i32.const 11528) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006") - (data (i32.const 11568) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007") - (data (i32.const 11608) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 11648) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00-\001") - (data (i32.const 11672) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\001\000\000\000") - (data (i32.const 11696) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 11736) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005") - (data (i32.const 11776) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\009\009\009\009\009\009\009\009") - (data (i32.const 11808) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000") - (data (i32.const 11848) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\007") - (data (i32.const 11888) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 11928) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 11968) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\008\006\008\007\001\009\004\007\006\007\003\005\000") - (data (i32.const 12016) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\008\006\008\007\001\009\004\007\006\007\003\005\000\001") - (data (i32.const 12064) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12112) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12160) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12216) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\001\002\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12272) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\001\002\003\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12328) "(\00\00\00\01\00\00\00\01\00\00\00(\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 12384) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00-\001\002\003\004") - (data (i32.const 12416) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005") - (data (i32.const 12456) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12496) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12544) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12592) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 12648) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007") - (data (i32.const 12704) "(\00\00\00\01\00\00\00\01\00\00\00(\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 12760) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000") - (data (i32.const 12784) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 12816) "\b8\02\00\00\01\00\00\00\00\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8#push (; 71 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>#push (; 73 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -5738,7 +5878,7 @@ local.get $3 i32.store offset=12 ) - (func $~lib/string/String#split (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5954,14 +6094,14 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String>#__get (; 73 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__get (; 75 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if i32.const 240 - i32.const 10896 + i32.const 11000 i32.const 93 i32.const 41 call $~lib/builtins/abort @@ -5980,8 +6120,8 @@ if local.get $0 call $~lib/rt/pure/__release - i32.const 10944 - i32.const 10896 + i32.const 11048 + i32.const 11000 i32.const 97 i32.const 39 call $~lib/builtins/abort @@ -5989,7 +6129,7 @@ end local.get $0 ) - (func $~lib/util/number/decimalCount32 (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 76 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 1 i32.const 2 local.get $0 @@ -6037,7 +6177,7 @@ i32.lt_u select ) - (func $~lib/util/number/utoa_simple (; 75 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa_simple (; 77 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) loop $continue|0 local.get $1 @@ -6064,7 +6204,7 @@ br_if $continue|0 end ) - (func $~lib/util/number/itoa32 (; 76 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 78 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -6106,7 +6246,7 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/utoa32 (; 77 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 79 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -6129,7 +6269,7 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/decimalCount64 (; 78 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 80 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) i32.const 10 i32.const 11 i32.const 12 @@ -6182,7 +6322,7 @@ i64.lt_u select ) - (func $~lib/util/number/utoa_simple (; 79 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa_simple (; 81 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) loop $continue|0 local.get $1 @@ -6212,7 +6352,7 @@ br_if $continue|0 end ) - (func $~lib/util/number/utoa64 (; 80 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 82 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -6255,7 +6395,7 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa64 (; 81 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 83 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -6319,7 +6459,7 @@ local.get $3 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/genDigits (; 82 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 84 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i32) (local $9 i64) @@ -6354,7 +6494,7 @@ local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 - i32.const 13860 + i32.const 13964 i32.load local.set $13 loop $continue|0 @@ -6718,7 +6858,7 @@ local.get $6 end ) - (func $~lib/util/number/prettify (; 83 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 85 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 i32.eqz @@ -6965,7 +7105,7 @@ end end ) - (func $~lib/util/number/dtoa_core (; 84 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 86 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i32) (local $4 i64) @@ -7081,7 +7221,7 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 13548 + i32.const 13652 i32.load local.get $3 i32.const 3 @@ -7089,7 +7229,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - i32.const 13772 + i32.const 13876 i32.load local.get $3 i32.const 1 @@ -7253,90 +7393,14 @@ local.get $10 i32.add ) - (func $~lib/string/String#substring (; 85 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - i32.const 0 - local.get $0 - call $~lib/string/String#get:length - local.tee $2 - i32.const 0 - local.get $2 - i32.lt_s - select - local.tee $3 - local.get $1 - i32.const 0 - local.get $1 - i32.const 0 - i32.gt_s - select - local.tee $1 - local.get $2 - local.get $1 - local.get $2 - i32.lt_s - select - local.tee $2 - local.get $3 - local.get $2 - i32.gt_s - select - i32.const 1 - i32.shl - local.tee $1 - local.get $3 - local.get $2 - local.get $3 - local.get $2 - i32.lt_s - select - i32.const 1 - i32.shl - local.tee $3 - i32.sub - local.tee $2 - i32.eqz - if - i32.const 440 - return - end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end - if - local.get $0 - call $~lib/rt/pure/__retain - return - end - local.get $2 - i32.const 1 - call $~lib/rt/tlsf/__alloc - local.tee $1 - local.get $0 - local.get $3 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - call $~lib/rt/pure/__retain - ) - (func $~lib/util/number/dtoa (; 86 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/util/number/dtoa (; 87 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) local.get $0 f64.const 0 f64.eq if - i32.const 12776 + i32.const 12880 return end local.get $0 @@ -7353,7 +7417,7 @@ return end i32.const 5296 - i32.const 12800 + i32.const 12904 local.get $0 f64.const 0 f64.lt @@ -7376,12 +7440,13 @@ return end local.get $1 + i32.const 0 local.get $2 call $~lib/string/String#substring local.get $1 call $~lib/rt/tlsf/__free ) - (func $start:std/string (; 87 ;) (type $FUNCSIG$v) + (func $start:std/string (; 88 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -7574,6 +7639,26 @@ (local $189 i32) (local $190 i32) (local $191 i32) + (local $192 i32) + (local $193 i32) + (local $194 i32) + (local $195 i32) + (local $196 i32) + (local $197 i32) + (local $198 i32) + (local $199 i32) + (local $200 i32) + (local $201 i32) + (local $202 i32) + (local $203 i32) + (local $204 i32) + (local $205 i32) + (local $206 i32) + (local $207 i32) + (local $208 i32) + (local $209 i32) + (local $210 i32) + (local $211 i32) global.get $std/string/str i32.const 24 i32.ne @@ -11599,51 +11684,371 @@ call $~lib/builtins/abort unreachable end - i32.const 440 + global.get $std/string/str i32.const 0 i32.const 2147483647 - call $~lib/string/String#split - local.tee $2 - i32.load offset=12 - i32.const 1 - i32.eq + call $~lib/string/String#substr + local.tee $90 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz if - local.get $2 i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $1 - i32.const 440 - call $~lib/string/String.__eq - local.set $0 - local.get $1 - call $~lib/rt/pure/__release - else + i32.const 72 + i32.const 395 i32.const 0 - local.set $0 + call $~lib/builtins/abort + unreachable end - local.get $0 + global.get $std/string/str + i32.const -1 + i32.const 2147483647 + call $~lib/string/String#substr + local.tee $91 + i32.const 10728 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 399 - i32.const 2 + i32.const 396 + i32.const 0 call $~lib/builtins/abort unreachable end - i32.const 440 - i32.const 440 + global.get $std/string/str + i32.const -5 i32.const 2147483647 - call $~lib/string/String#split - local.set $0 - local.get $2 - call $~lib/rt/pure/__release - local.get $0 - i32.load offset=12 + call $~lib/string/String#substr + local.tee $92 + i32.const 10752 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 397 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 2 + i32.const 7 + call $~lib/string/String#substr + local.tee $93 + i32.const 10896 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 398 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -11 + i32.const -6 + call $~lib/string/String#substr + local.tee $94 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 399 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substr + local.tee $95 + i32.const 10928 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 400 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const -1 + call $~lib/string/String#substr + local.tee $96 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz if i32.const 0 i32.const 72 i32.const 401 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const 100 + call $~lib/string/String#substr + local.tee $97 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 402 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 4 + call $~lib/string/String#substr + local.tee $98 + i32.const 10952 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 403 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substr + local.tee $99 + i32.const 10928 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 404 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const 2147483647 + call $~lib/string/String#substring + local.tee $100 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 406 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -1 + i32.const 2147483647 + call $~lib/string/String#substring + local.tee $101 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 407 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -5 + i32.const 2147483647 + call $~lib/string/String#substring + local.tee $102 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 408 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 2 + i32.const 7 + call $~lib/string/String#substring + local.tee $103 + i32.const 10784 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 409 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -11 + i32.const -6 + call $~lib/string/String#substring + local.tee $104 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 410 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substring + local.tee $105 + i32.const 10976 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 411 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const -1 + call $~lib/string/String#substring + local.tee $106 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 412 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const 100 + call $~lib/string/String#substring + local.tee $107 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 413 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 4 + call $~lib/string/String#substring + local.tee $108 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 414 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substring + local.tee $109 + i32.const 10976 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 415 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 440 + i32.const 0 + i32.const 2147483647 + call $~lib/string/String#split + local.tee $2 + i32.load offset=12 + i32.const 1 + i32.eq + if + local.get $2 + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $1 + i32.const 440 + call $~lib/string/String.__eq + local.set $0 + local.get $1 + call $~lib/rt/pure/__release + else + i32.const 0 + local.set $0 + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 421 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 440 + i32.const 440 + i32.const 2147483647 + call $~lib/string/String#split + local.set $0 + local.get $2 + call $~lib/rt/pure/__release + local.get $0 + i32.load offset=12 + if + i32.const 0 + i32.const 72 + i32.const 423 i32.const 2 call $~lib/builtins/abort unreachable @@ -11678,12 +12083,12 @@ if i32.const 0 i32.const 72 - i32.const 403 + i32.const 425 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 4368 i32.const 2147483647 call $~lib/string/String#split @@ -11699,7 +12104,7 @@ i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.tee $1 - i32.const 11056 + i32.const 11160 call $~lib/string/String.__eq local.set $0 local.get $1 @@ -11713,12 +12118,12 @@ if i32.const 0 i32.const 72 - i32.const 405 + i32.const 427 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 1016 i32.const 2147483647 call $~lib/string/String#split @@ -11777,13 +12182,13 @@ if i32.const 0 i32.const 72 - i32.const 407 + i32.const 429 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11088 - i32.const 11120 + i32.const 11192 + i32.const 11224 i32.const 2147483647 call $~lib/string/String#split local.get $2 @@ -11841,12 +12246,12 @@ if i32.const 0 i32.const 72 - i32.const 409 + i32.const 431 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11144 + i32.const 11248 i32.const 1016 i32.const 2147483647 call $~lib/string/String#split @@ -11920,12 +12325,12 @@ if i32.const 0 i32.const 72 - i32.const 411 + i32.const 433 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11176 + i32.const 11280 i32.const 1016 i32.const 2147483647 call $~lib/string/String#split @@ -11999,12 +12404,12 @@ if i32.const 0 i32.const 72 - i32.const 413 + i32.const 435 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11208 + i32.const 11312 i32.const 1016 i32.const 2147483647 call $~lib/string/String#split @@ -12078,7 +12483,7 @@ if i32.const 0 i32.const 72 - i32.const 415 + i32.const 437 i32.const 2 call $~lib/builtins/abort unreachable @@ -12142,7 +12547,7 @@ if i32.const 0 i32.const 72 - i32.const 417 + i32.const 439 i32.const 2 call $~lib/builtins/abort unreachable @@ -12159,7 +12564,7 @@ if i32.const 0 i32.const 72 - i32.const 419 + i32.const 441 i32.const 2 call $~lib/builtins/abort unreachable @@ -12194,12 +12599,12 @@ if i32.const 0 i32.const 72 - i32.const 421 + i32.const 443 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 1016 i32.const 1 call $~lib/string/String#split @@ -12229,7 +12634,7 @@ if i32.const 0 i32.const 72 - i32.const 423 + i32.const 445 i32.const 2 call $~lib/builtins/abort unreachable @@ -12293,7 +12698,7 @@ if i32.const 0 i32.const 72 - i32.const 425 + i32.const 447 i32.const 2 call $~lib/builtins/abort unreachable @@ -12357,12 +12762,12 @@ if i32.const 0 i32.const 72 - i32.const 427 + i32.const 449 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 1016 i32.const -1 call $~lib/string/String#split @@ -12421,7 +12826,7 @@ if i32.const 0 i32.const 72 - i32.const 429 + i32.const 451 i32.const 2 call $~lib/builtins/abort unreachable @@ -12437,7 +12842,7 @@ if i32.const 0 i32.const 72 - i32.const 432 + i32.const 454 i32.const 0 call $~lib/builtins/abort unreachable @@ -12451,7 +12856,7 @@ if i32.const 0 i32.const 72 - i32.const 433 + i32.const 455 i32.const 0 call $~lib/builtins/abort unreachable @@ -12459,1441 +12864,1441 @@ i32.const 8 call $~lib/util/number/itoa32 local.tee $1 - i32.const 11240 + i32.const 11344 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 434 + i32.const 456 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 12 call $~lib/util/number/itoa32 - local.tee $90 - i32.const 11264 + local.tee $110 + i32.const 11368 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 435 + i32.const 457 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 123 call $~lib/util/number/itoa32 - local.tee $91 + local.tee $111 i32.const 832 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 436 + i32.const 458 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -1000 call $~lib/util/number/itoa32 - local.tee $92 - i32.const 11288 + local.tee $112 + i32.const 11392 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 437 + i32.const 459 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1234 call $~lib/util/number/itoa32 - local.tee $93 - i32.const 11320 + local.tee $113 + i32.const 11424 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 438 + i32.const 460 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 12345 call $~lib/util/number/itoa32 - local.tee $94 - i32.const 11344 + local.tee $114 + i32.const 11448 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 439 + i32.const 461 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 123456 call $~lib/util/number/itoa32 - local.tee $95 - i32.const 11376 + local.tee $115 + i32.const 11480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 440 + i32.const 462 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1111111 call $~lib/util/number/itoa32 - local.tee $96 - i32.const 11408 + local.tee $116 + i32.const 11512 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 441 + i32.const 463 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1234567 call $~lib/util/number/itoa32 - local.tee $97 - i32.const 11440 + local.tee $117 + i32.const 11544 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 442 + i32.const 464 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 12345678 call $~lib/util/number/itoa32 - local.tee $98 - i32.const 11472 + local.tee $118 + i32.const 11576 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 443 + i32.const 465 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 123456789 call $~lib/util/number/itoa32 - local.tee $99 - i32.const 11504 + local.tee $119 + i32.const 11608 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 444 + i32.const 466 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 2147483646 call $~lib/util/number/itoa32 - local.tee $100 - i32.const 11544 + local.tee $120 + i32.const 11648 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 445 + i32.const 467 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 2147483647 call $~lib/util/number/itoa32 - local.tee $101 - i32.const 11584 + local.tee $121 + i32.const 11688 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 446 + i32.const 468 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -2147483648 call $~lib/util/number/itoa32 - local.tee $102 - i32.const 11624 + local.tee $122 + i32.const 11728 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 447 + i32.const 469 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -1 call $~lib/util/number/itoa32 - local.tee $103 - i32.const 11664 + local.tee $123 + i32.const 11768 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 448 + i32.const 470 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 0 call $~lib/util/number/utoa32 - local.tee $104 + local.tee $124 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 450 + i32.const 472 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1000 call $~lib/util/number/utoa32 - local.tee $105 - i32.const 11688 + local.tee $125 + i32.const 11792 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 451 + i32.const 473 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 2147483647 call $~lib/util/number/utoa32 - local.tee $106 - i32.const 11584 + local.tee $126 + i32.const 11688 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 452 + i32.const 474 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -2147483648 call $~lib/util/number/utoa32 - local.tee $107 - i32.const 11712 + local.tee $127 + i32.const 11816 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 453 + i32.const 475 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -1 call $~lib/util/number/utoa32 - local.tee $108 - i32.const 11752 + local.tee $128 + i32.const 11856 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 454 + i32.const 476 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 0 call $~lib/util/number/utoa64 - local.tee $109 + local.tee $129 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 456 + i32.const 478 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 12 call $~lib/util/number/utoa64 - local.tee $110 - i32.const 11264 + local.tee $130 + i32.const 11368 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 457 + i32.const 479 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 123 call $~lib/util/number/utoa64 - local.tee $111 + local.tee $131 i32.const 832 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 458 + i32.const 480 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 1234 call $~lib/util/number/utoa64 - local.tee $112 - i32.const 11320 + local.tee $132 + i32.const 11424 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 459 + i32.const 481 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 12345 call $~lib/util/number/utoa64 - local.tee $113 - i32.const 11344 + local.tee $133 + i32.const 11448 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 460 + i32.const 482 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 123456 call $~lib/util/number/utoa64 - local.tee $114 - i32.const 11376 + local.tee $134 + i32.const 11480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 461 + i32.const 483 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 1234567 call $~lib/util/number/utoa64 - local.tee $115 - i32.const 11440 + local.tee $135 + i32.const 11544 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 462 + i32.const 484 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 99999999 call $~lib/util/number/utoa64 - local.tee $116 - i32.const 11792 + local.tee $136 + i32.const 11896 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 463 + i32.const 485 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 100000000 call $~lib/util/number/utoa64 - local.tee $117 - i32.const 11824 + local.tee $137 + i32.const 11928 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 464 + i32.const 486 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967295 call $~lib/util/number/utoa64 - local.tee $118 - i32.const 11752 + local.tee $138 + i32.const 11856 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 465 + i32.const 487 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967297 call $~lib/util/number/utoa64 - local.tee $119 - i32.const 11864 + local.tee $139 + i32.const 11968 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 466 + i32.const 488 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 68719476735 call $~lib/util/number/utoa64 - local.tee $120 - i32.const 11904 + local.tee $140 + i32.const 12008 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 467 + i32.const 489 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 868719476735 call $~lib/util/number/utoa64 - local.tee $121 - i32.const 11944 + local.tee $141 + i32.const 12048 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 468 + i32.const 490 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 8687194767350 call $~lib/util/number/utoa64 - local.tee $122 - i32.const 11984 + local.tee $142 + i32.const 12088 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 469 + i32.const 491 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 86871947673501 call $~lib/util/number/utoa64 - local.tee $123 - i32.const 12032 + local.tee $143 + i32.const 12136 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 470 + i32.const 492 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 999868719476735 call $~lib/util/number/utoa64 - local.tee $124 - i32.const 12080 + local.tee $144 + i32.const 12184 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 471 + i32.const 493 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 9999868719476735 call $~lib/util/number/utoa64 - local.tee $125 - i32.const 12128 + local.tee $145 + i32.const 12232 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 472 + i32.const 494 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 19999868719476735 call $~lib/util/number/utoa64 - local.tee $126 - i32.const 12176 + local.tee $146 + i32.const 12280 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 473 + i32.const 495 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 129999868719476735 call $~lib/util/number/utoa64 - local.tee $127 - i32.const 12232 + local.tee $147 + i32.const 12336 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 474 + i32.const 496 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 1239999868719476735 call $~lib/util/number/utoa64 - local.tee $128 - i32.const 12288 + local.tee $148 + i32.const 12392 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 475 + i32.const 497 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -1 call $~lib/util/number/utoa64 - local.tee $129 - i32.const 12344 + local.tee $149 + i32.const 12448 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 476 + i32.const 498 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 0 call $~lib/util/number/itoa64 - local.tee $130 + local.tee $150 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 478 + i32.const 500 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -1234 call $~lib/util/number/itoa64 - local.tee $131 - i32.const 12400 + local.tee $151 + i32.const 12504 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 479 + i32.const 501 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967295 call $~lib/util/number/itoa64 - local.tee $132 - i32.const 11752 + local.tee $152 + i32.const 11856 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 480 + i32.const 502 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967297 call $~lib/util/number/itoa64 - local.tee $133 - i32.const 11864 + local.tee $153 + i32.const 11968 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 481 + i32.const 503 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -4294967295 call $~lib/util/number/itoa64 - local.tee $134 - i32.const 12432 + local.tee $154 + i32.const 12536 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 482 + i32.const 504 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 68719476735 call $~lib/util/number/itoa64 - local.tee $135 - i32.const 11904 + local.tee $155 + i32.const 12008 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 483 + i32.const 505 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -68719476735 call $~lib/util/number/itoa64 - local.tee $136 - i32.const 12472 + local.tee $156 + i32.const 12576 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 484 + i32.const 506 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -868719476735 call $~lib/util/number/itoa64 - local.tee $137 - i32.const 12512 + local.tee $157 + i32.const 12616 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 485 + i32.const 507 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -999868719476735 call $~lib/util/number/itoa64 - local.tee $138 - i32.const 12560 + local.tee $158 + i32.const 12664 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 486 + i32.const 508 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -19999868719476735 call $~lib/util/number/itoa64 - local.tee $139 - i32.const 12608 + local.tee $159 + i32.const 12712 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 487 + i32.const 509 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 9223372036854775807 call $~lib/util/number/itoa64 - local.tee $140 - i32.const 12664 + local.tee $160 + i32.const 12768 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 488 + i32.const 510 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -9223372036854775808 call $~lib/util/number/itoa64 - local.tee $141 - i32.const 12720 + local.tee $161 + i32.const 12824 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 489 + i32.const 511 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0 call $~lib/util/number/dtoa - local.tee $142 - i32.const 12776 + local.tee $162 + i32.const 12880 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 492 + i32.const 514 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -0 call $~lib/util/number/dtoa - local.tee $143 - i32.const 12776 + local.tee $163 + i32.const 12880 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 493 + i32.const 515 i32.const 0 call $~lib/builtins/abort unreachable end f64.const nan:0x8000000000000 call $~lib/util/number/dtoa - local.tee $144 + local.tee $164 i32.const 4416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 494 + i32.const 516 i32.const 0 call $~lib/builtins/abort unreachable end f64.const inf call $~lib/util/number/dtoa - local.tee $145 - i32.const 12800 + local.tee $165 + i32.const 12904 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 495 + i32.const 517 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -inf call $~lib/util/number/dtoa - local.tee $146 + local.tee $166 i32.const 5296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 496 + i32.const 518 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 2.220446049250313e-16 call $~lib/util/number/dtoa - local.tee $147 + local.tee $167 i32.const 4624 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 497 + i32.const 519 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -2.220446049250313e-16 call $~lib/util/number/dtoa - local.tee $148 - i32.const 13888 + local.tee $168 + i32.const 13992 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 498 + i32.const 520 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1797693134862315708145274e284 call $~lib/util/number/dtoa - local.tee $149 + local.tee $169 i32.const 4688 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 499 + i32.const 521 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1797693134862315708145274e284 call $~lib/util/number/dtoa - local.tee $150 - i32.const 13952 + local.tee $170 + i32.const 14056 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 500 + i32.const 522 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4185580496821356722454785e274 call $~lib/util/number/dtoa - local.tee $151 - i32.const 14016 + local.tee $171 + i32.const 14120 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 501 + i32.const 523 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 2.2250738585072014e-308 call $~lib/util/number/dtoa - local.tee $152 - i32.const 14080 + local.tee $172 + i32.const 14184 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 502 + i32.const 524 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4.940656e-318 call $~lib/util/number/dtoa - local.tee $153 - i32.const 14144 + local.tee $173 + i32.const 14248 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 505 + i32.const 527 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 9060801153433600 call $~lib/util/number/dtoa - local.tee $154 - i32.const 14192 + local.tee $174 + i32.const 14296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 506 + i32.const 528 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4708356024711512064 call $~lib/util/number/dtoa - local.tee $155 - i32.const 14248 + local.tee $175 + i32.const 14352 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 507 + i32.const 529 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 9409340012568248320 call $~lib/util/number/dtoa - local.tee $156 - i32.const 14312 + local.tee $176 + i32.const 14416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 508 + i32.const 530 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 5e-324 call $~lib/util/number/dtoa - local.tee $157 + local.tee $177 i32.const 4752 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 509 + i32.const 531 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1 call $~lib/util/number/dtoa - local.tee $158 - i32.const 14376 + local.tee $178 + i32.const 14480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 515 + i32.const 537 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.1 call $~lib/util/number/dtoa - local.tee $159 + local.tee $179 i32.const 2424 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 516 + i32.const 538 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1 call $~lib/util/number/dtoa - local.tee $160 - i32.const 14400 + local.tee $180 + i32.const 14504 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 517 + i32.const 539 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -0.1 call $~lib/util/number/dtoa - local.tee $161 - i32.const 14424 + local.tee $181 + i32.const 14528 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 518 + i32.const 540 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e6 call $~lib/util/number/dtoa - local.tee $162 - i32.const 14448 + local.tee $182 + i32.const 14552 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 520 + i32.const 542 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-06 call $~lib/util/number/dtoa - local.tee $163 - i32.const 14488 + local.tee $183 + i32.const 14592 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 521 + i32.const 543 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e6 call $~lib/util/number/dtoa - local.tee $164 - i32.const 14520 + local.tee $184 + i32.const 14624 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 522 + i32.const 544 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e-06 call $~lib/util/number/dtoa - local.tee $165 - i32.const 14560 + local.tee $185 + i32.const 14664 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 523 + i32.const 545 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e7 call $~lib/util/number/dtoa - local.tee $166 - i32.const 14600 + local.tee $186 + i32.const 14704 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 524 + i32.const 546 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-07 call $~lib/util/number/dtoa - local.tee $167 - i32.const 14640 + local.tee $187 + i32.const 14744 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 525 + i32.const 547 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.e+308 call $~lib/util/number/dtoa - local.tee $168 + local.tee $188 i32.const 2600 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 527 + i32.const 549 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1.e+308 call $~lib/util/number/dtoa - local.tee $169 - i32.const 14664 + local.tee $189 + i32.const 14768 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 528 + i32.const 550 i32.const 0 call $~lib/builtins/abort unreachable end f64.const inf call $~lib/util/number/dtoa - local.tee $170 - i32.const 12800 + local.tee $190 + i32.const 12904 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 529 + i32.const 551 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -inf call $~lib/util/number/dtoa - local.tee $171 + local.tee $191 i32.const 5296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 530 + i32.const 552 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-308 call $~lib/util/number/dtoa - local.tee $172 - i32.const 14696 + local.tee $192 + i32.const 14800 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 531 + i32.const 553 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e-308 call $~lib/util/number/dtoa - local.tee $173 - i32.const 14728 + local.tee $193 + i32.const 14832 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 532 + i32.const 554 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-323 call $~lib/util/number/dtoa - local.tee $174 - i32.const 14760 + local.tee $194 + i32.const 14864 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 533 + i32.const 555 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e-323 call $~lib/util/number/dtoa - local.tee $175 - i32.const 14792 + local.tee $195 + i32.const 14896 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 534 + i32.const 556 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0 call $~lib/util/number/dtoa - local.tee $176 - i32.const 12776 + local.tee $196 + i32.const 12880 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 535 + i32.const 557 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4294967272 call $~lib/util/number/dtoa - local.tee $177 - i32.const 14824 + local.tee $197 + i32.const 14928 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 537 + i32.const 559 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.2312145673456234e-08 call $~lib/util/number/dtoa - local.tee $178 - i32.const 14864 + local.tee $198 + i32.const 14968 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 538 + i32.const 560 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 555555555.5555556 call $~lib/util/number/dtoa - local.tee $179 - i32.const 14928 + local.tee $199 + i32.const 15032 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 540 + i32.const 562 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.9999999999999999 call $~lib/util/number/dtoa - local.tee $180 - i32.const 14984 + local.tee $200 + i32.const 15088 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 541 + i32.const 563 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1 call $~lib/util/number/dtoa - local.tee $181 - i32.const 14376 + local.tee $201 + i32.const 14480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 542 + i32.const 564 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 12.34 call $~lib/util/number/dtoa - local.tee $182 - i32.const 15040 + local.tee $202 + i32.const 15144 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 543 + i32.const 565 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.3333333333333333 call $~lib/util/number/dtoa - local.tee $183 - i32.const 15072 + local.tee $203 + i32.const 15176 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 545 + i32.const 567 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1234e17 call $~lib/util/number/dtoa - local.tee $184 - i32.const 15128 + local.tee $204 + i32.const 15232 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 546 + i32.const 568 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1234e18 call $~lib/util/number/dtoa - local.tee $185 - i32.const 15192 + local.tee $205 + i32.const 15296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 547 + i32.const 569 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 2.71828 call $~lib/util/number/dtoa - local.tee $186 - i32.const 15232 + local.tee $206 + i32.const 15336 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 548 + i32.const 570 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.0271828 call $~lib/util/number/dtoa - local.tee $187 - i32.const 15264 + local.tee $207 + i32.const 15368 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 549 + i32.const 571 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 271.828 call $~lib/util/number/dtoa - local.tee $188 - i32.const 15304 + local.tee $208 + i32.const 15408 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 550 + i32.const 572 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.1e+128 call $~lib/util/number/dtoa - local.tee $189 - i32.const 15336 + local.tee $209 + i32.const 15440 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 551 + i32.const 573 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.1e-64 call $~lib/util/number/dtoa - local.tee $190 - i32.const 15368 + local.tee $210 + i32.const 15472 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 552 + i32.const 574 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.000035689 call $~lib/util/number/dtoa - local.tee $191 - i32.const 15400 + local.tee $211 + i32.const 15504 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 553 + i32.const 575 i32.const 0 call $~lib/builtins/abort unreachable @@ -14072,12 +14477,6 @@ call $~lib/rt/pure/__release local.get $89 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release - local.get $1 - call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release local.get $90 call $~lib/rt/pure/__release local.get $91 @@ -14118,6 +14517,12 @@ call $~lib/rt/pure/__release local.get $109 call $~lib/rt/pure/__release + local.get $2 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release local.get $110 call $~lib/rt/pure/__release local.get $111 @@ -14282,12 +14687,52 @@ call $~lib/rt/pure/__release local.get $191 call $~lib/rt/pure/__release + local.get $192 + call $~lib/rt/pure/__release + local.get $193 + call $~lib/rt/pure/__release + local.get $194 + call $~lib/rt/pure/__release + local.get $195 + call $~lib/rt/pure/__release + local.get $196 + call $~lib/rt/pure/__release + local.get $197 + call $~lib/rt/pure/__release + local.get $198 + call $~lib/rt/pure/__release + local.get $199 + call $~lib/rt/pure/__release + local.get $200 + call $~lib/rt/pure/__release + local.get $201 + call $~lib/rt/pure/__release + local.get $202 + call $~lib/rt/pure/__release + local.get $203 + call $~lib/rt/pure/__release + local.get $204 + call $~lib/rt/pure/__release + local.get $205 + call $~lib/rt/pure/__release + local.get $206 + call $~lib/rt/pure/__release + local.get $207 + call $~lib/rt/pure/__release + local.get $208 + call $~lib/rt/pure/__release + local.get $209 + call $~lib/rt/pure/__release + local.get $210 + call $~lib/rt/pure/__release + local.get $211 + call $~lib/rt/pure/__release ) - (func $std/string/getString (; 88 ;) (type $FUNCSIG$i) (result i32) + (func $std/string/getString (; 89 ;) (type $FUNCSIG$i) (result i32) global.get $std/string/str call $~lib/rt/pure/__retain ) - (func $start (; 89 ;) (type $FUNCSIG$v) + (func $start (; 90 ;) (type $FUNCSIG$v) global.get $~lib/started if return @@ -14297,9 +14742,9 @@ end call $start:std/string ) - (func $~lib/rt/pure/__visit (; 90 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 91 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - i32.const 15500 + i32.const 15604 i32.lt_u if return @@ -14407,7 +14852,7 @@ unreachable end ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 91 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 92 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -14440,7 +14885,7 @@ end end ) - (func $~lib/rt/__visit_members (; 92 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 93 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $block$4$break block $switch$1$default block $switch$1$case$6 @@ -14469,7 +14914,7 @@ call $~lib/rt/pure/__visit end ) - (func $null (; 93 ;) (type $FUNCSIG$v) + (func $null (; 94 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/compiler/std/string.ts b/tests/compiler/std/string.ts index d1e7b6123f..341b23b023 100644 --- a/tests/compiler/std/string.ts +++ b/tests/compiler/std/string.ts @@ -392,6 +392,28 @@ assert(str.slice(-11, -6) == "defgh"); assert(str.slice(4, 3) == ""); assert(str.slice(0, -1) == "abcdefghijklm"); +assert(str.substr(0) == "abcdefghijklmn"); +assert(str.substr(-1) == "n"); +assert(str.substr(-5) == "jklmn"); +assert(str.substr(2, 7) == "cdefghi"); +assert(str.substr(-11, -6) == ""); +assert(str.substr(4, 3) == "efg"); +assert(str.substr(0, -1) == ""); +assert(str.substr(0, 100) == "abcdefghijklmn"); +assert(str.substr(4, 4) == "efgh"); +assert(str.substr(4, 3) == "efg"); + +assert(str.substring(0) == "abcdefghijklmn"); +assert(str.substring(-1) == "abcdefghijklmn"); +assert(str.substring(-5) == "abcdefghijklmn"); +assert(str.substring(2, 7) == "cdefg"); +assert(str.substring(-11, -6) == ""); +assert(str.substring(4, 3) == "d"); +assert(str.substring(0, -1) == ""); +assert(str.substring(0, 100) == "abcdefghijklmn"); +assert(str.substring(4, 4) == ""); +assert(str.substring(4, 3) == "d"); + { let sa: string[]; diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 219ac83118..cd12e39411 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -274,99 +274,103 @@ (data (i32.const 10768) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00c\00d\00e\00f\00g\00") (data (i32.const 10800) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00d\00e\00f\00g\00h\00") (data (i32.const 10832) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00") - (data (i32.const 10880) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 10928) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00") - (data (i32.const 11040) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00a\00,\00b\00,\00c\00") - (data (i32.const 11072) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00a\00,\00 \00b\00,\00 \00c\00") - (data (i32.const 11104) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00,\00 \00") - (data (i32.const 11128) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00a\00,\00b\00,\00,\00c\00") - (data (i32.const 11160) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00,\00a\00,\00b\00,\00c\00") - (data (i32.const 11192) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00a\00,\00b\00,\00c\00,\00") - (data (i32.const 11224) "\90\01\00\00\01\00\00\00\00\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 11640) "\10\00\00\00\01\00\00\00\06\00\00\00\10\00\00\00\e8+\00\00\e8+\00\00\90\01\00\00d\00\00\00") - (data (i32.const 11672) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\008\00") - (data (i32.const 11696) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\001\002\00") - (data (i32.const 11720) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00-\001\000\000\000\00") - (data (i32.const 11752) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\001\002\003\004\00") - (data (i32.const 11776) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\001\002\003\004\005\00") - (data (i32.const 11808) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\001\002\003\004\005\006\00") - (data (i32.const 11840) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\001\001\001\001\001\001\00") - (data (i32.const 11872) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\002\003\004\005\006\007\00") - (data (i32.const 11904) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\001\002\003\004\005\006\007\008\00") - (data (i32.const 11936) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\002\003\004\005\006\007\008\009\00") - (data (i32.const 11976) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006\00") - (data (i32.const 12016) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007\00") - (data (i32.const 12056) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 12096) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00-\001\00") - (data (i32.const 12120) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\001\000\000\000\00") - (data (i32.const 12144) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 12184) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005\00") - (data (i32.const 12224) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\009\009\009\009\009\009\009\009\00") - (data (i32.const 12256) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000\00") - (data (i32.const 12296) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\007\00") - (data (i32.const 12336) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12376) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12416) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\008\006\008\007\001\009\004\007\006\007\003\005\000\00") - (data (i32.const 12464) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\008\006\008\007\001\009\004\007\006\007\003\005\000\001\00") - (data (i32.const 12512) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12560) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12608) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12664) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\001\002\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12720) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\001\002\003\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12776) "(\00\00\00\01\00\00\00\01\00\00\00(\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 12832) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00-\001\002\003\004\00") - (data (i32.const 12864) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005\00") - (data (i32.const 12904) "\18\00\00\00\01\00\00\00\01\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12944) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 12992) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 13040) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 13096) "&\00\00\00\01\00\00\00\01\00\00\00&\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 13152) "(\00\00\00\01\00\00\00\01\00\00\00(\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 13208) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\000\00.\000\00") - (data (i32.const 13232) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 13264) "\b8\02\00\00\01\00\00\00\00\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8#push (; 78 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#push (; 80 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8638,7 +8823,7 @@ call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/string/String#split (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split (; 81 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -8945,11 +9130,11 @@ call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array<~lib/string/String>#get:length (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#get:length (; 82 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 81 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 83 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -8959,7 +9144,7 @@ i32.load call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String>#__get (; 82 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__get (; 84 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 local.get $0 @@ -8967,7 +9152,7 @@ i32.ge_u if i32.const 240 - i32.const 10896 + i32.const 11000 i32.const 93 i32.const 41 call $~lib/builtins/abort @@ -8982,8 +9167,8 @@ if local.get $2 call $~lib/rt/pure/__release - i32.const 10944 - i32.const 10896 + i32.const 11048 + i32.const 11000 i32.const 97 i32.const 39 call $~lib/builtins/abort @@ -8991,7 +9176,7 @@ end local.get $2 ) - (func $~lib/util/number/decimalCount32 (; 83 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 85 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 100000 @@ -9057,7 +9242,7 @@ end unreachable ) - (func $~lib/util/number/utoa32_lut (; 84 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa32_lut (; 86 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -9065,7 +9250,7 @@ (local $7 i32) (local $8 i64) (local $9 i64) - i32.const 11656 + i32.const 11760 i32.load offset=4 local.set $3 block $break|0 @@ -9199,7 +9384,7 @@ i32.store16 end ) - (func $~lib/util/number/itoa32 (; 85 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 87 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9254,7 +9439,7 @@ local.get $3 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/utoa32 (; 86 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 88 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9289,7 +9474,7 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/decimalCount64 (; 87 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 89 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) local.get $0 i64.const 1000000000000000 @@ -9362,7 +9547,7 @@ end unreachable ) - (func $~lib/util/number/utoa64_lut (; 88 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa64_lut (; 90 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i64) (local $5 i32) @@ -9374,7 +9559,7 @@ (local $11 i32) (local $12 i64) (local $13 i64) - i32.const 11656 + i32.const 11760 i32.load offset=4 local.set $3 block $break|0 @@ -9489,7 +9674,7 @@ local.get $2 call $~lib/util/number/utoa32_lut ) - (func $~lib/util/number/utoa64 (; 89 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 91 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9556,7 +9741,7 @@ local.get $1 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa64 (; 90 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 92 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9645,7 +9830,7 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__unchecked_get (; 91 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__unchecked_get (; 93 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 @@ -9654,7 +9839,7 @@ i32.add i64.load ) - (func $~lib/array/Array#__unchecked_get (; 92 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 94 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -9663,7 +9848,7 @@ i32.add i32.load16_s ) - (func $~lib/util/number/genDigits (; 93 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 95 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i64) (local $9 i64) @@ -9718,7 +9903,7 @@ local.set $14 local.get $6 local.set $15 - i32.const 14304 + i32.const 14408 i32.load offset=4 local.set $16 block $break|0 @@ -10165,7 +10350,7 @@ end unreachable ) - (func $~lib/util/number/prettify (; 94 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 96 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -10484,7 +10669,7 @@ end unreachable ) - (func $~lib/util/number/dtoa_core (; 95 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 97 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10649,11 +10834,11 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 13992 + i32.const 14096 local.get $14 call $~lib/array/Array#__unchecked_get global.set $~lib/util/number/_frc_pow - i32.const 14216 + i32.const 14320 local.get $14 call $~lib/array/Array#__unchecked_get global.set $~lib/util/number/_exp_pow @@ -10906,180 +11091,73 @@ local.get $2 i32.add ) - (func $~lib/string/String#substring (; 96 ;) (type $FUNCSIG$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.get $0 - call $~lib/string/String#get:length - local.set $3 - local.get $1 - local.tee $4 - i32.const 0 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - local.set $6 - local.get $2 - local.tee $4 - i32.const 0 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - local.set $7 - local.get $6 - local.tee $4 - local.get $7 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - i32.const 1 - i32.shl - local.set $8 - local.get $6 - local.tee $4 - local.get $7 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - i32.const 1 - i32.shl - local.set $9 - local.get $9 - local.get $8 - i32.sub - local.set $3 - local.get $3 - i32.eqz - if - i32.const 440 - call $~lib/rt/pure/__retain - return - end - local.get $8 - i32.eqz - if (result i32) - local.get $9 - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - i32.eq - else - i32.const 0 - end - if - local.get $0 - call $~lib/rt/pure/__retain - return - end - local.get $3 - i32.const 1 - call $~lib/rt/tlsf/__alloc - local.set $10 - local.get $10 - local.get $0 - local.get $8 - i32.add - local.get $3 - call $~lib/memory/memory.copy - local.get $10 - call $~lib/rt/pure/__retain - ) - (func $~lib/util/number/dtoa (; 97 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - f64.const 0 - f64.eq - if - i32.const 13224 - call $~lib/rt/pure/__retain - return - end - local.get $0 - local.get $0 - f64.sub - f64.const 0 - f64.eq - i32.eqz - if - local.get $0 - local.get $0 - f64.ne - if - i32.const 4416 - call $~lib/rt/pure/__retain - return - end - i32.const 5296 - i32.const 13248 - local.get $0 - f64.const 0 - f64.lt - select - call $~lib/rt/pure/__retain - return - end - i32.const 28 - i32.const 1 - i32.shl - i32.const 1 - call $~lib/rt/tlsf/__alloc - local.set $1 - local.get $1 - local.get $0 - call $~lib/util/number/dtoa_core - local.set $2 - local.get $2 - i32.const 28 - i32.eq - if - local.get $1 - call $~lib/rt/pure/__retain - return - end - local.get $1 - i32.const 0 - local.get $2 - call $~lib/string/String#substring - local.set $3 - local.get $1 - call $~lib/rt/tlsf/__free - local.get $3 - ) - (func $start:std/string (; 98 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) + (func $~lib/util/number/dtoa (; 98 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + f64.const 0 + f64.eq + if + i32.const 13328 + call $~lib/rt/pure/__retain + return + end + local.get $0 + local.get $0 + f64.sub + f64.const 0 + f64.eq + i32.eqz + if + local.get $0 + local.get $0 + f64.ne + if + i32.const 4416 + call $~lib/rt/pure/__retain + return + end + i32.const 5296 + i32.const 13352 + local.get $0 + f64.const 0 + f64.lt + select + call $~lib/rt/pure/__retain + return + end + i32.const 28 + i32.const 1 + i32.shl + i32.const 1 + call $~lib/rt/tlsf/__alloc + local.set $1 + local.get $1 + local.get $0 + call $~lib/util/number/dtoa_core + local.set $2 + local.get $2 + i32.const 28 + i32.eq + if + local.get $1 + call $~lib/rt/pure/__retain + return + end + local.get $1 + i32.const 0 + local.get $2 + call $~lib/string/String#substring + local.set $3 + local.get $1 + call $~lib/rt/tlsf/__free + local.get $3 + ) + (func $start:std/string (; 99 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -11269,6 +11347,26 @@ (local $189 i32) (local $190 i32) (local $191 i32) + (local $192 i32) + (local $193 i32) + (local $194 i32) + (local $195 i32) + (local $196 i32) + (local $197 i32) + (local $198 i32) + (local $199 i32) + (local $200 i32) + (local $201 i32) + (local $202 i32) + (local $203 i32) + (local $204 i32) + (local $205 i32) + (local $206 i32) + (local $207 i32) + (local $208 i32) + (local $209 i32) + (local $210 i32) + (local $211 i32) global.get $std/string/str i32.const 24 i32.eq @@ -15538,130 +15636,450 @@ call $~lib/builtins/abort unreachable end + global.get $std/string/str i32.const 0 - local.set $87 - i32.const 440 - i32.const 0 - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#split - local.set $88 - local.get $87 - call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 - call $~lib/array/Array<~lib/string/String>#get:length - i32.const 1 - i32.eq - if (result i32) - local.get $87 + i32.const 2147483647 + call $~lib/string/String#substr + local.tee $87 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 - i32.const 440 - call $~lib/string/String.__eq - local.set $89 - local.get $88 - call $~lib/rt/pure/__release - local.get $89 - else + i32.const 72 + i32.const 395 i32.const 0 + call $~lib/builtins/abort + unreachable end - i32.const 0 - i32.ne + global.get $std/string/str + i32.const -1 + i32.const 2147483647 + call $~lib/string/String#substr + local.tee $88 + i32.const 10728 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 399 - i32.const 2 + i32.const 396 + i32.const 0 call $~lib/builtins/abort unreachable end - i32.const 440 - i32.const 440 - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#split - local.set $89 - local.get $87 - call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 - call $~lib/array/Array<~lib/string/String>#get:length - i32.const 0 - i32.eq + global.get $std/string/str + i32.const -5 + i32.const 2147483647 + call $~lib/string/String#substr + local.tee $89 + i32.const 10752 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 401 - i32.const 2 + i32.const 397 + i32.const 0 call $~lib/builtins/abort unreachable end - i32.const 440 - i32.const 1016 - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#split - local.set $88 - local.get $87 - call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 - call $~lib/array/Array<~lib/string/String>#get:length - i32.const 1 - i32.eq - if (result i32) - local.get $87 + global.get $std/string/str + i32.const 2 + i32.const 7 + call $~lib/string/String#substr + local.tee $90 + i32.const 10896 + call $~lib/string/String.__eq + i32.eqz + if i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 - i32.const 440 - call $~lib/string/String.__eq - local.set $89 - local.get $88 - call $~lib/rt/pure/__release - local.get $89 - else + i32.const 72 + i32.const 398 i32.const 0 + call $~lib/builtins/abort + unreachable end - i32.const 0 - i32.ne + global.get $std/string/str + i32.const -11 + i32.const -6 + call $~lib/string/String#substr + local.tee $91 + i32.const 440 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 403 - i32.const 2 + i32.const 399 + i32.const 0 call $~lib/builtins/abort unreachable end - i32.const 11056 - i32.const 4368 - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#split - local.set $89 - local.get $87 - call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substr + local.tee $92 + i32.const 10928 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 400 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const -1 + call $~lib/string/String#substr + local.tee $93 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 401 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const 100 + call $~lib/string/String#substr + local.tee $94 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 402 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 4 + call $~lib/string/String#substr + local.tee $95 + i32.const 10952 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 403 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substr + local.tee $96 + i32.const 10928 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 404 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const 2147483647 + call $~lib/string/String#substring + local.tee $97 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 406 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -1 + i32.const 2147483647 + call $~lib/string/String#substring + local.tee $98 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 407 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -5 + i32.const 2147483647 + call $~lib/string/String#substring + local.tee $99 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 408 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 2 + i32.const 7 + call $~lib/string/String#substring + local.tee $100 + i32.const 10784 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 409 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const -11 + i32.const -6 + call $~lib/string/String#substring + local.tee $101 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 410 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substring + local.tee $102 + i32.const 10976 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 411 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const -1 + call $~lib/string/String#substring + local.tee $103 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 412 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 0 + i32.const 100 + call $~lib/string/String#substring + local.tee $104 + i32.const 10680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 413 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 4 + call $~lib/string/String#substring + local.tee $105 + i32.const 440 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 414 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + global.get $std/string/str + i32.const 4 + i32.const 3 + call $~lib/string/String#substring + local.tee $106 + i32.const 10976 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 415 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $107 + i32.const 440 + i32.const 0 + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#split + local.set $108 + local.get $107 + call $~lib/rt/pure/__release + local.get $108 + local.set $107 + local.get $107 + call $~lib/array/Array<~lib/string/String>#get:length + i32.const 1 + i32.eq + if (result i32) + local.get $107 + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $108 + i32.const 440 + call $~lib/string/String.__eq + local.set $109 + local.get $108 + call $~lib/rt/pure/__release + local.get $109 + else + i32.const 0 + end + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 421 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 440 + i32.const 440 + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#split + local.set $109 + local.get $107 + call $~lib/rt/pure/__release + local.get $109 + local.set $107 + local.get $107 + call $~lib/array/Array<~lib/string/String>#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 423 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 440 + i32.const 1016 + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#split + local.set $108 + local.get $107 + call $~lib/rt/pure/__release + local.get $108 + local.set $107 + local.get $107 + call $~lib/array/Array<~lib/string/String>#get:length + i32.const 1 + i32.eq + if (result i32) + local.get $107 + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $108 + i32.const 440 + call $~lib/string/String.__eq + local.set $109 + local.get $108 + call $~lib/rt/pure/__release + local.get $109 + else + i32.const 0 + end + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 425 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 11160 + i32.const 4368 + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#split + local.set $109 + local.get $107 + call $~lib/rt/pure/__release + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 - i32.const 11056 + local.tee $109 + i32.const 11160 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -15671,67 +16089,67 @@ if i32.const 0 i32.const 72 - i32.const 405 + i32.const 427 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 1016 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.set $88 - local.get $87 + local.set $108 + local.get $107 call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 + local.get $108 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 480 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 9440 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 10200 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end @@ -15741,67 +16159,67 @@ if i32.const 0 i32.const 72 - i32.const 407 + i32.const 429 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11088 - i32.const 11120 + i32.const 11192 + i32.const 11224 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.set $89 - local.get $87 + local.set $109 + local.get $107 call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 480 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 9440 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 10200 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -15811,83 +16229,83 @@ if i32.const 0 i32.const 72 - i32.const 409 + i32.const 431 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11144 + i32.const 11248 i32.const 1016 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.set $88 - local.get $87 + local.set $108 + local.get $107 call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 + local.get $108 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 4 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 480 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 9440 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 440 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 3 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 10200 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end @@ -15897,83 +16315,83 @@ if i32.const 0 i32.const 72 - i32.const 411 + i32.const 433 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11176 + i32.const 11280 i32.const 1016 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.set $89 - local.get $87 + local.set $109 + local.get $107 call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 4 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 440 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 480 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 9440 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 3 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 10200 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -15983,83 +16401,83 @@ if i32.const 0 i32.const 72 - i32.const 413 + i32.const 435 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11208 + i32.const 11312 i32.const 1016 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.set $88 - local.get $87 + local.set $108 + local.get $107 call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 + local.get $108 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 4 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 480 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 9440 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 10200 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 3 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 440 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end @@ -16069,7 +16487,7 @@ if i32.const 0 i32.const 72 - i32.const 415 + i32.const 437 i32.const 2 call $~lib/builtins/abort unreachable @@ -16078,58 +16496,58 @@ i32.const 440 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.set $89 - local.get $87 + local.set $109 + local.get $107 call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 480 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 9440 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 10200 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -16139,7 +16557,7 @@ if i32.const 0 i32.const 72 - i32.const 417 + i32.const 439 i32.const 2 call $~lib/builtins/abort unreachable @@ -16148,12 +16566,12 @@ i32.const 440 i32.const 0 call $~lib/string/String#split - local.set $88 - local.get $87 + local.set $108 + local.get $107 call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 + local.get $108 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 0 i32.eq @@ -16161,7 +16579,7 @@ if i32.const 0 i32.const 72 - i32.const 419 + i32.const 441 i32.const 2 call $~lib/builtins/abort unreachable @@ -16170,26 +16588,26 @@ i32.const 440 i32.const 1 call $~lib/string/String#split - local.set $89 - local.get $87 + local.set $109 + local.get $107 call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 480 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -16199,35 +16617,35 @@ if i32.const 0 i32.const 72 - i32.const 421 + i32.const 443 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 1016 i32.const 1 call $~lib/string/String#split - local.set $88 - local.get $87 + local.set $108 + local.get $107 call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 + local.get $108 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 1 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 480 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end @@ -16237,7 +16655,7 @@ if i32.const 0 i32.const 72 - i32.const 423 + i32.const 445 i32.const 2 call $~lib/builtins/abort unreachable @@ -16246,58 +16664,58 @@ i32.const 440 i32.const 4 call $~lib/string/String#split - local.set $89 - local.get $87 + local.set $109 + local.get $107 call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 480 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 9440 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 10200 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -16307,7 +16725,7 @@ if i32.const 0 i32.const 72 - i32.const 425 + i32.const 447 i32.const 2 call $~lib/builtins/abort unreachable @@ -16316,58 +16734,58 @@ i32.const 440 i32.const -1 call $~lib/string/String#split - local.set $88 - local.get $87 + local.set $108 + local.get $107 call $~lib/rt/pure/__release - local.get $88 - local.set $87 - local.get $87 + local.get $108 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 480 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 9440 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $88 + local.tee $108 i32.const 10200 call $~lib/string/String.__eq - local.set $89 - local.get $88 + local.set $109 + local.get $108 call $~lib/rt/pure/__release - local.get $89 + local.get $109 else i32.const 0 end @@ -16377,67 +16795,67 @@ if i32.const 0 i32.const 72 - i32.const 427 + i32.const 449 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 11056 + i32.const 11160 i32.const 1016 i32.const -1 call $~lib/string/String#split - local.set $89 - local.get $87 + local.set $109 + local.get $107 call $~lib/rt/pure/__release - local.get $89 - local.set $87 - local.get $87 + local.get $109 + local.set $107 + local.get $107 call $~lib/array/Array<~lib/string/String>#get:length i32.const 3 i32.eq if (result i32) - local.get $87 + local.get $107 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 480 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 9440 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end i32.const 0 i32.ne if (result i32) - local.get $87 + local.get $107 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $89 + local.tee $109 i32.const 10200 call $~lib/string/String.__eq - local.set $88 - local.get $89 + local.set $108 + local.get $109 call $~lib/rt/pure/__release - local.get $88 + local.get $108 else i32.const 0 end @@ -16447,1479 +16865,1479 @@ if i32.const 0 i32.const 72 - i32.const 429 + i32.const 451 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $87 + local.get $107 call $~lib/rt/pure/__release i32.const 0 call $~lib/util/number/itoa32 - local.tee $87 + local.tee $107 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 432 + i32.const 454 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1 call $~lib/util/number/itoa32 - local.tee $89 + local.tee $109 i32.const 1312 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 433 + i32.const 455 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 8 call $~lib/util/number/itoa32 - local.tee $88 - i32.const 11688 + local.tee $108 + i32.const 11792 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 434 + i32.const 456 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 12 call $~lib/util/number/itoa32 - local.tee $90 - i32.const 11712 + local.tee $110 + i32.const 11816 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 435 + i32.const 457 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 123 call $~lib/util/number/itoa32 - local.tee $91 + local.tee $111 i32.const 832 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 436 + i32.const 458 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -1000 call $~lib/util/number/itoa32 - local.tee $92 - i32.const 11736 + local.tee $112 + i32.const 11840 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 437 + i32.const 459 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1234 call $~lib/util/number/itoa32 - local.tee $93 - i32.const 11768 + local.tee $113 + i32.const 11872 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 438 + i32.const 460 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 12345 call $~lib/util/number/itoa32 - local.tee $94 - i32.const 11792 + local.tee $114 + i32.const 11896 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 439 + i32.const 461 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 123456 call $~lib/util/number/itoa32 - local.tee $95 - i32.const 11824 + local.tee $115 + i32.const 11928 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 440 + i32.const 462 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1111111 call $~lib/util/number/itoa32 - local.tee $96 - i32.const 11856 + local.tee $116 + i32.const 11960 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 441 + i32.const 463 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1234567 call $~lib/util/number/itoa32 - local.tee $97 - i32.const 11888 + local.tee $117 + i32.const 11992 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 442 + i32.const 464 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 12345678 call $~lib/util/number/itoa32 - local.tee $98 - i32.const 11920 + local.tee $118 + i32.const 12024 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 443 + i32.const 465 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 123456789 call $~lib/util/number/itoa32 - local.tee $99 - i32.const 11952 + local.tee $119 + i32.const 12056 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 444 + i32.const 466 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 2147483646 call $~lib/util/number/itoa32 - local.tee $100 - i32.const 11992 + local.tee $120 + i32.const 12096 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 445 + i32.const 467 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 2147483647 call $~lib/util/number/itoa32 - local.tee $101 - i32.const 12032 + local.tee $121 + i32.const 12136 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 446 + i32.const 468 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -2147483648 call $~lib/util/number/itoa32 - local.tee $102 - i32.const 12072 + local.tee $122 + i32.const 12176 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 447 + i32.const 469 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -1 call $~lib/util/number/itoa32 - local.tee $103 - i32.const 12112 + local.tee $123 + i32.const 12216 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 448 + i32.const 470 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 0 call $~lib/util/number/utoa32 - local.tee $104 + local.tee $124 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 450 + i32.const 472 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 1000 call $~lib/util/number/utoa32 - local.tee $105 - i32.const 12136 + local.tee $125 + i32.const 12240 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 451 + i32.const 473 i32.const 0 call $~lib/builtins/abort unreachable end i32.const 2147483647 call $~lib/util/number/utoa32 - local.tee $106 - i32.const 12032 + local.tee $126 + i32.const 12136 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 452 + i32.const 474 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -2147483648 call $~lib/util/number/utoa32 - local.tee $107 - i32.const 12160 + local.tee $127 + i32.const 12264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 453 + i32.const 475 i32.const 0 call $~lib/builtins/abort unreachable end i32.const -1 call $~lib/util/number/utoa32 - local.tee $108 - i32.const 12200 + local.tee $128 + i32.const 12304 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 454 + i32.const 476 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 0 call $~lib/util/number/utoa64 - local.tee $109 + local.tee $129 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 456 + i32.const 478 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 12 call $~lib/util/number/utoa64 - local.tee $110 - i32.const 11712 + local.tee $130 + i32.const 11816 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 457 + i32.const 479 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 123 call $~lib/util/number/utoa64 - local.tee $111 + local.tee $131 i32.const 832 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 458 + i32.const 480 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 1234 call $~lib/util/number/utoa64 - local.tee $112 - i32.const 11768 + local.tee $132 + i32.const 11872 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 459 + i32.const 481 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 12345 call $~lib/util/number/utoa64 - local.tee $113 - i32.const 11792 + local.tee $133 + i32.const 11896 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 460 + i32.const 482 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 123456 call $~lib/util/number/utoa64 - local.tee $114 - i32.const 11824 + local.tee $134 + i32.const 11928 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 461 + i32.const 483 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 1234567 call $~lib/util/number/utoa64 - local.tee $115 - i32.const 11888 + local.tee $135 + i32.const 11992 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 462 + i32.const 484 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 99999999 call $~lib/util/number/utoa64 - local.tee $116 - i32.const 12240 + local.tee $136 + i32.const 12344 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 463 + i32.const 485 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 100000000 call $~lib/util/number/utoa64 - local.tee $117 - i32.const 12272 + local.tee $137 + i32.const 12376 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 464 + i32.const 486 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967295 call $~lib/util/number/utoa64 - local.tee $118 - i32.const 12200 + local.tee $138 + i32.const 12304 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 465 + i32.const 487 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967297 call $~lib/util/number/utoa64 - local.tee $119 - i32.const 12312 + local.tee $139 + i32.const 12416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 466 + i32.const 488 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 68719476735 call $~lib/util/number/utoa64 - local.tee $120 - i32.const 12352 + local.tee $140 + i32.const 12456 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 467 + i32.const 489 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 868719476735 call $~lib/util/number/utoa64 - local.tee $121 - i32.const 12392 + local.tee $141 + i32.const 12496 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 468 + i32.const 490 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 8687194767350 call $~lib/util/number/utoa64 - local.tee $122 - i32.const 12432 + local.tee $142 + i32.const 12536 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 469 + i32.const 491 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 86871947673501 call $~lib/util/number/utoa64 - local.tee $123 - i32.const 12480 + local.tee $143 + i32.const 12584 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 470 + i32.const 492 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 999868719476735 call $~lib/util/number/utoa64 - local.tee $124 - i32.const 12528 + local.tee $144 + i32.const 12632 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 471 + i32.const 493 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 9999868719476735 call $~lib/util/number/utoa64 - local.tee $125 - i32.const 12576 + local.tee $145 + i32.const 12680 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 472 + i32.const 494 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 19999868719476735 call $~lib/util/number/utoa64 - local.tee $126 - i32.const 12624 + local.tee $146 + i32.const 12728 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 473 + i32.const 495 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 129999868719476735 call $~lib/util/number/utoa64 - local.tee $127 - i32.const 12680 + local.tee $147 + i32.const 12784 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 474 + i32.const 496 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 1239999868719476735 call $~lib/util/number/utoa64 - local.tee $128 - i32.const 12736 + local.tee $148 + i32.const 12840 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 475 + i32.const 497 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -1 call $~lib/util/number/utoa64 - local.tee $129 - i32.const 12792 + local.tee $149 + i32.const 12896 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 476 + i32.const 498 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 0 call $~lib/util/number/itoa64 - local.tee $130 + local.tee $150 i32.const 1264 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 478 + i32.const 500 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -1234 call $~lib/util/number/itoa64 - local.tee $131 - i32.const 12848 + local.tee $151 + i32.const 12952 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 479 + i32.const 501 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967295 call $~lib/util/number/itoa64 - local.tee $132 - i32.const 12200 + local.tee $152 + i32.const 12304 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 480 + i32.const 502 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 4294967297 call $~lib/util/number/itoa64 - local.tee $133 - i32.const 12312 + local.tee $153 + i32.const 12416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 481 + i32.const 503 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -4294967295 call $~lib/util/number/itoa64 - local.tee $134 - i32.const 12880 + local.tee $154 + i32.const 12984 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 482 + i32.const 504 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 68719476735 call $~lib/util/number/itoa64 - local.tee $135 - i32.const 12352 + local.tee $155 + i32.const 12456 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 483 + i32.const 505 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -68719476735 call $~lib/util/number/itoa64 - local.tee $136 - i32.const 12920 + local.tee $156 + i32.const 13024 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 484 + i32.const 506 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -868719476735 call $~lib/util/number/itoa64 - local.tee $137 - i32.const 12960 + local.tee $157 + i32.const 13064 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 485 + i32.const 507 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -999868719476735 call $~lib/util/number/itoa64 - local.tee $138 - i32.const 13008 + local.tee $158 + i32.const 13112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 486 + i32.const 508 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -19999868719476735 call $~lib/util/number/itoa64 - local.tee $139 - i32.const 13056 + local.tee $159 + i32.const 13160 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 487 + i32.const 509 i32.const 0 call $~lib/builtins/abort unreachable end i64.const 9223372036854775807 call $~lib/util/number/itoa64 - local.tee $140 - i32.const 13112 + local.tee $160 + i32.const 13216 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 488 + i32.const 510 i32.const 0 call $~lib/builtins/abort unreachable end i64.const -9223372036854775808 call $~lib/util/number/itoa64 - local.tee $141 - i32.const 13168 + local.tee $161 + i32.const 13272 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 489 + i32.const 511 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0 call $~lib/util/number/dtoa - local.tee $142 - i32.const 13224 + local.tee $162 + i32.const 13328 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 492 + i32.const 514 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -0 call $~lib/util/number/dtoa - local.tee $143 - i32.const 13224 + local.tee $163 + i32.const 13328 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 493 + i32.const 515 i32.const 0 call $~lib/builtins/abort unreachable end f64.const nan:0x8000000000000 call $~lib/util/number/dtoa - local.tee $144 + local.tee $164 i32.const 4416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 494 + i32.const 516 i32.const 0 call $~lib/builtins/abort unreachable end f64.const inf call $~lib/util/number/dtoa - local.tee $145 - i32.const 13248 + local.tee $165 + i32.const 13352 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 495 + i32.const 517 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -inf call $~lib/util/number/dtoa - local.tee $146 + local.tee $166 i32.const 5296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 496 + i32.const 518 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 2.220446049250313e-16 call $~lib/util/number/dtoa - local.tee $147 + local.tee $167 i32.const 4624 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 497 + i32.const 519 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -2.220446049250313e-16 call $~lib/util/number/dtoa - local.tee $148 - i32.const 14336 + local.tee $168 + i32.const 14440 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 498 + i32.const 520 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1797693134862315708145274e284 call $~lib/util/number/dtoa - local.tee $149 + local.tee $169 i32.const 4688 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 499 + i32.const 521 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1797693134862315708145274e284 call $~lib/util/number/dtoa - local.tee $150 - i32.const 14400 + local.tee $170 + i32.const 14504 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 500 + i32.const 522 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4185580496821356722454785e274 call $~lib/util/number/dtoa - local.tee $151 - i32.const 14464 + local.tee $171 + i32.const 14568 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 501 + i32.const 523 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 2.2250738585072014e-308 call $~lib/util/number/dtoa - local.tee $152 - i32.const 14528 + local.tee $172 + i32.const 14632 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 502 + i32.const 524 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4.940656e-318 call $~lib/util/number/dtoa - local.tee $153 - i32.const 14592 + local.tee $173 + i32.const 14696 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 505 + i32.const 527 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 9060801153433600 call $~lib/util/number/dtoa - local.tee $154 - i32.const 14640 + local.tee $174 + i32.const 14744 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 506 + i32.const 528 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4708356024711512064 call $~lib/util/number/dtoa - local.tee $155 - i32.const 14696 + local.tee $175 + i32.const 14800 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 507 + i32.const 529 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 9409340012568248320 call $~lib/util/number/dtoa - local.tee $156 - i32.const 14760 + local.tee $176 + i32.const 14864 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 508 + i32.const 530 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 5e-324 call $~lib/util/number/dtoa - local.tee $157 + local.tee $177 i32.const 4752 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 509 + i32.const 531 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1 call $~lib/util/number/dtoa - local.tee $158 - i32.const 14824 + local.tee $178 + i32.const 14928 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 515 + i32.const 537 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.1 call $~lib/util/number/dtoa - local.tee $159 + local.tee $179 i32.const 2424 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 516 + i32.const 538 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1 call $~lib/util/number/dtoa - local.tee $160 - i32.const 14848 + local.tee $180 + i32.const 14952 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 517 + i32.const 539 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -0.1 call $~lib/util/number/dtoa - local.tee $161 - i32.const 14872 + local.tee $181 + i32.const 14976 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 518 + i32.const 540 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e6 call $~lib/util/number/dtoa - local.tee $162 - i32.const 14896 + local.tee $182 + i32.const 15000 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 520 + i32.const 542 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-06 call $~lib/util/number/dtoa - local.tee $163 - i32.const 14936 + local.tee $183 + i32.const 15040 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 521 + i32.const 543 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e6 call $~lib/util/number/dtoa - local.tee $164 - i32.const 14968 + local.tee $184 + i32.const 15072 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 522 + i32.const 544 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e-06 call $~lib/util/number/dtoa - local.tee $165 - i32.const 15008 + local.tee $185 + i32.const 15112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 523 + i32.const 545 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e7 call $~lib/util/number/dtoa - local.tee $166 - i32.const 15048 + local.tee $186 + i32.const 15152 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 524 + i32.const 546 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-07 call $~lib/util/number/dtoa - local.tee $167 - i32.const 15088 + local.tee $187 + i32.const 15192 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 525 + i32.const 547 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.e+308 call $~lib/util/number/dtoa - local.tee $168 + local.tee $188 i32.const 2600 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 527 + i32.const 549 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1.e+308 call $~lib/util/number/dtoa - local.tee $169 - i32.const 15112 + local.tee $189 + i32.const 15216 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 528 + i32.const 550 i32.const 0 call $~lib/builtins/abort unreachable end f64.const inf call $~lib/util/number/dtoa - local.tee $170 - i32.const 13248 + local.tee $190 + i32.const 13352 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 529 + i32.const 551 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -inf call $~lib/util/number/dtoa - local.tee $171 + local.tee $191 i32.const 5296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 530 + i32.const 552 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-308 call $~lib/util/number/dtoa - local.tee $172 - i32.const 15144 + local.tee $192 + i32.const 15248 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 531 + i32.const 553 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e-308 call $~lib/util/number/dtoa - local.tee $173 - i32.const 15176 + local.tee $193 + i32.const 15280 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 532 + i32.const 554 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1e-323 call $~lib/util/number/dtoa - local.tee $174 - i32.const 15208 + local.tee $194 + i32.const 15312 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 533 + i32.const 555 i32.const 0 call $~lib/builtins/abort unreachable end f64.const -1e-323 call $~lib/util/number/dtoa - local.tee $175 - i32.const 15240 + local.tee $195 + i32.const 15344 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 534 + i32.const 556 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0 call $~lib/util/number/dtoa - local.tee $176 - i32.const 13224 + local.tee $196 + i32.const 13328 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 535 + i32.const 557 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 4294967272 call $~lib/util/number/dtoa - local.tee $177 - i32.const 15272 + local.tee $197 + i32.const 15376 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 537 + i32.const 559 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.2312145673456234e-08 call $~lib/util/number/dtoa - local.tee $178 - i32.const 15312 + local.tee $198 + i32.const 15416 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 538 + i32.const 560 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 555555555.5555556 call $~lib/util/number/dtoa - local.tee $179 - i32.const 15376 + local.tee $199 + i32.const 15480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 540 + i32.const 562 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.9999999999999999 call $~lib/util/number/dtoa - local.tee $180 - i32.const 15432 + local.tee $200 + i32.const 15536 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 541 + i32.const 563 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1 call $~lib/util/number/dtoa - local.tee $181 - i32.const 14824 + local.tee $201 + i32.const 14928 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 542 + i32.const 564 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 12.34 call $~lib/util/number/dtoa - local.tee $182 - i32.const 15488 + local.tee $202 + i32.const 15592 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 543 + i32.const 565 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.3333333333333333 call $~lib/util/number/dtoa - local.tee $183 - i32.const 15520 + local.tee $203 + i32.const 15624 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 545 + i32.const 567 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1234e17 call $~lib/util/number/dtoa - local.tee $184 - i32.const 15576 + local.tee $204 + i32.const 15680 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 546 + i32.const 568 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1234e18 call $~lib/util/number/dtoa - local.tee $185 - i32.const 15640 + local.tee $205 + i32.const 15744 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 547 + i32.const 569 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 2.71828 call $~lib/util/number/dtoa - local.tee $186 - i32.const 15680 + local.tee $206 + i32.const 15784 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 548 + i32.const 570 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.0271828 call $~lib/util/number/dtoa - local.tee $187 - i32.const 15712 + local.tee $207 + i32.const 15816 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 549 + i32.const 571 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 271.828 call $~lib/util/number/dtoa - local.tee $188 - i32.const 15752 + local.tee $208 + i32.const 15856 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 550 + i32.const 572 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.1e+128 call $~lib/util/number/dtoa - local.tee $189 - i32.const 15784 + local.tee $209 + i32.const 15888 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 551 + i32.const 573 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 1.1e-64 call $~lib/util/number/dtoa - local.tee $190 - i32.const 15816 + local.tee $210 + i32.const 15920 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 552 + i32.const 574 i32.const 0 call $~lib/builtins/abort unreachable end f64.const 0.000035689 call $~lib/util/number/dtoa - local.tee $191 - i32.const 15848 + local.tee $211 + i32.const 15952 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 72 - i32.const 553 + i32.const 575 i32.const 0 call $~lib/builtins/abort unreachable @@ -18308,12 +18726,52 @@ call $~lib/rt/pure/__release local.get $191 call $~lib/rt/pure/__release + local.get $192 + call $~lib/rt/pure/__release + local.get $193 + call $~lib/rt/pure/__release + local.get $194 + call $~lib/rt/pure/__release + local.get $195 + call $~lib/rt/pure/__release + local.get $196 + call $~lib/rt/pure/__release + local.get $197 + call $~lib/rt/pure/__release + local.get $198 + call $~lib/rt/pure/__release + local.get $199 + call $~lib/rt/pure/__release + local.get $200 + call $~lib/rt/pure/__release + local.get $201 + call $~lib/rt/pure/__release + local.get $202 + call $~lib/rt/pure/__release + local.get $203 + call $~lib/rt/pure/__release + local.get $204 + call $~lib/rt/pure/__release + local.get $205 + call $~lib/rt/pure/__release + local.get $206 + call $~lib/rt/pure/__release + local.get $207 + call $~lib/rt/pure/__release + local.get $208 + call $~lib/rt/pure/__release + local.get $209 + call $~lib/rt/pure/__release + local.get $210 + call $~lib/rt/pure/__release + local.get $211 + call $~lib/rt/pure/__release ) - (func $std/string/getString (; 99 ;) (type $FUNCSIG$i) (result i32) + (func $std/string/getString (; 100 ;) (type $FUNCSIG$i) (result i32) global.get $std/string/str call $~lib/rt/pure/__retain ) - (func $start (; 100 ;) (type $FUNCSIG$v) + (func $start (; 101 ;) (type $FUNCSIG$v) global.get $~lib/started if return @@ -18323,10 +18781,10 @@ end call $start:std/string ) - (func $~lib/array/Array#__visit_impl (; 101 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 102 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) - (func $~lib/rt/pure/__visit (; 102 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 103 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -18456,7 +18914,7 @@ end end ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 103 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 104 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -18495,19 +18953,19 @@ unreachable end ) - (func $~lib/array/Array#__visit_impl (; 104 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 105 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) - (func $~lib/array/Array#__visit_impl (; 105 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 106 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) - (func $~lib/array/Array#__visit_impl (; 106 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 107 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) - (func $~lib/array/Array#__visit_impl (; 107 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 108 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) - (func $~lib/rt/__visit_members (; 108 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 109 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block $block$4$break block $switch$1$default @@ -18571,6 +19029,6 @@ end return ) - (func $null (; 109 ;) (type $FUNCSIG$v) + (func $null (; 110 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 622bee57a7..98f0bcc32a 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -21745,6 +21745,7 @@ (func $~lib/string/String#substring (; 361 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/string/String#get:length @@ -21766,56 +21767,53 @@ local.get $2 i32.lt_s select - local.tee $2 + local.tee $1 local.get $3 - local.get $2 + local.get $1 i32.gt_s select i32.const 1 i32.shl - local.tee $1 + local.tee $4 local.get $3 - local.get $2 + local.get $1 local.get $3 - local.get $2 + local.get $1 i32.lt_s select i32.const 1 i32.shl - local.tee $3 + local.tee $1 i32.sub - local.tee $2 + local.tee $3 i32.eqz if i32.const 1704 return end - local.get $3 - if (result i32) - i32.const 0 - else - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.get $1 - i32.eq - end + i32.const 0 + local.get $2 + i32.const 1 + i32.shl + local.get $4 + i32.eq + local.get $1 + select if local.get $0 call $~lib/rt/pure/__retain return end - local.get $2 + local.get $3 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $1 + local.tee $2 local.get $0 - local.get $3 + local.get $1 i32.add - local.get $2 + local.get $3 call $~lib/memory/memory.copy - local.get $1 + local.get $2 call $~lib/rt/pure/__retain ) (func $~lib/util/string/joinIntegerArray (; 362 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index 5deddf2a1e..319bdeda1a 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -32520,6 +32520,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 call $~lib/string/String#get:length local.set $3 @@ -32580,8 +32581,8 @@ local.get $9 local.get $8 i32.sub - local.set $3 - local.get $3 + local.set $10 + local.get $10 i32.eqz if i32.const 1704 @@ -32592,8 +32593,7 @@ i32.eqz if (result i32) local.get $9 - local.get $0 - call $~lib/string/String#get:length + local.get $3 i32.const 1 i32.shl i32.eq @@ -32605,17 +32605,17 @@ call $~lib/rt/pure/__retain return end - local.get $3 + local.get $10 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $10 - local.get $10 + local.set $11 + local.get $11 local.get $0 local.get $8 i32.add - local.get $3 - call $~lib/memory/memory.copy local.get $10 + call $~lib/memory/memory.copy + local.get $11 call $~lib/rt/pure/__retain ) (func $~lib/util/string/joinIntegerArray (; 484 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) From 678b2d8e4b43cdd3bfe120d56d88506ae6f23695 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Fri, 29 Nov 2019 03:16:38 +0200 Subject: [PATCH 2/2] use different last test case --- tests/compiler/std/string.optimized.wat | 8 ++++---- tests/compiler/std/string.ts | 4 ++-- tests/compiler/std/string.untouched.wat | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 0a018f19b9..6eb97041b0 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -11830,10 +11830,10 @@ end global.get $std/string/str i32.const 4 - i32.const 3 + i32.const -3 call $~lib/string/String#substr local.tee $99 - i32.const 10928 + i32.const 440 call $~lib/string/String.__eq i32.eqz if @@ -11990,10 +11990,10 @@ end global.get $std/string/str i32.const 4 - i32.const 3 + i32.const -3 call $~lib/string/String#substring local.tee $109 - i32.const 10976 + i32.const 10040 call $~lib/string/String.__eq i32.eqz if diff --git a/tests/compiler/std/string.ts b/tests/compiler/std/string.ts index 341b23b023..c40c16773b 100644 --- a/tests/compiler/std/string.ts +++ b/tests/compiler/std/string.ts @@ -401,7 +401,7 @@ assert(str.substr(4, 3) == "efg"); assert(str.substr(0, -1) == ""); assert(str.substr(0, 100) == "abcdefghijklmn"); assert(str.substr(4, 4) == "efgh"); -assert(str.substr(4, 3) == "efg"); +assert(str.substr(4, -3) == ""); assert(str.substring(0) == "abcdefghijklmn"); assert(str.substring(-1) == "abcdefghijklmn"); @@ -412,7 +412,7 @@ assert(str.substring(4, 3) == "d"); assert(str.substring(0, -1) == ""); assert(str.substring(0, 100) == "abcdefghijklmn"); assert(str.substring(4, 4) == ""); -assert(str.substring(4, 3) == "d"); +assert(str.substring(4, -3) == "abcd"); { let sa: string[]; diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index cd12e39411..da82ce61c9 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -15782,10 +15782,10 @@ end global.get $std/string/str i32.const 4 - i32.const 3 + i32.const -3 call $~lib/string/String#substr local.tee $96 - i32.const 10928 + i32.const 440 call $~lib/string/String.__eq i32.eqz if @@ -15942,10 +15942,10 @@ end global.get $std/string/str i32.const 4 - i32.const 3 + i32.const -3 call $~lib/string/String#substring local.tee $106 - i32.const 10976 + i32.const 10040 call $~lib/string/String.__eq i32.eqz if