Add String.fromCodePoint and 16-bit string compare (#174)

This commit is contained in:
Max Graey 2018-07-23 15:32:55 +03:00 committed by Daniel Wirtz
parent 1ecf85bf7c
commit 298a8f1688
15 changed files with 3188 additions and 3191 deletions

View File

@ -470,7 +470,7 @@ declare class String {
static fromCharCode(ls: i32, hs?: i32): string;
static fromCharCodes(arr: u16[]): string;
static fromCodePoint(cp: i32): string;
static fromCodePoint(code: i32): string;
static fromCodePoints(arr: i32[]): string;
readonly length: i32;

View File

@ -152,3 +152,11 @@ export function parse<T>(str: String, radix: i32 = 0): T {
}
return sign * num;
}
export function compareUTF16(ptr1: usize, ptr2: usize, len: usize): i32 {
var cmp: i32 = 0;
while (len && !(cmp = <i32>load<u16>(ptr1, HEADER_SIZE) - <i32>load<u16>(ptr2, HEADER_SIZE))) {
--len, ++ptr1, ++ptr2;
}
return cmp;
}

View File

@ -4,6 +4,7 @@ import {
EMPTY,
clamp,
allocate,
compareUTF16,
isWhiteSpaceOrLineTerminator,
CharCode,
parse
@ -14,7 +15,9 @@ export class String {
readonly length: i32; // capped to [0, MAX_LENGTH]
// TODO Add and handle second argument
static fromCharCode(code: i32): String {
if (!code) return changetype<String>("\0");
var out = allocate(1);
store<u16>(
changetype<usize>(out),
@ -24,6 +27,30 @@ export class String {
return out;
}
static fromCodePoint(code: i32): String {
assert(<u32>code <= 0x10FFFF); // Invalid code point range
if (!code) return changetype<String>("\0");
var sur = code > 0xFFFF;
var out = allocate(<i32>sur + 1);
if (!sur) {
store<u16>(
changetype<usize>(out),
<u16>code,
HEADER_SIZE
);
} else {
code -= 0x10000;
let hi: u32 = (code >>> 10) + 0xD800;
let lo: u32 = (code & 0x3FF) + 0xDC00;
store<u32>(
changetype<usize>(out),
(hi << 16) | lo,
HEADER_SIZE
);
}
return out;
}
@operator("[]")
charAt(pos: i32): String {
assert(this !== null);
@ -112,10 +139,10 @@ export class String {
var searchLength: isize = searchString.length;
var start: isize = end - searchLength;
if (start < 0) return false;
return !memory.compare(
changetype<usize>(this) + HEADER_SIZE + (start << 1),
changetype<usize>(searchString) + HEADER_SIZE,
searchLength << 1
return !compareUTF16(
changetype<usize>(this) + (start << 1),
changetype<usize>(searchString),
searchLength
);
}
@ -127,10 +154,10 @@ export class String {
var leftLength = left.length;
if (leftLength != right.length) return false;
return !memory.compare(
changetype<usize>(left) + HEADER_SIZE,
changetype<usize>(right) + HEADER_SIZE,
(<usize>leftLength << 1)
return !compareUTF16(
changetype<usize>(left),
changetype<usize>(right),
leftLength
);
}
@ -150,10 +177,10 @@ export class String {
if (!rightLength) return true;
var length = <usize>min<i32>(leftLength, rightLength);
return memory.compare(
changetype<usize>(left) + HEADER_SIZE,
changetype<usize>(right) + HEADER_SIZE,
length << 1
return compareUTF16(
changetype<usize>(left),
changetype<usize>(right),
length
) > 0;
}
@ -169,10 +196,10 @@ export class String {
if (!rightLength) return true;
var length = <usize>min<i32>(leftLength, rightLength);
return memory.compare(
changetype<usize>(left) + HEADER_SIZE,
changetype<usize>(right) + HEADER_SIZE,
length << 1
return compareUTF16(
changetype<usize>(left),
changetype<usize>(right),
length
) >= 0;
}
@ -187,10 +214,10 @@ export class String {
if (!leftLength) return true;
var length = <usize>min<i32>(leftLength, rightLength);
return memory.compare(
changetype<usize>(left) + HEADER_SIZE,
changetype<usize>(right) + HEADER_SIZE,
length << 1
return compareUTF16(
changetype<usize>(left),
changetype<usize>(right),
length
) < 0;
}
@ -206,10 +233,10 @@ export class String {
if (!leftLength) return true;
var length = <usize>min<i32>(leftLength, rightLength);
return memory.compare(
changetype<usize>(left) + HEADER_SIZE,
changetype<usize>(right) + HEADER_SIZE,
length << 1
return compareUTF16(
changetype<usize>(left),
changetype<usize>(right),
length
) <= 0;
}
@ -226,12 +253,11 @@ export class String {
if (!len) return -1;
var start = clamp<isize>(fromIndex, 0, len);
len -= searchLen;
// TODO: multiple char codes
for (let k: isize = start; k <= len; ++k) {
if (!memory.compare(
changetype<usize>(this) + HEADER_SIZE + (k << 1),
changetype<usize>(searchString) + HEADER_SIZE,
searchLen << 1
if (!compareUTF16(
changetype<usize>(this) + (k << 1),
changetype<usize>(searchString),
searchLen
)) {
return <i32>k;
}
@ -250,10 +276,10 @@ export class String {
// TODO: multiple char codes
for (let k = start; k >= 0; --k) {
if (!memory.compare(
changetype<usize>(this) + HEADER_SIZE + (k << 1),
changetype<usize>(searchString) + HEADER_SIZE,
searchLen << 1
if (!compareUTF16(
changetype<usize>(this) + (k << 1),
changetype<usize>(searchString),
searchLen
)) {
return <i32>k;
}
@ -269,13 +295,12 @@ export class String {
var len: isize = this.length;
var start = clamp<isize>(pos, 0, len);
var searchLength: isize = searchString.length;
if (searchLength + start > len) {
return false;
}
return !memory.compare(
changetype<usize>(this) + HEADER_SIZE + (start << 1),
changetype<usize>(searchString) + HEADER_SIZE,
searchLength << 1
if (searchLength + start > len) return false;
return !compareUTF16(
changetype<usize>(this) + (start << 1),
changetype<usize>(searchString),
searchLength
);
}

View File

@ -283,7 +283,7 @@ declare class String {
static fromCharCode(ls: i32, hs?: i32): string;
static fromCharCodes(arr: u16[]): string;
static fromCodePoint(cp: i32): string;
static fromCodePoint(code: i32): string;
static fromCodePoints(arr: i32[]): string;
readonly length: i32;

View File

@ -104,38 +104,26 @@
(get_local $0)
)
)
(func $~lib/memory/memcmp (; 3 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 3 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
)
(loop $continue|0
(if
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
)
)
(set_local $3
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
(if (result i32)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(get_local $2)
)
)
(if
(get_local $3)
(block
(set_local $2
(i32.sub
@ -159,29 +147,9 @@
)
)
)
(tee_local $0
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 4 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String.__eq (; 5 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 4 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(if
(i32.eq
@ -228,23 +196,14 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(i32.const 4)
)
(i32.add
(get_local $1)
(i32.const 4)
)
(i32.shl
(get_local $2)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $2)
)
)
)
(func $object-literal/bar (; 6 ;) (type $iv) (param $0 i32)
(func $object-literal/bar (; 5 ;) (type $iv) (param $0 i32)
(if
(i32.ne
(i32.load
@ -282,7 +241,7 @@
)
)
)
(func $object-literal/bar2 (; 7 ;) (type $iv) (param $0 i32)
(func $object-literal/bar2 (; 6 ;) (type $iv) (param $0 i32)
(if
(i32.ne
(i32.load
@ -301,7 +260,7 @@
)
)
)
(func $object-literal/Foo2#test (; 8 ;) (type $iv) (param $0 i32)
(func $object-literal/Foo2#test (; 7 ;) (type $iv) (param $0 i32)
(if
(i32.ne
(i32.load
@ -320,7 +279,7 @@
)
)
)
(func $start (; 9 ;) (type $v)
(func $start (; 8 ;) (type $v)
(local $0 i32)
(set_global $~lib/allocator/arena/startOffset
(i32.const 80)

View File

@ -134,36 +134,29 @@
)
)
)
(func $~lib/memory/memcmp (; 3 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 3 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
(set_local $3
(i32.const 0)
)
(block $break|0
(loop $continue|0
(if
(if (result i32)
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(get_local $3)
(get_local $2)
)
(block
(block
@ -191,27 +184,9 @@
)
)
)
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 4 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String.__eq (; 5 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 4 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(if
@ -258,23 +233,14 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.add
(get_local $1)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.shl
(get_local $3)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $3)
)
)
)
(func $object-literal/bar (; 6 ;) (type $iv) (param $0 i32)
(func $object-literal/bar (; 5 ;) (type $iv) (param $0 i32)
(if
(i32.eqz
(i32.eq
@ -314,7 +280,7 @@
)
)
)
(func $object-literal/bar2 (; 7 ;) (type $iv) (param $0 i32)
(func $object-literal/bar2 (; 6 ;) (type $iv) (param $0 i32)
(if
(i32.eqz
(i32.eq
@ -335,7 +301,7 @@
)
)
)
(func $object-literal/Foo2#test (; 8 ;) (type $iv) (param $0 i32)
(func $object-literal/Foo2#test (; 7 ;) (type $iv) (param $0 i32)
(if
(i32.eqz
(i32.eq
@ -356,7 +322,7 @@
)
)
)
(func $start (; 9 ;) (type $v)
(func $start (; 8 ;) (type $v)
(local $0 i32)
(local $1 i32)
(local $2 i32)

View File

@ -59,38 +59,26 @@
)
)
)
(func $~lib/memory/memcmp (; 4 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 4 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
)
(loop $continue|0
(if
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
)
)
(set_local $3
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
(if (result i32)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(get_local $2)
)
)
(if
(get_local $3)
(block
(set_local $2
(i32.sub
@ -114,29 +102,9 @@
)
)
)
(tee_local $0
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 5 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String#startsWith (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/string/String#startsWith (; 5 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(if
@ -147,7 +115,7 @@
(call $~lib/env/abort
(i32.const 0)
(i32.const 12)
(i32.const 265)
(i32.const 291)
(i32.const 4)
)
(unreachable)
@ -200,29 +168,20 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(call $~lib/internal/string/compareUTF16
(i32.add
(i32.add
(get_local $0)
(i32.const 4)
)
(get_local $0)
(i32.shl
(get_local $2)
(i32.const 1)
)
)
(i32.add
(get_local $1)
(i32.const 4)
)
(i32.shl
(get_local $4)
(i32.const 1)
)
(get_local $1)
(get_local $4)
)
)
)
(func $std/array-access/stringArrayMethodCall (; 7 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayMethodCall (; 6 ;) (type $ii) (param $0 i32) (result i32)
(call $~lib/string/String#startsWith
(call $~lib/array/Array<Array<i32>>#__get
(get_local $0)
@ -232,7 +191,7 @@
(i32.const 0)
)
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 8 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayArrayPropertyAccess (; 7 ;) (type $ii) (param $0 i32) (result i32)
(i32.load
(call $~lib/array/Array<Array<i32>>#__get
(call $~lib/array/Array<Array<i32>>#__get
@ -243,7 +202,7 @@
)
)
)
(func $std/array-access/stringArrayArrayMethodCall (; 9 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayArrayMethodCall (; 8 ;) (type $ii) (param $0 i32) (result i32)
(call $~lib/string/String#startsWith
(call $~lib/array/Array<Array<i32>>#__get
(call $~lib/array/Array<Array<i32>>#__get

View File

@ -130,36 +130,29 @@
)
)
)
(func $~lib/memory/memcmp (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
(set_local $3
(i32.const 0)
)
(block $break|0
(loop $continue|0
(if
(if (result i32)
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(get_local $3)
(get_local $2)
)
(block
(block
@ -187,27 +180,9 @@
)
)
)
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String#startsWith (; 8 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/string/String#startsWith (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -226,7 +201,7 @@
(call $~lib/env/abort
(i32.const 0)
(i32.const 12)
(i32.const 265)
(i32.const 291)
(i32.const 4)
)
(unreachable)
@ -297,29 +272,20 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(call $~lib/internal/string/compareUTF16
(i32.add
(i32.add
(get_local $0)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(get_local $0)
(i32.shl
(get_local $8)
(i32.const 1)
)
)
(i32.add
(get_local $1)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.shl
(get_local $9)
(i32.const 1)
)
(get_local $1)
(get_local $9)
)
)
)
(func $std/array-access/stringArrayMethodCall (; 9 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayMethodCall (; 8 ;) (type $ii) (param $0 i32) (result i32)
(call $~lib/string/String#startsWith
(call $~lib/array/Array<String>#__get
(get_local $0)
@ -329,7 +295,7 @@
(i32.const 0)
)
)
(func $~lib/array/Array<Array<String>>#__get (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<Array<String>>#__get (; 9 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(set_local $2
(i32.load
@ -360,7 +326,7 @@
(unreachable)
)
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 11 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayArrayPropertyAccess (; 10 ;) (type $ii) (param $0 i32) (result i32)
(i32.load
(call $~lib/array/Array<String>#__get
(call $~lib/array/Array<Array<String>>#__get
@ -371,7 +337,7 @@
)
)
)
(func $std/array-access/stringArrayArrayMethodCall (; 12 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayArrayMethodCall (; 11 ;) (type $ii) (param $0 i32) (result i32)
(call $~lib/string/String#startsWith
(call $~lib/array/Array<String>#__get
(call $~lib/array/Array<Array<String>>#__get

View File

@ -5473,38 +5473,26 @@
)
)
)
(func $~lib/memory/memcmp (; 90 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 90 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
)
(loop $continue|0
(if
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
)
)
(set_local $3
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
(if (result i32)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(get_local $2)
)
)
(if
(get_local $3)
(block
(set_local $2
(i32.sub
@ -5528,29 +5516,9 @@
)
)
)
(tee_local $0
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 91 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String.__gt (; 92 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__gt (; 91 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(if
@ -5610,31 +5578,22 @@
)
)
(i32.gt_s
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(i32.const 4)
)
(i32.add
(get_local $1)
(i32.const 4)
)
(i32.shl
(select
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(select
(get_local $2)
(get_local $3)
(i32.lt_s
(get_local $2)
(get_local $3)
(i32.lt_s
(get_local $2)
(get_local $3)
)
)
(i32.const 1)
)
)
(i32.const 0)
)
)
(func $~lib/string/String.__lt (; 93 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__lt (; 92 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(if
@ -5694,31 +5653,22 @@
)
)
(i32.lt_s
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(i32.const 4)
)
(i32.add
(get_local $1)
(i32.const 4)
)
(i32.shl
(select
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(select
(get_local $2)
(get_local $3)
(i32.lt_s
(get_local $2)
(get_local $3)
(i32.lt_s
(get_local $2)
(get_local $3)
)
)
(i32.const 1)
)
)
(i32.const 0)
)
)
(func $start~anonymous|49 (; 94 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $start~anonymous|49 (; 93 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.sub
(call $~lib/string/String.__gt
(get_local $0)
@ -5730,7 +5680,7 @@
)
)
)
(func $~lib/string/String.__eq (; 95 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 94 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(if
(i32.eq
@ -5777,23 +5727,14 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(i32.const 4)
)
(i32.add
(get_local $1)
(i32.const 4)
)
(i32.shl
(get_local $2)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $2)
)
)
)
(func $~lib/string/String.__ne (; 96 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__ne (; 95 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.eqz
(call $~lib/string/String.__eq
(get_local $0)
@ -5801,7 +5742,7 @@
)
)
)
(func $std/array/isArraysEqual<String> (; 97 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $std/array/isArraysEqual<String> (; 96 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eqz
@ -5864,7 +5805,7 @@
)
(i32.const 1)
)
(func $~lib/internal/string/allocate (; 98 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/string/allocate (; 97 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(if
(tee_local $1
@ -5910,7 +5851,7 @@
)
(get_local $1)
)
(func $~lib/string/String#charAt (; 99 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#charAt (; 98 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(if
(i32.eqz
@ -5920,7 +5861,7 @@
(call $~lib/env/abort
(i32.const 0)
(i32.const 696)
(i32.const 29)
(i32.const 56)
(i32.const 4)
)
(unreachable)
@ -5955,7 +5896,7 @@
)
(get_local $2)
)
(func $~lib/string/String#concat (; 100 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#concat (; 99 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -5967,7 +5908,7 @@
(call $~lib/env/abort
(i32.const 0)
(i32.const 696)
(i32.const 85)
(i32.const 112)
(i32.const 4)
)
(unreachable)
@ -6041,7 +5982,7 @@
)
(get_local $2)
)
(func $~lib/string/String.__concat (; 101 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__concat (; 100 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(if
(i32.eqz
(get_local $0)
@ -6055,7 +5996,7 @@
(get_local $1)
)
)
(func $std/array/createRandomString (; 102 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array/createRandomString (; 101 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(set_local $1
@ -6100,7 +6041,7 @@
)
(get_local $1)
)
(func $std/array/createRandomStringArray (; 103 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array/createRandomStringArray (; 102 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(call $~lib/array/Array<i32>#constructor
@ -6144,7 +6085,7 @@
)
(get_local $1)
)
(func $start (; 104 ;) (type $v)
(func $start (; 103 ;) (type $v)
(set_global $~lib/allocator/arena/startOffset
(i32.const 792)
)

View File

@ -7794,36 +7794,29 @@
)
)
)
(func $~lib/memory/memcmp (; 121 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 121 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
(set_local $3
(i32.const 0)
)
(block $break|0
(loop $continue|0
(if
(if (result i32)
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(get_local $3)
(get_local $2)
)
(block
(block
@ -7851,27 +7844,9 @@
)
)
)
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 122 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String.__gt (; 123 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__gt (; 122 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -7945,24 +7920,15 @@
)
)
(i32.gt_s
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.add
(get_local $1)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.shl
(get_local $6)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $6)
)
(i32.const 0)
)
)
(func $~lib/string/String.__lt (; 124 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__lt (; 123 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -8036,24 +8002,15 @@
)
)
(i32.lt_s
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.add
(get_local $1)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.shl
(get_local $6)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $6)
)
(i32.const 0)
)
)
(func $start~anonymous|49 (; 125 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $start~anonymous|49 (; 124 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.sub
(call $~lib/string/String.__gt
(get_local $0)
@ -8065,12 +8022,12 @@
)
)
)
(func $~lib/array/Array<String>#get:length (; 126 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/array/Array<String>#get:length (; 125 ;) (type $ii) (param $0 i32) (result i32)
(i32.load offset=4
(get_local $0)
)
)
(func $~lib/internal/array/insertionSort<String> (; 127 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/internal/array/insertionSort<String> (; 126 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -8226,7 +8183,7 @@
)
(get_local $0)
)
(func $~lib/array/Array<String>#sort (; 128 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<String>#sort (; 127 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -8362,7 +8319,7 @@
)
)
)
(func $~lib/array/Array<String>#__get (; 129 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<String>#__get (; 128 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(set_local $2
(i32.load
@ -8393,7 +8350,7 @@
(unreachable)
)
)
(func $std/array/isSorted<String> (; 130 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $std/array/isSorted<String> (; 129 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(block $break|0
@ -8454,7 +8411,7 @@
)
(i32.const 1)
)
(func $std/array/assertSorted<String> (; 131 ;) (type $iiv) (param $0 i32) (param $1 i32)
(func $std/array/assertSorted<String> (; 130 ;) (type $iiv) (param $0 i32) (param $1 i32)
(if
(i32.eqz
(call $std/array/isSorted<String>
@ -8476,7 +8433,7 @@
)
)
)
(func $~lib/string/String.__eq (; 132 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 131 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(if
@ -8523,23 +8480,14 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.add
(get_local $1)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.shl
(get_local $3)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $3)
)
)
)
(func $~lib/string/String.__ne (; 133 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__ne (; 132 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.eqz
(call $~lib/string/String.__eq
(get_local $0)
@ -8547,7 +8495,7 @@
)
)
)
(func $std/array/isArraysEqual<String> (; 134 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $std/array/isArraysEqual<String> (; 133 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eqz
@ -8613,7 +8561,7 @@
)
(i32.const 1)
)
(func $~lib/array/Array<String>#constructor (; 135 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<String>#constructor (; 134 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -8684,7 +8632,7 @@
)
(get_local $0)
)
(func $~lib/internal/string/allocate (; 136 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/string/allocate (; 135 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(if
@ -8730,7 +8678,7 @@
)
(get_local $2)
)
(func $~lib/string/String#charAt (; 137 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#charAt (; 136 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(if
(i32.eqz
@ -8743,7 +8691,7 @@
(call $~lib/env/abort
(i32.const 0)
(i32.const 696)
(i32.const 29)
(i32.const 56)
(i32.const 4)
)
(unreachable)
@ -8779,7 +8727,7 @@
)
(get_local $2)
)
(func $~lib/string/String#concat (; 138 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#concat (; 137 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -8795,7 +8743,7 @@
(call $~lib/env/abort
(i32.const 0)
(i32.const 696)
(i32.const 85)
(i32.const 112)
(i32.const 4)
)
(unreachable)
@ -8876,7 +8824,7 @@
)
(get_local $5)
)
(func $~lib/string/String.__concat (; 139 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__concat (; 138 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(if
(i32.eqz
(get_local $0)
@ -8890,7 +8838,7 @@
(get_local $1)
)
)
(func $std/array/createRandomString (; 140 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array/createRandomString (; 139 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 f64)
@ -8946,7 +8894,7 @@
)
(get_local $1)
)
(func $~lib/array/Array<String>#__set (; 141 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<String>#__set (; 140 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(set_local $3
@ -9021,7 +8969,7 @@
)
)
)
(func $std/array/createRandomStringArray (; 142 ;) (type $ii) (param $0 i32) (result i32)
(func $std/array/createRandomStringArray (; 141 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(set_local $1
@ -9068,7 +9016,7 @@
)
(get_local $1)
)
(func $start~anonymous|50 (; 143 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $start~anonymous|50 (; 142 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.sub
(call $~lib/string/String.__gt
(get_local $0)
@ -9080,7 +9028,7 @@
)
)
)
(func $start (; 144 ;) (type $v)
(func $start (; 143 ;) (type $v)
(set_global $~lib/allocator/arena/startOffset
(i32.and
(i32.add

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,15 @@ assert(changetype<usize>(str) == changetype<usize>("hi, I'm a string"));
assert(str.length == 16);
assert(str.charCodeAt(0) == 0x68);
assert(String.fromCharCode(0) == "\0");
assert(String.fromCharCode(54) == "6");
assert(String.fromCharCode(0x10000 + 54) == "6");
assert(String.fromCodePoint(0) == "\0");
assert(String.fromCodePoint(54) == "6");
assert(String.fromCodePoint(0x1D306), "\uD834\uDF06");
assert(str.startsWith("hi"));
assert(str.endsWith("string"));
assert(str.includes("I'm"));
@ -82,6 +91,10 @@ assert(!("" > ""));
assert("" >= "");
assert("" <= "");
var a = String.fromCodePoint(0xFF61);
var b = String.fromCodePoint(0xD800) + String.fromCodePoint(0xDC02);
assert(a > b);
assert("123".length == 3);
assert("".repeat(100) == "");

File diff suppressed because it is too large Load Diff

View File

@ -679,38 +679,26 @@
)
(get_local $2)
)
(func $~lib/memory/memcmp (; 12 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 12 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
)
(loop $continue|0
(if
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
)
)
(set_local $3
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
(if (result i32)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(get_local $2)
)
)
(if
(get_local $3)
(block
(set_local $2
(i32.sub
@ -734,29 +722,9 @@
)
)
)
(tee_local $0
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 13 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String.__eq (; 14 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 13 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(if
(i32.eq
@ -803,23 +771,14 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(i32.const 4)
)
(i32.add
(get_local $1)
(i32.const 4)
)
(i32.shl
(get_local $2)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $2)
)
)
)
(func $~lib/map/Map<String,usize>#find (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/map/Map<String,usize>#find (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(set_local $2
(i32.load offset=8
(i32.add
@ -882,7 +841,7 @@
)
(i32.const 0)
)
(func $~lib/map/Map<String,usize>#has (; 16 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<String,usize>#has (; 15 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.ne
(call $~lib/map/Map<String,usize>#find
(get_local $0)
@ -894,7 +853,7 @@
(i32.const 0)
)
)
(func $~lib/map/Map<String,usize>#get (; 17 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<String,usize>#get (; 16 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(tee_local $0
(if (result i32)
(tee_local $0
@ -913,7 +872,7 @@
)
)
)
(func $~lib/map/Map<String,usize>#rehash (; 18 ;) (type $iiv) (param $0 i32) (param $1 i32)
(func $~lib/map/Map<String,usize>#rehash (; 17 ;) (type $iiv) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -1076,7 +1035,7 @@
)
)
)
(func $~lib/map/Map<String,usize>#set (; 19 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/map/Map<String,usize>#set (; 18 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1213,7 +1172,7 @@
)
)
)
(func $~lib/internal/hash/hash32 (; 20 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/hash/hash32 (; 19 ;) (type $ii) (param $0 i32) (result i32)
(i32.mul
(i32.xor
(i32.mul
@ -1258,7 +1217,7 @@
(i32.const 16777619)
)
)
(func $~lib/map/Map<usize,String>#find (; 21 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/map/Map<usize,String>#find (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(set_local $2
(i32.load offset=8
(i32.add
@ -1321,7 +1280,7 @@
)
(i32.const 0)
)
(func $~lib/map/Map<usize,String>#rehash (; 22 ;) (type $iiv) (param $0 i32) (param $1 i32)
(func $~lib/map/Map<usize,String>#rehash (; 21 ;) (type $iiv) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -1484,7 +1443,7 @@
)
)
)
(func $~lib/map/Map<usize,String>#set (; 23 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/map/Map<usize,String>#set (; 22 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1621,7 +1580,7 @@
)
)
)
(func $~lib/symbol/Symbol.for (; 24 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/symbol/Symbol.for (; 23 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(if
(get_global $~lib/symbol/stringToId)
@ -1676,7 +1635,7 @@
)
(get_local $1)
)
(func $~lib/map/Map<usize,String>#has (; 25 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<usize,String>#has (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.ne
(call $~lib/map/Map<usize,String>#find
(get_local $0)
@ -1688,7 +1647,7 @@
(i32.const 0)
)
)
(func $~lib/map/Map<usize,String>#get (; 26 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<usize,String>#get (; 25 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(tee_local $0
(if (result i32)
(tee_local $0
@ -1707,7 +1666,7 @@
)
)
)
(func $~lib/symbol/Symbol.keyFor (; 27 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/symbol/Symbol.keyFor (; 26 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(if
(tee_local $1
@ -1734,7 +1693,7 @@
)
)
)
(func $start (; 28 ;) (type $v)
(func $start (; 27 ;) (type $v)
(set_global $~lib/allocator/arena/startOffset
(i32.const 160)
)

View File

@ -854,36 +854,29 @@
)
(get_local $1)
)
(func $~lib/memory/memcmp (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/internal/string/compareUTF16 (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(if
(i32.eq
(get_local $0)
(get_local $1)
)
(return
(i32.const 0)
)
(set_local $3
(i32.const 0)
)
(block $break|0
(loop $continue|0
(if
(if (result i32)
(tee_local $3
(i32.ne
(get_local $2)
(i32.const 0)
(get_local $2)
(i32.eqz
(tee_local $3
(i32.sub
(i32.load16_u offset=4
(get_local $0)
)
(i32.load16_u offset=4
(get_local $1)
)
)
)
)
(i32.eq
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(get_local $3)
(get_local $2)
)
(block
(block
@ -911,27 +904,9 @@
)
)
)
(if (result i32)
(get_local $2)
(i32.sub
(i32.load8_u
(get_local $0)
)
(i32.load8_u
(get_local $1)
)
)
(i32.const 0)
)
(get_local $3)
)
(func $~lib/memory/memory.compare (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(call $~lib/memory/memcmp
(get_local $0)
(get_local $1)
(get_local $2)
)
)
(func $~lib/string/String.__eq (; 16 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String.__eq (; 15 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(if
@ -978,23 +953,14 @@
)
)
(i32.eqz
(call $~lib/memory/memory.compare
(i32.add
(get_local $0)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.add
(get_local $1)
(get_global $~lib/internal/string/HEADER_SIZE)
)
(i32.shl
(get_local $3)
(i32.const 1)
)
(call $~lib/internal/string/compareUTF16
(get_local $0)
(get_local $1)
(get_local $3)
)
)
)
(func $~lib/map/Map<String,usize>#find (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/map/Map<String,usize>#find (; 16 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(set_local $3
@ -1064,7 +1030,7 @@
)
(i32.const 0)
)
(func $~lib/map/Map<String,usize>#has (; 18 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<String,usize>#has (; 17 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.ne
(call $~lib/map/Map<String,usize>#find
(get_local $0)
@ -1080,7 +1046,7 @@
(i32.const 0)
)
)
(func $~lib/map/Map<String,usize>#get (; 19 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<String,usize>#get (; 18 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(set_local $2
(call $~lib/map/Map<String,usize>#find
@ -1103,7 +1069,7 @@
(unreachable)
)
)
(func $~lib/map/Map<String,usize>#rehash (; 20 ;) (type $iiv) (param $0 i32) (param $1 i32)
(func $~lib/map/Map<String,usize>#rehash (; 19 ;) (type $iiv) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -1300,7 +1266,7 @@
)
)
)
(func $~lib/map/Map<String,usize>#set (; 21 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/map/Map<String,usize>#set (; 20 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1449,7 +1415,7 @@
)
)
)
(func $~lib/internal/hash/hash32 (; 22 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/internal/hash/hash32 (; 21 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(get_global $~lib/internal/hash/FNV_OFFSET)
@ -1510,7 +1476,7 @@
)
(get_local $1)
)
(func $~lib/map/Map<usize,String>#find (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/map/Map<usize,String>#find (; 22 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(set_local $3
@ -1580,7 +1546,7 @@
)
(i32.const 0)
)
(func $~lib/map/Map<usize,String>#rehash (; 24 ;) (type $iiv) (param $0 i32) (param $1 i32)
(func $~lib/map/Map<usize,String>#rehash (; 23 ;) (type $iiv) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -1777,7 +1743,7 @@
)
)
)
(func $~lib/map/Map<usize,String>#set (; 25 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/map/Map<usize,String>#set (; 24 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1926,7 +1892,7 @@
)
)
)
(func $~lib/symbol/Symbol.for (; 26 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/symbol/Symbol.for (; 25 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(if
@ -1990,7 +1956,7 @@
)
(get_local $2)
)
(func $~lib/map/Map<usize,String>#has (; 27 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<usize,String>#has (; 26 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.ne
(call $~lib/map/Map<usize,String>#find
(get_local $0)
@ -2006,7 +1972,7 @@
(i32.const 0)
)
)
(func $~lib/map/Map<usize,String>#get (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/map/Map<usize,String>#get (; 27 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(set_local $2
(call $~lib/map/Map<usize,String>#find
@ -2029,7 +1995,7 @@
(unreachable)
)
)
(func $~lib/symbol/Symbol.keyFor (; 29 ;) (type $ii) (param $0 i32) (result i32)
(func $~lib/symbol/Symbol.keyFor (; 28 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(if (result i32)
(if (result i32)
@ -2052,7 +2018,7 @@
(i32.const 0)
)
)
(func $start (; 30 ;) (type $v)
(func $start (; 29 ;) (type $v)
(set_global $~lib/allocator/arena/startOffset
(i32.and
(i32.add