make std/string test ok again

This commit is contained in:
dcode
2019-03-16 14:48:22 +01:00
parent 05a35f42f6
commit 0c388ca4c6
9 changed files with 3929 additions and 4779 deletions

View File

@ -346,12 +346,14 @@ export class Array<T> extends ArrayBufferView {
}
reverse(): Array<T> {
var base = this.dataStart;
for (let front = 0, back = this.length_ - 1; front < back; ++front, --back) {
let temp = load<T>(base, front);
let dest = base + (<usize>back << alignof<T>());
store<T>(base + (<usize>front << alignof<T>()), load<T>(dest));
store<T>(dest, temp);
var front = this.dataStart;
var back = this.dataEnd - sizeof<T>();
while (front < back) {
let temp = load<T>(front);
store<T>(front, load<T>(back));
store<T>(back, temp);
front += sizeof<T>();
back -= sizeof<T>();
}
return this;
}

View File

@ -192,7 +192,7 @@ function assertUnregistered(ref: usize): void {
/** Asserts that a managed object has already been registered. */
// @ts-ignore: decorator
function assertRegistered(ref: usize): void {
assert(ref > HEAP_BASE); // must be a heap object
// may be a static string or buffer (not a heap object)
assert(changetype<HEADER>(ref - HEADER_SIZE).classId != HEADER_MAGIC);
}

View File

@ -1,4 +1,4 @@
import { ALLOCATE, REGISTER, HEADER, HEADER_SIZE } from "./runtime";
import { ALLOCATE, REGISTER, HEADER, HEADER_SIZE, ArrayBufferView, LINK } from "./runtime";
import { MAX_SIZE_32 } from "./util/allocator";
import { compareImpl, parse, CharCode, isWhiteSpaceOrLineTerminator } from "./util/string";
@ -359,22 +359,20 @@ import { compareImpl, parse, CharCode, isWhiteSpaceOrLineTerminator } from "./ut
// split by chars
length = min<isize>(length, <isize>limit);
let result = new Array<String>(length);
let buffer = unreachable(); // TODO
// let buffer = <ArrayBuffer>result.buffer_;
let resultStart = changetype<ArrayBufferView>(result).dataStart;
for (let i: isize = 0; i < length; ++i) {
let char = ALLOCATE(2);
let charStr = ALLOCATE(2);
store<u16>(
changetype<usize>(char),
load<u16>(
changetype<usize>(this) + (<usize>i << 1)
)
charStr,
load<u16>(changetype<usize>(this) + (<usize>i << 1))
);
store<usize>(changetype<usize>(buffer) + (<usize>i << 1), char);
store<String>(resultStart + (<usize>i << alignof<String>()), REGISTER<String>(charStr));
LINK(charStr, result);
}
return result;
} else if (!length) {
let result = new Array<String>(1);
unchecked(result[0] = changetype<String>(""));
store<string>(changetype<ArrayBufferView>(result).dataStart, ""); // no need to register/link
return result;
}
var result = new Array<String>();