From 6b976d8bdafd7e657181f2289c66c1af4e8032b4 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 30 Aug 2022 08:59:49 +0300 Subject: [PATCH] init --- std/assembly/util/string.ts | 4 +- tests/compiler/std/string.debug.wat | 261 +++++++++------- tests/compiler/std/string.release.wat | 419 ++++++++++++++------------ tests/compiler/std/string.ts | 10 +- 4 files changed, 378 insertions(+), 316 deletions(-) diff --git a/std/assembly/util/string.ts b/std/assembly/util/string.ts index 270e4d20b5..273072d8bb 100644 --- a/std/assembly/util/string.ts +++ b/std/assembly/util/string.ts @@ -825,7 +825,7 @@ export function strtod(str: string): f64 { code = load(ptr += 2); --len; } - if (len <= 0) return 0; + if (len <= 0) return 0.0 * sign; const capacity = 19; // int(64 * 0.3010) var pointed = false; var consumed = 0; @@ -836,7 +836,7 @@ export function strtod(str: string): f64 { ptr += 2; --len; if (!len && noDigits) return NaN; for (pointed = true; (code = load(ptr)) == CharCode._0; --position, ptr += 2) --len; - if (len <= 0) return 0; + if (len <= 0) return 0.0 * sign; if (!position && noDigits && code - CharCode._0 >= 10) return NaN; } for (let digit = code - CharCode._0; digit < 10 || (code == CharCode.DOT && !pointed); digit = code - CharCode._0) { diff --git a/tests/compiler/std/string.debug.wat b/tests/compiler/std/string.debug.wat index 645a86c7b2..9ceb4f34b0 100644 --- a/tests/compiler/std/string.debug.wat +++ b/tests/compiler/std/string.debug.wat @@ -16,6 +16,7 @@ (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $f64_i32_=>_f64 (func (param f64 i32) (result f64))) (type $i32_=>_f32 (func (param i32) (result f32))) + (type $f64_f64_=>_i32 (func (param f64 f64) (result i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) @@ -198,47 +199,47 @@ (data (i32.const 4940) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\00e\00-\006\000\00\00\00") (data (i32.const 4972) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\006\000\00\00\00\00\00") (data (i32.const 5004) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\001\002\003\00.\004\00e\00") - (data (i32.const 5036) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\00-\00.\000\000\000\000\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 5084) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\001\00x\00\00\00\00\00\00\00\00\00") - (data (i32.const 5116) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00-\001\001\00e\00-\001\00s\00t\00r\00i\00n\00g\00\00\00\00\00") - (data (i32.const 5164) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\000\001\00e\001\00s\00t\00r\00i\00n\00g\00\00\00\00\00\00\00\00\00") - (data (i32.const 5212) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\12\00\00\000\001\000\00s\00t\00r\00i\00n\00g\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 5260) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\00+\00.\002\002\00e\00-\001\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 5308) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\001\00.\00s\001\00\00\00") - (data (i32.const 5340) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00x\005\00\00\00\00\00\00\00") - (data (i32.const 5372) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00x\00D\00\00\00\00\00\00\00") - (data (i32.const 5404) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00\0b\001\00.\001\00\00\00\00\00") - (data (i32.const 5436) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00\0b\00\0b\00-\001\00.\001\00") - (data (i32.const 5468) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00\0c\00\0c\00-\001\00.\001\00") - (data (i32.const 5500) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00( ( -\001\00.\001\00") - (data (i32.const 5532) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00) ) -\001\00.\001\00") - (data (i32.const 5564) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\000\000\000\00\00\00") - (data (i32.const 5596) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\000\000\00a\00\00\00") - (data (i32.const 5628) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\000\000\001\00\00\00") - (data (i32.const 5660) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\00.\000\000\00\00\00") - (data (i32.const 5692) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\00.\000\00a\00\00\00") - (data (i32.const 5724) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\001\00e\00\00\00\00\00") - (data (i32.const 5756) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\00e\00+\000\000\000\001\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 5804) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\000\00e\00+\001\000\000\00") - (data (i32.const 5836) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\00.\00-\001\00.\00\00\00") - (data (i32.const 5868) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\001\00e\00-\001\00.\002\00") - (data (i32.const 5900) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\001\00e\00x\00\00\00\00\00\00\00") - (data (i32.const 5932) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\001\00x\00\00\00\00\00") - (data (i32.const 5964) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\00-\00x\00\00\00\00\00") - (data (i32.const 5996) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\00e\00-\001\00x\00\00\00") - (data (i32.const 6028) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\000\00.\001\00e\00-\001\00x\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 6076) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\000\00.\00\00\00\00\00\00\00") - (data (i32.const 6108) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00.\000\000\00\00\00\00\00\00\00") - (data (i32.const 6140) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00.\000\00.\00\00\00\00\00\00\00") - (data (i32.const 6172) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00.\001\00.\00\00\00\00\00\00\00") - (data (i32.const 6204) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00.\00.\00\00\00\00\00\00\00") - (data (i32.const 6236) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00.\00a\00\00\00\00\00\00\00") - (data (i32.const 6268) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00.\00.\001\00\00\00\00\00") - (data (i32.const 6300) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\00.\001\00.\001\00\00\00") - (data (i32.const 6332) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\00.\00 \001\00\00\00\00\00") - (data (i32.const 6364) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00+\000\00.\000\00\00\00\00\00") - (data (i32.const 6396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00-\000\00.\000\00\00\00\00\00") - (data (i32.const 6428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\00+\000\00\00\00\00\00\00\00\00\00") + (data (i32.const 5036) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\001\00x\00\00\00\00\00\00\00\00\00") + (data (i32.const 5068) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00-\001\001\00e\00-\001\00s\00t\00r\00i\00n\00g\00\00\00\00\00") + (data (i32.const 5116) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\000\001\00e\001\00s\00t\00r\00i\00n\00g\00\00\00\00\00\00\00\00\00") + (data (i32.const 5164) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\12\00\00\000\001\000\00s\00t\00r\00i\00n\00g\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 5212) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\00+\00.\002\002\00e\00-\001\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 5260) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\001\00.\00s\001\00\00\00") + (data (i32.const 5292) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00x\005\00\00\00\00\00\00\00") + (data (i32.const 5324) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00x\00D\00\00\00\00\00\00\00") + (data (i32.const 5356) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00\0b\001\00.\001\00\00\00\00\00") + (data (i32.const 5388) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00\0b\00\0b\00-\001\00.\001\00") + (data (i32.const 5420) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00\0c\00\0c\00-\001\00.\001\00") + (data (i32.const 5452) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00( ( -\001\00.\001\00") + (data (i32.const 5484) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00) ) -\001\00.\001\00") + (data (i32.const 5516) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\000\000\000\00\00\00") + (data (i32.const 5548) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\000\000\00a\00\00\00") + (data (i32.const 5580) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\000\000\001\00\00\00") + (data (i32.const 5612) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\00.\000\000\00\00\00") + (data (i32.const 5644) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\000\00.\000\00a\00\00\00") + (data (i32.const 5676) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\001\00e\00\00\00\00\00") + (data (i32.const 5708) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\00e\00+\000\000\000\001\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 5756) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\000\00e\00+\001\000\000\00") + (data (i32.const 5788) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\00.\00-\001\00.\00\00\00") + (data (i32.const 5820) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\001\00e\00-\001\00.\002\00") + (data (i32.const 5852) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\001\00e\00x\00\00\00\00\00\00\00") + (data (i32.const 5884) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\001\00x\00\00\00\00\00") + (data (i32.const 5916) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00e\00-\00x\00\00\00\00\00") + (data (i32.const 5948) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\001\00e\00-\001\00x\00\00\00") + (data (i32.const 5980) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\000\00.\001\00e\00-\001\00x\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 6028) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\000\00.\00\00\00\00\00\00\00") + (data (i32.const 6060) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00.\000\000\00\00\00\00\00\00\00") + (data (i32.const 6092) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00.\000\00.\00\00\00\00\00\00\00") + (data (i32.const 6124) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00.\001\00.\00\00\00\00\00\00\00") + (data (i32.const 6156) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00.\00.\00\00\00\00\00\00\00") + (data (i32.const 6188) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\000\00.\00a\00\00\00\00\00\00\00") + (data (i32.const 6220) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\00.\00.\001\00\00\00\00\00") + (data (i32.const 6252) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\000\00.\001\00.\001\00\00\00") + (data (i32.const 6284) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\00.\00 \001\00\00\00\00\00") + (data (i32.const 6316) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00+\000\00.\000\00\00\00\00\00") + (data (i32.const 6348) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00-\000\00.\000\00\00\00\00\00") + (data (i32.const 6380) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\00+\000\00\00\00\00\00\00\00\00\00") + (data (i32.const 6412) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\00-\00.\000\000\000\000\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 6460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00-\00-\000\00\00\00\00\00\00\00") (data (i32.const 6492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00+\00+\000\00\00\00\00\00\00\00") (data (i32.const 6524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\00.\00a\00\00\00\00\00\00\00\00\00") @@ -4316,6 +4317,8 @@ i32.le_s if f64.const 0 + local.get $sign + f64.mul return end i32.const 0 @@ -4385,6 +4388,8 @@ i32.le_s if f64.const 0 + local.get $sign + f64.mul return end local.get $position @@ -5695,6 +5700,28 @@ local.get $str call $~lib/util/string/strtod ) + (func $~lib/object/Object.is (param $x f64) (param $y f64) (result i32) + i32.const 1 + drop + i32.const 8 + i32.const 8 + i32.eq + drop + local.get $x + local.get $x + f64.ne + local.get $y + local.get $y + f64.ne + i32.and + local.get $x + i64.reinterpret_f64 + local.get $y + i64.reinterpret_f64 + i64.eq + i32.or + return + ) (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) local.get $left local.get $right @@ -12410,7 +12437,7 @@ i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const -0 + f64.const 1 f64.eq i32.eqz if @@ -12421,14 +12448,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5104 + i32.const 5088 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1 + f64.const -1.1 f64.eq i32.eqz if @@ -12446,7 +12473,7 @@ i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const -1.1 + f64.const 10 f64.eq i32.eqz if @@ -12482,7 +12509,7 @@ i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 10 + f64.const 0.022 f64.eq i32.eqz if @@ -12500,7 +12527,7 @@ i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0.022 + f64.const 11 f64.eq i32.eqz if @@ -12511,14 +12538,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5328 + i32.const 2784 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 11 + f64.const 0 f64.eq i32.eqz if @@ -12529,7 +12556,7 @@ call $~lib/builtins/abort unreachable end - i32.const 2784 + i32.const 5312 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12547,7 +12574,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5360 + i32.const 5344 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12565,14 +12592,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5392 + i32.const 5376 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 + f64.const 1.1 f64.eq i32.eqz if @@ -12583,14 +12610,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5424 + i32.const 5408 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1.1 + f64.const -1.1 f64.eq i32.eqz if @@ -12601,7 +12628,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5456 + i32.const 5440 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12619,7 +12646,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5488 + i32.const 5472 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12637,7 +12664,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5520 + i32.const 5504 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12655,14 +12682,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5552 + i32.const 5536 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const -1.1 + f64.const 0 f64.eq i32.eqz if @@ -12673,7 +12700,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5584 + i32.const 5568 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12691,14 +12718,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5616 + i32.const 5600 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 + f64.const 1 f64.eq i32.eqz if @@ -12709,14 +12736,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5648 + i32.const 5632 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1 + f64.const 0 f64.eq i32.eqz if @@ -12727,7 +12754,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5680 + i32.const 5664 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12745,14 +12772,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5712 + i32.const 5696 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 + f64.const 10 f64.eq i32.eqz if @@ -12763,7 +12790,7 @@ call $~lib/builtins/abort unreachable end - i32.const 5744 + i32.const 5728 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12788,7 +12815,7 @@ i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 10 + f64.const 0 f64.eq i32.eqz if @@ -12799,14 +12826,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5824 + i32.const 5808 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 + f64.const 1 f64.eq i32.eqz if @@ -12817,14 +12844,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5856 + i32.const 5840 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1 + f64.const 0.1 f64.eq i32.eqz if @@ -12835,14 +12862,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5888 + i32.const 5872 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0.1 + f64.const 1 f64.eq i32.eqz if @@ -12853,14 +12880,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5920 + i32.const 5904 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1 + f64.const 10 f64.eq i32.eqz if @@ -12871,14 +12898,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5952 + i32.const 5936 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 10 + f64.const 1 f64.eq i32.eqz if @@ -12889,14 +12916,14 @@ call $~lib/builtins/abort unreachable end - i32.const 5984 + i32.const 5968 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1 + f64.const 0.1 f64.eq i32.eqz if @@ -12907,14 +12934,14 @@ call $~lib/builtins/abort unreachable end - i32.const 6016 + i32.const 6000 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0.1 + f64.const 0.01 f64.eq i32.eqz if @@ -12932,7 +12959,7 @@ i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0.01 + f64.const 0 f64.eq i32.eqz if @@ -12943,7 +12970,7 @@ call $~lib/builtins/abort unreachable end - i32.const 6096 + i32.const 6080 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12961,7 +12988,7 @@ call $~lib/builtins/abort unreachable end - i32.const 6128 + i32.const 6112 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -12979,14 +13006,14 @@ call $~lib/builtins/abort unreachable end - i32.const 6160 + i32.const 6144 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 + f64.const 0.1 f64.eq i32.eqz if @@ -12997,14 +13024,14 @@ call $~lib/builtins/abort unreachable end - i32.const 6192 + i32.const 6176 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0.1 + f64.const 0 f64.eq i32.eqz if @@ -13015,7 +13042,7 @@ call $~lib/builtins/abort unreachable end - i32.const 6224 + i32.const 6208 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -13033,14 +13060,14 @@ call $~lib/builtins/abort unreachable end - i32.const 6256 + i32.const 6240 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 + f64.const 1 f64.eq i32.eqz if @@ -13051,14 +13078,14 @@ call $~lib/builtins/abort unreachable end - i32.const 6288 + i32.const 6272 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 1 + f64.const 0.1 f64.eq i32.eqz if @@ -13069,14 +13096,14 @@ call $~lib/builtins/abort unreachable end - i32.const 6320 + i32.const 6304 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0.1 + f64.const 0 f64.eq i32.eqz if @@ -13087,7 +13114,7 @@ call $~lib/builtins/abort unreachable end - i32.const 6352 + i32.const 6336 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 @@ -13095,7 +13122,9 @@ local.get $4 call $~lib/string/parseFloat f64.const 0 - f64.eq + call $~lib/object/Object.is + i32.const 0 + i32.ne i32.eqz if i32.const 0 @@ -13105,15 +13134,17 @@ call $~lib/builtins/abort unreachable end - i32.const 6384 + i32.const 6368 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 - f64.eq + f64.const -0 + call $~lib/object/Object.is + i32.const 0 + i32.ne i32.eqz if i32.const 0 @@ -13123,15 +13154,17 @@ call $~lib/builtins/abort unreachable end - i32.const 6416 + i32.const 6400 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const -0 - f64.eq + f64.const 0 + call $~lib/object/Object.is + i32.const 0 + i32.ne i32.eqz if i32.const 0 @@ -13141,15 +13174,17 @@ call $~lib/builtins/abort unreachable end - i32.const 6448 + i32.const 2944 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 - f64.eq + f64.const -0 + call $~lib/object/Object.is + i32.const 0 + i32.ne i32.eqz if i32.const 0 @@ -13159,15 +13194,17 @@ call $~lib/builtins/abort unreachable end - i32.const 2944 + i32.const 6432 local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store $0 local.get $4 call $~lib/string/parseFloat - f64.const 0 - f64.eq + f64.const -0 + call $~lib/object/Object.is + i32.const 0 + i32.ne i32.eqz if i32.const 0 diff --git a/tests/compiler/std/string.release.wat b/tests/compiler/std/string.release.wat index 2cf265a3ef..c028653d09 100644 --- a/tests/compiler/std/string.release.wat +++ b/tests/compiler/std/string.release.wat @@ -289,88 +289,88 @@ (data (i32.const 6008) "\01\00\00\00\08\00\00\001\00e\006\000") (data (i32.const 6028) "\1c") (data (i32.const 6040) "\01\00\00\00\0c\00\00\001\002\003\00.\004\00e") - (data (i32.const 6060) ",") - (data (i32.const 6072) "\01\00\00\00\0e\00\00\00-\00.\000\000\000\000\000") - (data (i32.const 6108) "\1c") - (data (i32.const 6120) "\01\00\00\00\04\00\00\001\00x") + (data (i32.const 6060) "\1c") + (data (i32.const 6072) "\01\00\00\00\04\00\00\001\00x") + (data (i32.const 6092) ",") + (data (i32.const 6104) "\01\00\00\00\18\00\00\00-\001\001\00e\00-\001\00s\00t\00r\00i\00n\00g") (data (i32.const 6140) ",") - (data (i32.const 6152) "\01\00\00\00\18\00\00\00-\001\001\00e\00-\001\00s\00t\00r\00i\00n\00g") + (data (i32.const 6152) "\01\00\00\00\14\00\00\000\001\00e\001\00s\00t\00r\00i\00n\00g") (data (i32.const 6188) ",") - (data (i32.const 6200) "\01\00\00\00\14\00\00\000\001\00e\001\00s\00t\00r\00i\00n\00g") + (data (i32.const 6200) "\01\00\00\00\12\00\00\000\001\000\00s\00t\00r\00i\00n\00g") (data (i32.const 6236) ",") - (data (i32.const 6248) "\01\00\00\00\12\00\00\000\001\000\00s\00t\00r\00i\00n\00g") - (data (i32.const 6284) ",") - (data (i32.const 6296) "\01\00\00\00\0e\00\00\00+\00.\002\002\00e\00-\001") - (data (i32.const 6332) "\1c") - (data (i32.const 6344) "\01\00\00\00\n\00\00\001\001\00.\00s\001") - (data (i32.const 6364) "\1c") - (data (i32.const 6376) "\01\00\00\00\06\00\00\000\00x\005") - (data (i32.const 6396) "\1c") - (data (i32.const 6408) "\01\00\00\00\06\00\00\000\00x\00D") - (data (i32.const 6428) "\1c") - (data (i32.const 6440) "\01\00\00\00\08\00\00\00\0b\001\00.\001") - (data (i32.const 6460) "\1c") - (data (i32.const 6472) "\01\00\00\00\0c\00\00\00\0b\00\0b\00-\001\00.\001") - (data (i32.const 6492) "\1c") - (data (i32.const 6504) "\01\00\00\00\0c\00\00\00\0c\00\0c\00-\001\00.\001") - (data (i32.const 6524) "\1c") - (data (i32.const 6536) "\01\00\00\00\0c\00\00\00( ( -\001\00.\001") - (data (i32.const 6556) "\1c") - (data (i32.const 6568) "\01\00\00\00\0c\00\00\00) ) -\001\00.\001") - (data (i32.const 6588) "\1c") - (data (i32.const 6600) "\01\00\00\00\n\00\00\000\000\000\000\000") - (data (i32.const 6620) "\1c") - (data (i32.const 6632) "\01\00\00\00\n\00\00\000\000\000\000\00a") - (data (i32.const 6652) "\1c") - (data (i32.const 6664) "\01\00\00\00\n\00\00\000\000\000\000\001") - (data (i32.const 6684) "\1c") - (data (i32.const 6696) "\01\00\00\00\n\00\00\000\000\00.\000\000") - (data (i32.const 6716) "\1c") - (data (i32.const 6728) "\01\00\00\00\n\00\00\000\000\00.\000\00a") - (data (i32.const 6748) "\1c") - (data (i32.const 6760) "\01\00\00\00\08\00\00\001\00e\001\00e") - (data (i32.const 6780) ",") - (data (i32.const 6792) "\01\00\00\00\0e\00\00\001\00e\00+\000\000\000\001") - (data (i32.const 6828) "\1c") - (data (i32.const 6840) "\01\00\00\00\0c\00\00\000\00e\00+\001\000\000") - (data (i32.const 6860) "\1c") - (data (i32.const 6872) "\01\00\00\00\n\00\00\001\00.\00-\001\00.") - (data (i32.const 6892) "\1c") - (data (i32.const 6904) "\01\00\00\00\0c\00\00\001\00e\00-\001\00.\002") - (data (i32.const 6924) "\1c") - (data (i32.const 6936) "\01\00\00\00\06\00\00\001\00e\00x") - (data (i32.const 6956) "\1c") - (data (i32.const 6968) "\01\00\00\00\08\00\00\001\00e\001\00x") - (data (i32.const 6988) "\1c") - (data (i32.const 7000) "\01\00\00\00\08\00\00\001\00e\00-\00x") - (data (i32.const 7020) "\1c") - (data (i32.const 7032) "\01\00\00\00\n\00\00\001\00e\00-\001\00x") - (data (i32.const 7052) ",") - (data (i32.const 7064) "\01\00\00\00\0e\00\00\000\00.\001\00e\00-\001\00x") - (data (i32.const 7100) "\1c") - (data (i32.const 7112) "\01\00\00\00\06\00\00\000\000\00.") - (data (i32.const 7132) "\1c") - (data (i32.const 7144) "\01\00\00\00\06\00\00\00.\000\000") - (data (i32.const 7164) "\1c") - (data (i32.const 7176) "\01\00\00\00\06\00\00\00.\000\00.") - (data (i32.const 7196) "\1c") - (data (i32.const 7208) "\01\00\00\00\06\00\00\00.\001\00.") - (data (i32.const 7228) "\1c") - (data (i32.const 7240) "\01\00\00\00\06\00\00\000\00.\00.") - (data (i32.const 7260) "\1c") - (data (i32.const 7272) "\01\00\00\00\06\00\00\000\00.\00a") - (data (i32.const 7292) "\1c") - (data (i32.const 7304) "\01\00\00\00\08\00\00\001\00.\00.\001") - (data (i32.const 7324) "\1c") - (data (i32.const 7336) "\01\00\00\00\n\00\00\000\00.\001\00.\001") - (data (i32.const 7356) "\1c") - (data (i32.const 7368) "\01\00\00\00\08\00\00\000\00.\00 \001") - (data (i32.const 7388) "\1c") - (data (i32.const 7400) "\01\00\00\00\08\00\00\00+\000\00.\000") - (data (i32.const 7420) "\1c") - (data (i32.const 7432) "\01\00\00\00\08\00\00\00-\000\00.\000") - (data (i32.const 7452) "\1c") - (data (i32.const 7464) "\01\00\00\00\04\00\00\00+\000") + (data (i32.const 6248) "\01\00\00\00\0e\00\00\00+\00.\002\002\00e\00-\001") + (data (i32.const 6284) "\1c") + (data (i32.const 6296) "\01\00\00\00\n\00\00\001\001\00.\00s\001") + (data (i32.const 6316) "\1c") + (data (i32.const 6328) "\01\00\00\00\06\00\00\000\00x\005") + (data (i32.const 6348) "\1c") + (data (i32.const 6360) "\01\00\00\00\06\00\00\000\00x\00D") + (data (i32.const 6380) "\1c") + (data (i32.const 6392) "\01\00\00\00\08\00\00\00\0b\001\00.\001") + (data (i32.const 6412) "\1c") + (data (i32.const 6424) "\01\00\00\00\0c\00\00\00\0b\00\0b\00-\001\00.\001") + (data (i32.const 6444) "\1c") + (data (i32.const 6456) "\01\00\00\00\0c\00\00\00\0c\00\0c\00-\001\00.\001") + (data (i32.const 6476) "\1c") + (data (i32.const 6488) "\01\00\00\00\0c\00\00\00( ( -\001\00.\001") + (data (i32.const 6508) "\1c") + (data (i32.const 6520) "\01\00\00\00\0c\00\00\00) ) -\001\00.\001") + (data (i32.const 6540) "\1c") + (data (i32.const 6552) "\01\00\00\00\n\00\00\000\000\000\000\000") + (data (i32.const 6572) "\1c") + (data (i32.const 6584) "\01\00\00\00\n\00\00\000\000\000\000\00a") + (data (i32.const 6604) "\1c") + (data (i32.const 6616) "\01\00\00\00\n\00\00\000\000\000\000\001") + (data (i32.const 6636) "\1c") + (data (i32.const 6648) "\01\00\00\00\n\00\00\000\000\00.\000\000") + (data (i32.const 6668) "\1c") + (data (i32.const 6680) "\01\00\00\00\n\00\00\000\000\00.\000\00a") + (data (i32.const 6700) "\1c") + (data (i32.const 6712) "\01\00\00\00\08\00\00\001\00e\001\00e") + (data (i32.const 6732) ",") + (data (i32.const 6744) "\01\00\00\00\0e\00\00\001\00e\00+\000\000\000\001") + (data (i32.const 6780) "\1c") + (data (i32.const 6792) "\01\00\00\00\0c\00\00\000\00e\00+\001\000\000") + (data (i32.const 6812) "\1c") + (data (i32.const 6824) "\01\00\00\00\n\00\00\001\00.\00-\001\00.") + (data (i32.const 6844) "\1c") + (data (i32.const 6856) "\01\00\00\00\0c\00\00\001\00e\00-\001\00.\002") + (data (i32.const 6876) "\1c") + (data (i32.const 6888) "\01\00\00\00\06\00\00\001\00e\00x") + (data (i32.const 6908) "\1c") + (data (i32.const 6920) "\01\00\00\00\08\00\00\001\00e\001\00x") + (data (i32.const 6940) "\1c") + (data (i32.const 6952) "\01\00\00\00\08\00\00\001\00e\00-\00x") + (data (i32.const 6972) "\1c") + (data (i32.const 6984) "\01\00\00\00\n\00\00\001\00e\00-\001\00x") + (data (i32.const 7004) ",") + (data (i32.const 7016) "\01\00\00\00\0e\00\00\000\00.\001\00e\00-\001\00x") + (data (i32.const 7052) "\1c") + (data (i32.const 7064) "\01\00\00\00\06\00\00\000\000\00.") + (data (i32.const 7084) "\1c") + (data (i32.const 7096) "\01\00\00\00\06\00\00\00.\000\000") + (data (i32.const 7116) "\1c") + (data (i32.const 7128) "\01\00\00\00\06\00\00\00.\000\00.") + (data (i32.const 7148) "\1c") + (data (i32.const 7160) "\01\00\00\00\06\00\00\00.\001\00.") + (data (i32.const 7180) "\1c") + (data (i32.const 7192) "\01\00\00\00\06\00\00\000\00.\00.") + (data (i32.const 7212) "\1c") + (data (i32.const 7224) "\01\00\00\00\06\00\00\000\00.\00a") + (data (i32.const 7244) "\1c") + (data (i32.const 7256) "\01\00\00\00\08\00\00\001\00.\00.\001") + (data (i32.const 7276) "\1c") + (data (i32.const 7288) "\01\00\00\00\n\00\00\000\00.\001\00.\001") + (data (i32.const 7308) "\1c") + (data (i32.const 7320) "\01\00\00\00\08\00\00\000\00.\00 \001") + (data (i32.const 7340) "\1c") + (data (i32.const 7352) "\01\00\00\00\08\00\00\00+\000\00.\000") + (data (i32.const 7372) "\1c") + (data (i32.const 7384) "\01\00\00\00\08\00\00\00-\000\00.\000") + (data (i32.const 7404) "\1c") + (data (i32.const 7416) "\01\00\00\00\04\00\00\00+\000") + (data (i32.const 7436) ",") + (data (i32.const 7448) "\01\00\00\00\0e\00\00\00-\00.\000\000\000\000\000") (data (i32.const 7484) "\1c") (data (i32.const 7496) "\01\00\00\00\06\00\00\00-\00-\000") (data (i32.const 7516) "\1c") @@ -3592,8 +3592,8 @@ (local $7 i32) (local $8 i64) (local $9 f64) - (local $10 i32) - (local $11 f64) + (local $10 f64) + (local $11 i32) (local $12 i64) (local $13 i64) (local $14 i64) @@ -3611,7 +3611,7 @@ i32.load16_u $0 local.set $5 f64.const 1 - local.set $11 + local.set $10 loop $while-continue|0 local.get $7 if (result i32) @@ -3708,7 +3708,7 @@ i32.eqz br_if $folding-inner0 f64.const -1 - local.set $11 + local.set $10 local.get $0 i32.const 2 i32.add @@ -3755,7 +3755,7 @@ i32.const 0 end if - local.get $11 + local.get $10 f64.const inf f64.mul return @@ -3796,7 +3796,9 @@ i32.const 0 i32.le_s if + local.get $10 f64.const 0 + f64.mul return end local.get $5 @@ -3820,7 +3822,7 @@ select br_if $folding-inner0 i32.const 1 - local.set $10 + local.set $11 loop $for-loop|2 local.get $0 i32.load16_u $0 @@ -3847,7 +3849,9 @@ i32.const 0 i32.le_s if + local.get $10 f64.const 0 + f64.mul return end local.get $5 @@ -3868,7 +3872,7 @@ i32.sub local.set $4 loop $for-loop|3 - local.get $10 + local.get $11 i32.eqz local.get $5 i32.const 46 @@ -3911,7 +3915,7 @@ local.get $1 local.set $2 i32.const 1 - local.set $10 + local.set $11 end local.get $7 i32.const 1 @@ -3934,7 +3938,7 @@ end local.get $2 local.get $1 - local.get $10 + local.get $11 select i32.const 19 local.get $1 @@ -3943,7 +3947,7 @@ i32.gt_s select i32.sub - local.set $10 + local.set $11 block $~lib/util/string/scientific|inlined.0 local.get $6 i64.eqz @@ -4081,7 +4085,7 @@ local.get $3 i32.mul end - local.get $10 + local.get $11 i32.add local.tee $0 i32.const -342 @@ -4380,7 +4384,7 @@ local.set $9 end local.get $9 - local.get $11 + local.get $10 f64.copysign return end @@ -10382,7 +10386,7 @@ i32.store $0 i32.const 6080 call $~lib/util/string/strtod - f64.const -0 + f64.const 1 f64.ne if i32.const 0 @@ -10393,11 +10397,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6128 + i32.const 6112 i32.store $0 - i32.const 6128 + i32.const 6112 call $~lib/util/string/strtod - f64.const 1 + f64.const -1.1 f64.ne if i32.const 0 @@ -10412,7 +10416,7 @@ i32.store $0 i32.const 6160 call $~lib/util/string/strtod - f64.const -1.1 + f64.const 10 f64.ne if i32.const 0 @@ -10442,7 +10446,7 @@ i32.store $0 i32.const 6256 call $~lib/util/string/strtod - f64.const 10 + f64.const 0.022 f64.ne if i32.const 0 @@ -10457,7 +10461,7 @@ i32.store $0 i32.const 6304 call $~lib/util/string/strtod - f64.const 0.022 + f64.const 11 f64.ne if i32.const 0 @@ -10468,11 +10472,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6352 + i32.const 3808 i32.store $0 - i32.const 6352 + i32.const 3808 call $~lib/util/string/strtod - f64.const 11 + f64.const 0 f64.ne if i32.const 0 @@ -10483,9 +10487,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3808 + i32.const 6336 i32.store $0 - i32.const 3808 + i32.const 6336 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10498,9 +10502,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6384 + i32.const 6368 i32.store $0 - i32.const 6384 + i32.const 6368 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10513,11 +10517,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6416 + i32.const 6400 i32.store $0 - i32.const 6416 + i32.const 6400 call $~lib/util/string/strtod - f64.const 0 + f64.const 1.1 f64.ne if i32.const 0 @@ -10528,11 +10532,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6448 + i32.const 6432 i32.store $0 - i32.const 6448 + i32.const 6432 call $~lib/util/string/strtod - f64.const 1.1 + f64.const -1.1 f64.ne if i32.const 0 @@ -10543,9 +10547,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6480 + i32.const 6464 i32.store $0 - i32.const 6480 + i32.const 6464 call $~lib/util/string/strtod f64.const -1.1 f64.ne @@ -10558,9 +10562,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6512 + i32.const 6496 i32.store $0 - i32.const 6512 + i32.const 6496 call $~lib/util/string/strtod f64.const -1.1 f64.ne @@ -10573,9 +10577,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6544 + i32.const 6528 i32.store $0 - i32.const 6544 + i32.const 6528 call $~lib/util/string/strtod f64.const -1.1 f64.ne @@ -10588,11 +10592,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6576 + i32.const 6560 i32.store $0 - i32.const 6576 + i32.const 6560 call $~lib/util/string/strtod - f64.const -1.1 + f64.const 0 f64.ne if i32.const 0 @@ -10603,9 +10607,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6608 + i32.const 6592 i32.store $0 - i32.const 6608 + i32.const 6592 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10618,11 +10622,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6640 + i32.const 6624 i32.store $0 - i32.const 6640 + i32.const 6624 call $~lib/util/string/strtod - f64.const 0 + f64.const 1 f64.ne if i32.const 0 @@ -10633,11 +10637,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6672 + i32.const 6656 i32.store $0 - i32.const 6672 + i32.const 6656 call $~lib/util/string/strtod - f64.const 1 + f64.const 0 f64.ne if i32.const 0 @@ -10648,9 +10652,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6704 + i32.const 6688 i32.store $0 - i32.const 6704 + i32.const 6688 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10663,11 +10667,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6736 + i32.const 6720 i32.store $0 - i32.const 6736 + i32.const 6720 call $~lib/util/string/strtod - f64.const 0 + f64.const 10 f64.ne if i32.const 0 @@ -10678,9 +10682,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6768 + i32.const 6752 i32.store $0 - i32.const 6768 + i32.const 6752 call $~lib/util/string/strtod f64.const 10 f64.ne @@ -10697,7 +10701,7 @@ i32.store $0 i32.const 6800 call $~lib/util/string/strtod - f64.const 10 + f64.const 0 f64.ne if i32.const 0 @@ -10708,11 +10712,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6848 + i32.const 6832 i32.store $0 - i32.const 6848 + i32.const 6832 call $~lib/util/string/strtod - f64.const 0 + f64.const 1 f64.ne if i32.const 0 @@ -10723,11 +10727,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6880 + i32.const 6864 i32.store $0 - i32.const 6880 + i32.const 6864 call $~lib/util/string/strtod - f64.const 1 + f64.const 0.1 f64.ne if i32.const 0 @@ -10738,11 +10742,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6912 + i32.const 6896 i32.store $0 - i32.const 6912 + i32.const 6896 call $~lib/util/string/strtod - f64.const 0.1 + f64.const 1 f64.ne if i32.const 0 @@ -10753,11 +10757,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6944 + i32.const 6928 i32.store $0 - i32.const 6944 + i32.const 6928 call $~lib/util/string/strtod - f64.const 1 + f64.const 10 f64.ne if i32.const 0 @@ -10768,11 +10772,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6976 + i32.const 6960 i32.store $0 - i32.const 6976 + i32.const 6960 call $~lib/util/string/strtod - f64.const 10 + f64.const 1 f64.ne if i32.const 0 @@ -10783,11 +10787,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7008 + i32.const 6992 i32.store $0 - i32.const 7008 + i32.const 6992 call $~lib/util/string/strtod - f64.const 1 + f64.const 0.1 f64.ne if i32.const 0 @@ -10798,11 +10802,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7040 + i32.const 7024 i32.store $0 - i32.const 7040 + i32.const 7024 call $~lib/util/string/strtod - f64.const 0.1 + f64.const 0.01 f64.ne if i32.const 0 @@ -10817,7 +10821,7 @@ i32.store $0 i32.const 7072 call $~lib/util/string/strtod - f64.const 0.01 + f64.const 0 f64.ne if i32.const 0 @@ -10828,9 +10832,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7120 + i32.const 7104 i32.store $0 - i32.const 7120 + i32.const 7104 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10843,9 +10847,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7152 + i32.const 7136 i32.store $0 - i32.const 7152 + i32.const 7136 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10858,11 +10862,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7184 + i32.const 7168 i32.store $0 - i32.const 7184 + i32.const 7168 call $~lib/util/string/strtod - f64.const 0 + f64.const 0.1 f64.ne if i32.const 0 @@ -10873,11 +10877,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7216 + i32.const 7200 i32.store $0 - i32.const 7216 + i32.const 7200 call $~lib/util/string/strtod - f64.const 0.1 + f64.const 0 f64.ne if i32.const 0 @@ -10888,9 +10892,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7248 + i32.const 7232 i32.store $0 - i32.const 7248 + i32.const 7232 call $~lib/util/string/strtod f64.const 0 f64.ne @@ -10903,11 +10907,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7280 + i32.const 7264 i32.store $0 - i32.const 7280 + i32.const 7264 call $~lib/util/string/strtod - f64.const 0 + f64.const 1 f64.ne if i32.const 0 @@ -10918,11 +10922,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7312 + i32.const 7296 i32.store $0 - i32.const 7312 + i32.const 7296 call $~lib/util/string/strtod - f64.const 1 + f64.const 0.1 f64.ne if i32.const 0 @@ -10933,11 +10937,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7344 + i32.const 7328 i32.store $0 - i32.const 7344 + i32.const 7328 call $~lib/util/string/strtod - f64.const 0.1 + f64.const 0 f64.ne if i32.const 0 @@ -10948,12 +10952,13 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7376 + i32.const 7360 i32.store $0 - i32.const 7376 + i32.const 7360 call $~lib/util/string/strtod - f64.const 0 - f64.ne + i64.reinterpret_f64 + i64.const 0 + i64.ne if i32.const 0 i32.const 1120 @@ -10963,12 +10968,21 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7408 + i32.const 7392 i32.store $0 - i32.const 7408 + i32.const 7392 call $~lib/util/string/strtod - f64.const 0 + local.tee $1 + local.get $1 f64.ne + i32.const 0 + i32.and + local.get $1 + i64.reinterpret_f64 + i64.const -9223372036854775808 + i64.eq + i32.or + i32.eqz if i32.const 0 i32.const 1120 @@ -10978,12 +10992,13 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7440 + i32.const 7424 i32.store $0 - i32.const 7440 + i32.const 7424 call $~lib/util/string/strtod - f64.const -0 - f64.ne + i64.reinterpret_f64 + i64.const 0 + i64.ne if i32.const 0 i32.const 1120 @@ -10993,12 +11008,21 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 7472 + i32.const 3968 i32.store $0 - i32.const 7472 + i32.const 3968 call $~lib/util/string/strtod - f64.const 0 + local.tee $1 + local.get $1 f64.ne + i32.const 0 + i32.and + local.get $1 + i64.reinterpret_f64 + i64.const -9223372036854775808 + i64.eq + i32.or + i32.eqz if i32.const 0 i32.const 1120 @@ -11008,12 +11032,13 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3968 + i32.const 7456 i32.store $0 - i32.const 3968 + i32.const 7456 call $~lib/util/string/strtod - f64.const 0 - f64.ne + i64.reinterpret_f64 + i64.const -9223372036854775808 + i64.ne if i32.const 0 i32.const 1120 diff --git a/tests/compiler/std/string.ts b/tests/compiler/std/string.ts index 31ef782ba3..73b350e58f 100644 --- a/tests/compiler/std/string.ts +++ b/tests/compiler/std/string.ts @@ -202,7 +202,6 @@ assert(parseFloat("1e60") == 1e+60); // special cases assert(parseFloat("123.4e") == 123.4); -assert(parseFloat("-.00000") == -0.0); assert(parseFloat("1x") == 1.0); assert(parseFloat("-11e-1string") == -1.1); assert(parseFloat("01e1string") == 10); @@ -241,10 +240,11 @@ assert(parseFloat("0.a") == 0.0); assert(parseFloat("1..1") == 1.0); assert(parseFloat("0.1.1") == 0.1); assert(parseFloat("0. 1") == +0.0); -assert(parseFloat("+0.0") == +0.0); -assert(parseFloat("-0.0") == -0.0); -assert(parseFloat("+0") == +0); -assert(parseFloat("-0") == -0); +assert(Object.is(parseFloat("+0.0"), +0.0)); +assert(Object.is(parseFloat("-0.0"), -0.0)); +assert(Object.is(parseFloat("+0"), +0.0)); +assert(Object.is(parseFloat("-0"), -0.0)); +assert(Object.is(parseFloat("-.00000"), -0.0)); assert(isNaN(parseFloat("+"))); assert(isNaN(parseFloat("-"))); assert(isNaN(parseFloat("--0")));