mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-12 22:41:27 +00:00
Make '===' and '!==' ignore operator overloads
While not semantically equivalent with JS semantics, this appears to be the right thing to do in AS. Also avoids using changetype just for this purpose, which will eventually become considered unsafe.
This commit is contained in:
@ -18,7 +18,7 @@ export class String {
|
||||
|
||||
@operator("[]")
|
||||
charAt(pos: i32): String {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
|
||||
if (<u32>pos >= <u32>this.length) {
|
||||
return EMPTY;
|
||||
@ -37,7 +37,7 @@ export class String {
|
||||
}
|
||||
|
||||
charCodeAt(pos: i32): i32 {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
if (<u32>pos >= <u32>this.length) {
|
||||
return -1; // (NaN)
|
||||
}
|
||||
@ -48,7 +48,7 @@ export class String {
|
||||
}
|
||||
|
||||
codePointAt(pos: i32): i32 {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
if (<u32>pos >= <u32>this.length) {
|
||||
return -1; // (undefined)
|
||||
}
|
||||
@ -76,8 +76,8 @@ export class String {
|
||||
}
|
||||
|
||||
concat(other: String): String {
|
||||
assert(this != null);
|
||||
if (other == null) other = changetype<String>("null");
|
||||
assert(this !== null);
|
||||
if (other === null) other = changetype<String>("null");
|
||||
var thisLen: isize = this.length;
|
||||
var otherLen: isize = other.length;
|
||||
var outLen: usize = thisLen + otherLen;
|
||||
@ -97,10 +97,8 @@ export class String {
|
||||
}
|
||||
|
||||
endsWith(searchString: String, endPosition: i32 = 0x7fffffff): bool {
|
||||
assert(this != null);
|
||||
if (searchString == null) {
|
||||
return false;
|
||||
}
|
||||
assert(this !== null);
|
||||
if (searchString === null) return false;
|
||||
var end: isize = <isize>min(max(endPosition, 0), this.length);
|
||||
var searchLength: isize = searchString.length;
|
||||
var start: isize = end - searchLength;
|
||||
@ -116,8 +114,8 @@ export class String {
|
||||
|
||||
@operator("==")
|
||||
private static __eq(left: String, right: String): bool {
|
||||
if (!changetype<usize>(left)) return !changetype<usize>(right);
|
||||
else if (!changetype<usize>(right)) return false;
|
||||
if (left === null) return right === null;
|
||||
else if (right === null) return false;
|
||||
var leftLength = left.length;
|
||||
if (leftLength != right.length) return false;
|
||||
return !compare_memory(
|
||||
@ -217,10 +215,8 @@ export class String {
|
||||
}
|
||||
|
||||
indexOf(searchString: String, position: i32 = 0): i32 {
|
||||
assert(this != null);
|
||||
if (searchString == null) {
|
||||
searchString = changetype<String>("null");
|
||||
}
|
||||
assert(this !== null);
|
||||
if (searchString === null) searchString = changetype<String>("null");
|
||||
var pos: isize = position;
|
||||
var len: isize = this.length;
|
||||
var start: isize = min<isize>(max<isize>(pos, 0), len);
|
||||
@ -240,10 +236,8 @@ export class String {
|
||||
}
|
||||
|
||||
startsWith(searchString: String, position: i32 = 0): bool {
|
||||
assert(this != null);
|
||||
if (searchString == null) {
|
||||
searchString = changetype<String>("null");
|
||||
}
|
||||
assert(this !== null);
|
||||
if (searchString === null) searchString = changetype<String>("null");
|
||||
var pos: isize = position;
|
||||
var len: isize = this.length;
|
||||
var start: isize = min<isize>(max<isize>(pos, 0), len);
|
||||
@ -259,7 +253,7 @@ export class String {
|
||||
}
|
||||
|
||||
substr(start: i32, length: i32 = i32.MAX_VALUE): String {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
var intStart: isize = start;
|
||||
var end: isize = length;
|
||||
var size: isize = this.length;
|
||||
@ -280,7 +274,7 @@ export class String {
|
||||
}
|
||||
|
||||
substring(start: i32, end: i32 = i32.MAX_VALUE): String {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
var len = this.length;
|
||||
var finalStart = min<i32>(max<i32>(start, 0), len);
|
||||
var finalEnd = min<i32>(max<i32>(end, 0), len);
|
||||
@ -303,7 +297,7 @@ export class String {
|
||||
}
|
||||
|
||||
trim(): String {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
var length: usize = this.length;
|
||||
while (
|
||||
length &&
|
||||
@ -338,7 +332,7 @@ export class String {
|
||||
}
|
||||
|
||||
trimLeft(): String {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
var start: isize = 0;
|
||||
var len: isize = this.length;
|
||||
while (
|
||||
@ -366,7 +360,7 @@ export class String {
|
||||
}
|
||||
|
||||
trimRight(): String {
|
||||
assert(this != null);
|
||||
assert(this !== null);
|
||||
var len: isize = this.length;
|
||||
while (
|
||||
len > 0 &&
|
||||
|
Reference in New Issue
Block a user