mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-24 12:11:50 +00:00
make std/string test ok again
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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>();
|
||||
|
Reference in New Issue
Block a user