mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-13 15:01:28 +00:00
srsly
This commit is contained in:
@ -95,6 +95,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
if (start < end) {
|
||||
memory.fill(
|
||||
dataStart + <usize>start,
|
||||
// @ts-ignore: cast
|
||||
<u8>value,
|
||||
<usize>(end - start)
|
||||
);
|
||||
@ -268,6 +269,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
base + sizeof<T>(),
|
||||
<usize>lastIndex << alignof<T>()
|
||||
);
|
||||
// @ts-ignore: cast
|
||||
store<T>(base + (<usize>lastIndex << alignof<T>()), <T>null);
|
||||
this.length_ = lastIndex;
|
||||
return element;
|
||||
@ -375,6 +377,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
|
||||
join(separator: string = ","): string {
|
||||
if (isInteger<T>()) {
|
||||
// @ts-ignore: type
|
||||
if (value instanceof bool) return this.join_bool(separator);
|
||||
return this.join_int(separator);
|
||||
}
|
||||
@ -400,6 +403,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
var value: bool;
|
||||
for (let i = 0; i < lastIndex; ++i) {
|
||||
value = load<bool>(dataStart + i);
|
||||
// @ts-ignore: cast
|
||||
valueLen = 4 + <i32>(!value);
|
||||
memory.copy(
|
||||
result + (<usize>offset << 1),
|
||||
@ -417,6 +421,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
}
|
||||
}
|
||||
value = load<bool>(dataStart + <usize>lastIndex);
|
||||
// @ts-ignore: cast
|
||||
valueLen = 4 + <i32>(!value);
|
||||
memory.copy(
|
||||
result + (<usize>offset << 1),
|
||||
@ -440,6 +445,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
if (!lastIndex) return changetype<string>(itoa<T>(load<T>(dataStart)));
|
||||
|
||||
var sepLen = separator.length;
|
||||
// @ts-ignore: cast
|
||||
const valueLen = (sizeof<T>() <= 4 ? 10 : 20) + <i32>isSigned<T>();
|
||||
var estLen = (valueLen + sepLen) * lastIndex + valueLen;
|
||||
var result = runtime.alloc(estLen << 1);
|
||||
@ -471,6 +477,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
var lastIndex = this.length_ - 1;
|
||||
if (lastIndex < 0) return "";
|
||||
var dataStart = this.dataStart;
|
||||
// @ts-ignore: type
|
||||
if (!lastIndex) return changetype<string>(dtoa(load<T>(dataStart)));
|
||||
|
||||
const valueLen = MAX_DOUBLE_LENGTH;
|
||||
@ -481,6 +488,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
var value: T;
|
||||
for (let i = 0; i < lastIndex; ++i) {
|
||||
value = load<T>(dataStart + (<usize>i << alignof<T>()));
|
||||
// @ts-ignore: type
|
||||
offset += dtoa_stream(result, offset, value);
|
||||
if (sepLen) {
|
||||
memory.copy(
|
||||
@ -492,6 +500,7 @@ export class Array<T> extends ArrayBufferView {
|
||||
}
|
||||
}
|
||||
value = load<T>(dataStart + (<usize>lastIndex << alignof<T>()));
|
||||
// @ts-ignore: type
|
||||
offset += dtoa_stream(result, offset, value);
|
||||
if (estLen > offset) {
|
||||
let trimmed = changetype<string>(result).substring(0, offset);
|
||||
@ -557,14 +566,17 @@ export class Array<T> extends ArrayBufferView {
|
||||
var value: T;
|
||||
if (!lastIndex) {
|
||||
value = load<T>(base);
|
||||
// @ts-ignore: type
|
||||
return value ? value.join(separator) : "";
|
||||
}
|
||||
for (let i = 0; i < lastIndex; ++i) {
|
||||
value = load<T>(base + (<usize>i << alignof<T>()));
|
||||
// @ts-ignore: type
|
||||
if (value) result += value.join(separator);
|
||||
if (sepLen) result += separator;
|
||||
}
|
||||
value = load<T>(base + (<usize>lastIndex << alignof<T>()));
|
||||
// @ts-ignore: type
|
||||
if (value) result += value.join(separator);
|
||||
return result; // registered by concatenation (FIXME: lots of garbage)
|
||||
}
|
||||
|
Reference in New Issue
Block a user