Skip to content
Prev Previous commit
Next Next commit
better
  • Loading branch information
MaxGraey committed Aug 25, 2022
commit 0cd1d33afc415290844add936c59a947a7ce4a82
12 changes: 6 additions & 6 deletions std/assembly/util/string.ts
Original file line number Diff line number Diff line change
Expand Up @@ -847,13 +847,13 @@ export function strtob(str: string): bool {
var size: usize = str.length << 1;
var offset: usize = 0;
if (size > 8) {
// trim end whitespaces
// try trim end whitespaces first
while (size && isSpace(load<u16>(changetype<usize>(str) + size - 2))) size -= 2;
}
if (size > 8) {
// trim start whitespaces
while (offset < size && isSpace(load<u16>(changetype<usize>(str) + offset))) offset += 2;
size -= offset;
if (size > 8) {
// trim start whitespaces
while (offset < size && isSpace(load<u16>(changetype<usize>(str) + offset))) offset += 2;
size -= offset;
}
}
if (size != 8) return false;
// "true" represents as \00\e\00\u\00\e\00\t (00 65 00 75 00 72 00 74)
Expand Down
58 changes: 29 additions & 29 deletions tests/compiler/std/string.debug.wat
Original file line number Diff line number Diff line change
Expand Up @@ -3454,38 +3454,38 @@
br $while-continue|0
end
end
end
local.get $size
i32.const 8
i32.gt_u
if
loop $while-continue|1
local.get $offset
local.get $size
i32.lt_u
if (result i32)
local.get $str
local.get $offset
i32.add
i32.load16_u
call $~lib/util/string/isSpace
else
i32.const 0
end
local.set $var$3
local.get $var$3
if
local.get $size
i32.const 8
i32.gt_u
if
loop $while-continue|1
local.get $offset
i32.const 2
i32.add
local.set $offset
br $while-continue|1
local.get $size
i32.lt_u
if (result i32)
local.get $str
local.get $offset
i32.add
i32.load16_u
call $~lib/util/string/isSpace
else
i32.const 0
end
local.set $var$3
local.get $var$3
if
local.get $offset
i32.const 2
i32.add
local.set $offset
br $while-continue|1
end
end
local.get $size
local.get $offset
i32.sub
local.set $size
end
local.get $size
local.get $offset
i32.sub
local.set $size
end
local.get $size
i32.const 8
Expand Down
166 changes: 84 additions & 82 deletions tests/compiler/std/string.release.wat
Original file line number Diff line number Diff line change
Expand Up @@ -2829,7 +2829,7 @@
local.tee $1
i32.const 8
i32.gt_u
if
if (result i32)
loop $while-continue|0
local.get $1
if (result i32)
Expand Down Expand Up @@ -2913,97 +2913,99 @@
br $while-continue|0
end
end
end
local.get $1
i32.const 8
i32.gt_u
if (result i32)
loop $while-continue|1
local.get $1
local.get $2
i32.gt_u
if (result i32)
block $__inlined_func$~lib/util/string/isSpace0 (result i32)
local.get $0
local.get $2
i32.add
i32.load16_u
local.tee $3
i32.const 5760
i32.lt_u
if
local.get $3
i32.const 128
i32.or
i32.const 160
i32.eq
local.get $3
i32.const 9
i32.sub
i32.const 4
i32.le_u
i32.or
br $__inlined_func$~lib/util/string/isSpace0
end
i32.const 1
local.get $3
i32.const -8192
i32.add
i32.const 10
i32.le_u
br_if $__inlined_func$~lib/util/string/isSpace0
drop
block $break|01
block $case6|02
local.get $3
i32.const 5760
i32.eq
br_if $case6|02
local.get $3
i32.const 8232
i32.eq
br_if $case6|02
local.get $3
i32.const 8233
i32.eq
br_if $case6|02
local.get $3
i32.const 8239
i32.eq
br_if $case6|02
local.get $3
i32.const 8287
i32.eq
br_if $case6|02
local.get $1
i32.const 8
i32.gt_u
if (result i32)
loop $while-continue|1
local.get $1
local.get $2
i32.gt_u
if (result i32)
block $__inlined_func$~lib/util/string/isSpace0 (result i32)
local.get $0
local.get $2
i32.add
i32.load16_u
local.tee $3
i32.const 5760
i32.lt_u
if
local.get $3
i32.const 12288
i32.const 128
i32.or
i32.const 160
i32.eq
br_if $case6|02
local.get $3
i32.const 65279
i32.eq
br_if $case6|02
br $break|01
i32.const 9
i32.sub
i32.const 4
i32.le_u
i32.or
br $__inlined_func$~lib/util/string/isSpace0
end
i32.const 1
br $__inlined_func$~lib/util/string/isSpace0
local.get $3
i32.const -8192
i32.add
i32.const 10
i32.le_u
br_if $__inlined_func$~lib/util/string/isSpace0
drop
block $break|01
block $case6|02
local.get $3
i32.const 5760
i32.eq
br_if $case6|02
local.get $3
i32.const 8232
i32.eq
br_if $case6|02
local.get $3
i32.const 8233
i32.eq
br_if $case6|02
local.get $3
i32.const 8239
i32.eq
br_if $case6|02
local.get $3
i32.const 8287
i32.eq
br_if $case6|02
local.get $3
i32.const 12288
i32.eq
br_if $case6|02
local.get $3
i32.const 65279
i32.eq
br_if $case6|02
br $break|01
end
i32.const 1
br $__inlined_func$~lib/util/string/isSpace0
end
i32.const 0
end
else
i32.const 0
end
else
i32.const 0
end
if
local.get $2
i32.const 2
i32.add
local.set $2
br $while-continue|1
if
local.get $2
i32.const 2
i32.add
local.set $2
br $while-continue|1
end
end
local.get $1
local.get $2
i32.sub
else
local.get $1
end
local.get $1
local.get $2
i32.sub
else
local.get $1
end
Expand Down