From bd96a296c5e56c953c3f0d94b354bbc0a7980296 Mon Sep 17 00:00:00 2001 From: Jairus Date: Thu, 26 Dec 2024 19:46:10 -0800 Subject: [PATCH] finish simd string serialization --- as-test.config.json | 2 +- assembly/__tests__/simd/string.spec.ts | 23 +-- assembly/custom/util.ts | 21 +-- assembly/deserialize/simple/array/array.ts | 8 +- assembly/deserialize/simple/array/bool.ts | 4 +- assembly/deserialize/simple/array/float.ts | 2 +- assembly/deserialize/simple/array/integer.ts | 2 +- assembly/deserialize/simple/array/map.ts | 8 +- assembly/deserialize/simple/array/object.ts | 8 +- assembly/deserialize/simple/array/string.ts | 6 +- assembly/deserialize/simple/bool.ts | 4 +- assembly/deserialize/simple/map.ts | 34 ++--- assembly/deserialize/simple/object.ts | 34 ++--- assembly/index.ts | 78 ++++++++-- assembly/serialize/simd/string.ts | 144 ++++++++----------- assembly/serialize/simple/string.ts | 94 ++++++++++++ assembly/test.ts | 5 +- package.json | 1 + transform/lib/builder.js | 2 +- transform/lib/builder.js.map | 2 +- transform/lib/index.js | 75 +++++----- transform/lib/index.js.map | 2 +- transform/src/builder.ts | 2 +- transform/src/index.ts | 76 +++++----- 24 files changed, 381 insertions(+), 256 deletions(-) diff --git a/as-test.config.json b/as-test.config.json index f1d4cbd..4681202 100644 --- a/as-test.config.json +++ b/as-test.config.json @@ -1,5 +1,5 @@ { - "input": ["./assembly/__tests__/bool.spec.ts"], + "input": ["./assembly/__tests__/simd/string.spec.ts"], "outDir": "./build", "config": "none", "plugins": { diff --git a/assembly/__tests__/simd/string.spec.ts b/assembly/__tests__/simd/string.spec.ts index 4c96164..c21e0a3 100644 --- a/assembly/__tests__/simd/string.spec.ts +++ b/assembly/__tests__/simd/string.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, log, run } from "as-test/assembly"; +import { describe, expect, run } from "as-test/assembly"; import { serializeString_SIMD } from "../../serialize/simd/string"; import { deserializeString_SIMD } from "../../deserialize/simd/string"; @@ -17,18 +17,21 @@ describe("Should serialize strings", () => { expect(serialize_simd('string with colon : comma , brace [ ] bracket { } and quote " and other quote "')) .toBe('"string with colon : comma , brace [ ] bracket { } and quote \\" and other quote \\""'); + + expect(serialize_simd("\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000a\u000b\u000c\u000d\u000e\u000f\u000f\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f")) + .toBe("\"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u000f\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f\"") }); -describe("Should deserialize strings", () => { - expect(deserialize_simd('"abcdefg"')).toBe("abcdefg"); - expect(deserialize_simd('"st\\"ring\\" w\\"\\"ith quotes\\""')) - .toBe('st"ring" w""ith quotes"'); +// describe("Should deserialize strings", () => { +// expect(deserialize_simd('"abcdefg"')).toBe("abcdefg"); +// expect(deserialize_simd('"st\\"ring\\" w\\"\\"ith quotes\\""')) +// .toBe('st"ring" w""ith quotes"'); - // expect(deserialize_simd('"string \\"with random spa\\nces and \\nnewlines\\n\\n\\n"')) - // .toBe('string "with random spa\nces and \nnewlines\n\n\n'); +// // expect(deserialize_simd('"string \\"with random spa\\nces and \\nnewlines\\n\\n\\n"')) +// // .toBe('string "with random spa\nces and \nnewlines\n\n\n'); - // expect(deserialize_simd('"string with colon : comma , brace [ ] bracket { } and quote \\" and other quote \\""')) - // .toBe('string with colon : comma , brace [ ] bracket { } and quote " and other quote "'); -}); +// // expect(deserialize_simd('"string with colon : comma , brace [ ] bracket { } and quote \\" and other quote \\""')) +// // .toBe('string with colon : comma , brace [ ] bracket { } and quote " and other quote "'); +// }); run(); diff --git a/assembly/custom/util.ts b/assembly/custom/util.ts index 2909f28..53aad14 100644 --- a/assembly/custom/util.ts +++ b/assembly/custom/util.ts @@ -51,8 +51,8 @@ export function getArrayDepth(depth: i32 = 1): i32 { @inline export function snip_fast(str: string, len: u32 = 0, offset: u32 = 0): T { if (isSigned()) { const firstChar: u32 = load(changetype(str)); - if (firstChar === 48) return 0 as T; - const isNegative = firstChar === 45; // Check if the number is negative + if (firstChar == 48) return 0 as T; + const isNegative = firstChar == 45; // Check if the number is negative let val: T = 0 as T; if (len == 0) len = u32(str.length << 1); if (isNegative) { @@ -156,7 +156,7 @@ export function getArrayDepth(depth: i32 = 1): i32 { } } else { const firstChar: u32 = load(changetype(str)); - if (firstChar === 48) return 0 as T; + if (firstChar == 48) return 0 as T; let val: T = 0 as T; if (len == 0) len = u32(str.length << 1); if (len >= 4) { @@ -219,7 +219,7 @@ export function getArrayDepth(depth: i32 = 1): i32 { if (!end) end = start + u32(str.length << 1); if (isSigned()) { // Negative path - if (load(changetype(str) + start) === 45) { + if (load(changetype(str) + start) == 45) { start += 2; for (; start < end; start += 2) { val = (val * 10 + (load(changetype(str) + start) - 48)) as T; @@ -253,14 +253,14 @@ export function getArrayDepth(depth: i32 = 1): i32 { let val: T = 0; let offset = 0; let firstChar = load(changetype(str) + offset); - if (firstChar === 45) { + if (firstChar == 45) { offset = 2; } for (; offset < str.length << 1; offset += 2) { const char = load(changetype(str) + offset); - if (char === 101 || char === 69) { + if (char == 101 || char == 69) { const char = load(changetype(str) + (offset += 2)); - if (char === 45) { + if (char == 45) { // @ts-ignore val /= sciNote(__atoi_fast(str, (offset += 2))); // @ts-ignore @@ -276,7 +276,7 @@ export function getArrayDepth(depth: i32 = 1): i32 { val = (val << 1) + (val << 3) + (char - 48); // We use load because in this case, there is no need to have bounds-checking } - if (firstChar === 45) { + if (firstChar == 45) { val = -val as T; } return val; @@ -336,4 +336,9 @@ export function getArrayDepth(depth: i32 = 1): i32 { return ((87 + low) << 16) | (87 + high); } } +} + +// @ts-ignore: Decorator valid here +@inline export function nextPowerOf2(n: u32): u32 { + return 1 << (32 - clz(n - 1)); } \ No newline at end of file diff --git a/assembly/deserialize/simple/array/array.ts b/assembly/deserialize/simple/array/array.ts index 74d1511..ab3af9a 100644 --- a/assembly/deserialize/simple/array/array.ts +++ b/assembly/deserialize/simple/array/array.ts @@ -12,15 +12,15 @@ export function deserializeArrayArray(data: string): T { //i++; for (; i < data.length - 1; i++) { const char = unsafeCharCodeAt(data, i); - if (char === BRACKET_LEFT) { - if (depth === 0) { + if (char == BRACKET_LEFT) { + if (depth == 0) { lastPos = i; } // Shifting is 6% faster than incrementing depth++; - } else if (char === BRACKET_RIGHT) { + } else if (char == BRACKET_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { i++; result.push(JSON.parse>(data.slice(lastPos, i))); } diff --git a/assembly/deserialize/simple/array/bool.ts b/assembly/deserialize/simple/array/bool.ts index 2f20f7b..2f9756c 100644 --- a/assembly/deserialize/simple/array/bool.ts +++ b/assembly/deserialize/simple/array/bool.ts @@ -8,9 +8,9 @@ import { deserializeBoolean } from "../bool"; let lastPos = 1; for (let i = 1; i < data.length - 1; i++) { const char = unsafeCharCodeAt(data, i); - if (char === CHAR_T || char === CHAR_F) { + if (char == CHAR_T || char == CHAR_F) { lastPos = i; - } else if (char === CHAR_E) { + } else if (char == CHAR_E) { i++; result.push(deserializeBoolean(data.slice(lastPos, i))); } diff --git a/assembly/deserialize/simple/array/float.ts b/assembly/deserialize/simple/array/float.ts index d4a5988..60d275d 100644 --- a/assembly/deserialize/simple/array/float.ts +++ b/assembly/deserialize/simple/array/float.ts @@ -11,7 +11,7 @@ import { deserializeFloat } from "../float"; let awaitingParse = false; for (; i < data.length; i++) { const char = unsafeCharCodeAt(data, i); - if (lastPos === 0 && ((char >= 48 && char <= 57) || char === 45)) { + if (lastPos == 0 && ((char >= 48 && char <= 57) || char == 45)) { awaitingParse = true; lastPos = i; } else if (awaitingParse && (isSpace(char) || char == COMMA || char == BRACKET_RIGHT) && lastPos > 0) { diff --git a/assembly/deserialize/simple/array/integer.ts b/assembly/deserialize/simple/array/integer.ts index 81d7dae..c448dff 100644 --- a/assembly/deserialize/simple/array/integer.ts +++ b/assembly/deserialize/simple/array/integer.ts @@ -11,7 +11,7 @@ import { deserializeInteger } from "../integer"; let awaitingParse = false; for (; i < data.length; i++) { const char = unsafeCharCodeAt(data, i); - if (lastPos === 0 && ((char >= 48 && char <= 57) || char === 45)) { + if (lastPos == 0 && ((char >= 48 && char <= 57) || char == 45)) { awaitingParse = true; lastPos = i; } else if (awaitingParse && (isSpace(char) || char == COMMA || char == BRACKET_RIGHT) && lastPos > 0) { diff --git a/assembly/deserialize/simple/array/map.ts b/assembly/deserialize/simple/array/map.ts index eba7908..90cf9fc 100644 --- a/assembly/deserialize/simple/array/map.ts +++ b/assembly/deserialize/simple/array/map.ts @@ -8,14 +8,14 @@ export function deserializeMapArray(data: string): T { let depth: u32 = 0; for (let pos: u32 = 0; pos < data.length; pos++) { const char = unsafeCharCodeAt(data, pos); - if (char === BRACE_LEFT) { - if (depth === 0) { + if (char == BRACE_LEFT) { + if (depth == 0) { lastPos = pos; } depth++; - } else if (char === BRACE_RIGHT) { + } else if (char == BRACE_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { pos++; result.push(JSON.parse>(data.slice(lastPos, pos))); //lastPos = pos + 2; diff --git a/assembly/deserialize/simple/array/object.ts b/assembly/deserialize/simple/array/object.ts index 4f56563..d8da9a8 100644 --- a/assembly/deserialize/simple/array/object.ts +++ b/assembly/deserialize/simple/array/object.ts @@ -8,14 +8,14 @@ export function deserializeObjectArray(data: string): T { let depth: u32 = 0; for (let pos: u32 = 0; pos < data.length; pos++) { const char = unsafeCharCodeAt(data, pos); - if (char === BRACE_LEFT) { - if (depth === 0) { + if (char == BRACE_LEFT) { + if (depth == 0) { lastPos = pos; } depth++; - } else if (char === BRACE_RIGHT) { + } else if (char == BRACE_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { pos++; result.push(JSON.parse>(data.slice(lastPos, pos))); //lastPos = pos + 2; diff --git a/assembly/deserialize/simple/array/string.ts b/assembly/deserialize/simple/array/string.ts index 8e32430..b0b316d 100644 --- a/assembly/deserialize/simple/array/string.ts +++ b/assembly/deserialize/simple/array/string.ts @@ -10,11 +10,11 @@ import { deserializeString } from "../string"; let escaping = false; for (let i = 1; i < data.length - 1; i++) { const char = unsafeCharCodeAt(data, i); - if (char === BACK_SLASH && !escaping) { + if (char == BACK_SLASH && !escaping) { escaping = true; } else { - if (char === QUOTE && !escaping) { - if (instr === false) { + if (char == QUOTE && !escaping) { + if (instr == false) { instr = true; lastPos = i; } else { diff --git a/assembly/deserialize/simple/bool.ts b/assembly/deserialize/simple/bool.ts index 1bb2486..2d97bbf 100644 --- a/assembly/deserialize/simple/bool.ts +++ b/assembly/deserialize/simple/bool.ts @@ -12,7 +12,7 @@ import { unsafeCharCodeAt } from "../../custom/util"; const len = end - start; const ptr = changetype(data) + (start << 1); const firstChar = unsafeCharCodeAt(data, start); - if (len === 4 && firstChar === CHAR_T && load(ptr) === 28429475166421108) return true; - else if (len === 5 && firstChar === CHAR_F && load(ptr, 2) === 28429466576093281) return false; + if (len == 4 && firstChar == CHAR_T && load(ptr) == 28429475166421108) return true; + else if (len == 5 && firstChar == CHAR_F && load(ptr, 2) == 28429466576093281) return false; return false; //ERROR(`Expected to find boolean, but found "${data.slice(0, 100)}" instead!`); } \ No newline at end of file diff --git a/assembly/deserialize/simple/map.ts b/assembly/deserialize/simple/map.ts index f5492f6..d84d975 100644 --- a/assembly/deserialize/simple/map.ts +++ b/assembly/deserialize/simple/map.ts @@ -18,14 +18,14 @@ import { deserializeFloat } from "./float"; let outerLoopIndex = 1; for (; outerLoopIndex < data.length - 1; outerLoopIndex++) { const char = unsafeCharCodeAt(data, outerLoopIndex); - if (char === BRACKET_LEFT) { + if (char == BRACKET_LEFT) { for (let arrayValueIndex = outerLoopIndex; arrayValueIndex < data.length - 1; arrayValueIndex++) { const char = unsafeCharCodeAt(data, arrayValueIndex); - if (char === BRACKET_LEFT) { + if (char == BRACKET_LEFT) { depth++; - } else if (char === BRACKET_RIGHT) { + } else if (char == BRACKET_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { ++arrayValueIndex; map.set(deserializeMapKey>(key), JSON.parse>(data.slice(outerLoopIndex, arrayValueIndex))); outerLoopIndex = arrayValueIndex; @@ -34,14 +34,14 @@ import { deserializeFloat } from "./float"; } } } - } else if (char === BRACE_LEFT) { + } else if (char == BRACE_LEFT) { for (let objectValueIndex = outerLoopIndex; objectValueIndex < data.length - 1; objectValueIndex++) { const char = unsafeCharCodeAt(data, objectValueIndex); - if (char === BRACE_LEFT) { + if (char == BRACE_LEFT) { depth++; - } else if (char === BRACE_RIGHT) { + } else if (char == BRACE_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { ++objectValueIndex; map.set(deserializeMapKey>(key), JSON.parse>(data.slice(outerLoopIndex, objectValueIndex))); outerLoopIndex = objectValueIndex; @@ -50,15 +50,15 @@ import { deserializeFloat } from "./float"; } } } - } else if (char === QUOTE) { + } else if (char == QUOTE) { let escaping = false; for (let stringValueIndex = ++outerLoopIndex; stringValueIndex < data.length - 1; stringValueIndex++) { const char = unsafeCharCodeAt(data, stringValueIndex); - if (char === BACK_SLASH && !escaping) { + if (char == BACK_SLASH && !escaping) { escaping = true; } else { - if (char === QUOTE && !escaping) { - if (isKey === false) { + if (char == QUOTE && !escaping) { + if (isKey == false) { // perf: we can avoid creating a new string here if the key doesn't contain any escape sequences if (containsCodePoint(data, BACK_SLASH, outerLoopIndex, stringValueIndex)) { key.reinst(deserializeString(data, outerLoopIndex - 1, stringValueIndex)); @@ -79,26 +79,26 @@ import { deserializeFloat } from "./float"; escaping = false; } } - } else if (char == CHAR_N && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_U && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_L && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_L) { + } else if (char == CHAR_N && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_U && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_L && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_L) { if (isNullable>()) { map.set(deserializeMapKey>(key), null); } isKey = false; - } else if (char === CHAR_T && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_R && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_U && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_E) { + } else if (char == CHAR_T && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_R && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_U && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_E) { if (isBoolean>()) { map.set(deserializeMapKey>(key), true); } isKey = false; - } else if (char === CHAR_F && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_A && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_L && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_S && unsafeCharCodeAt(data, ++outerLoopIndex) === CHAR_E) { + } else if (char == CHAR_F && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_A && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_L && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_S && unsafeCharCodeAt(data, ++outerLoopIndex) == CHAR_E) { if (isBoolean>()) { map.set(deserializeMapKey>(key), false); } isKey = false; - } else if ((char >= 48 && char <= 57) || char === 45) { + } else if ((char >= 48 && char <= 57) || char == 45) { let numberValueIndex = ++outerLoopIndex; for (; numberValueIndex < data.length; numberValueIndex++) { const char = unsafeCharCodeAt(data, numberValueIndex); - if (char === COLON || char === COMMA || char === BRACE_RIGHT || isSpace(char)) { + if (char == COLON || char == COMMA || char == BRACE_RIGHT || isSpace(char)) { if (isInteger>()) { map.set(deserializeMapKey>(key), deserializeInteger>(data.slice(outerLoopIndex - 1, numberValueIndex))); } else if (isFloat>()) { diff --git a/assembly/deserialize/simple/object.ts b/assembly/deserialize/simple/object.ts index c1244ef..084f3e6 100644 --- a/assembly/deserialize/simple/object.ts +++ b/assembly/deserialize/simple/object.ts @@ -15,14 +15,14 @@ export function deserializeObject(data: string): T { let outerLoopIndex = 1; for (; outerLoopIndex < data.length - 1; outerLoopIndex++) { const char = unsafeCharCodeAt(data, outerLoopIndex); - if (char === BRACKET_LEFT) { + if (char == BRACKET_LEFT) { for (let arrayValueIndex = outerLoopIndex; arrayValueIndex < data.length - 1; arrayValueIndex++) { const char = unsafeCharCodeAt(data, arrayValueIndex); - if (char === BRACKET_LEFT) { + if (char == BRACKET_LEFT) { depth++; - } else if (char === BRACKET_RIGHT) { + } else if (char == BRACKET_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { ++arrayValueIndex; // @ts-ignore schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, arrayValueIndex); @@ -32,14 +32,14 @@ export function deserializeObject(data: string): T { } } } - } else if (char === BRACE_LEFT) { + } else if (char == BRACE_LEFT) { for (let objectValueIndex = outerLoopIndex; objectValueIndex < data.length - 1; objectValueIndex++) { const char = unsafeCharCodeAt(data, objectValueIndex); - if (char === BRACE_LEFT) { + if (char == BRACE_LEFT) { depth++; - } else if (char === BRACE_RIGHT) { + } else if (char == BRACE_RIGHT) { depth--; - if (depth === 0) { + if (depth == 0) { ++objectValueIndex; // @ts-ignore schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, objectValueIndex); @@ -49,15 +49,15 @@ export function deserializeObject(data: string): T { } } } - } else if (char === QUOTE) { + } else if (char == QUOTE) { let escaping = false; for (let stringValueIndex = ++outerLoopIndex; stringValueIndex < data.length - 1; stringValueIndex++) { const char = unsafeCharCodeAt(data, stringValueIndex); - if (char === BACK_SLASH && !escaping) { + if (char == BACK_SLASH && !escaping) { escaping = true; } else { - if (char === QUOTE && !escaping) { - if (isKey === false) { + if (char == QUOTE && !escaping) { + if (isKey == false) { key_start = outerLoopIndex; key_end = stringValueIndex; isKey = true; @@ -72,26 +72,26 @@ export function deserializeObject(data: string): T { escaping = false; } } - } else if (char == CHAR_N && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_L) { + } else if (char == CHAR_N && unsafeCharCodeAt(data, outerLoopIndex + 1) == CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 2) == CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) == CHAR_L) { // @ts-ignore schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 4); outerLoopIndex += 3; isKey = false; - } else if (char === CHAR_T && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_R && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_E) { + } else if (char == CHAR_T && unsafeCharCodeAt(data, outerLoopIndex + 1) == CHAR_R && unsafeCharCodeAt(data, outerLoopIndex + 2) == CHAR_U && unsafeCharCodeAt(data, outerLoopIndex + 3) == CHAR_E) { // @ts-ignore schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 4); outerLoopIndex += 3; isKey = false; - } else if (char === CHAR_F && unsafeCharCodeAt(data, outerLoopIndex + 1) === CHAR_A && unsafeCharCodeAt(data, outerLoopIndex + 2) === CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) === CHAR_S && unsafeCharCodeAt(data, outerLoopIndex + 4) === CHAR_E) { + } else if (char == CHAR_F && unsafeCharCodeAt(data, outerLoopIndex + 1) == CHAR_A && unsafeCharCodeAt(data, outerLoopIndex + 2) == CHAR_L && unsafeCharCodeAt(data, outerLoopIndex + 3) == CHAR_S && unsafeCharCodeAt(data, outerLoopIndex + 4) == CHAR_E) { // @ts-ignore schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex, outerLoopIndex + 5); outerLoopIndex += 4; isKey = false; - } else if ((char >= 48 && char <= 57) || char === 45) { + } else if ((char >= 48 && char <= 57) || char == 45) { let numberValueIndex = ++outerLoopIndex; for (; numberValueIndex < data.length; numberValueIndex++) { const char = unsafeCharCodeAt(data, numberValueIndex); - if (char === COMMA || char === BRACE_RIGHT || isSpace(char)) { + if (char == COMMA || char == BRACE_RIGHT || isSpace(char)) { // @ts-ignore schema.__DESERIALIZE(data, key_start, key_end, outerLoopIndex - 1, numberValueIndex); outerLoopIndex = numberValueIndex; diff --git a/assembly/index.ts b/assembly/index.ts index f580bbf..094af2f 100644 --- a/assembly/index.ts +++ b/assembly/index.ts @@ -24,6 +24,7 @@ import { setCapacity } from "./custom/memory"; import { BLOCK_MAXSIZE, OBJECT, TOTAL_OVERHEAD } from "rt/common"; import { E_INVALIDLENGTH } from "util/error"; import { serializeString_SIMD } from "./serialize/simd/string"; +import { Option } from "as-container"; // Config class SerializeOptions { @@ -46,23 +47,70 @@ const DEFAULT_SERIALIZE_OPTIONS = new SerializeOptions(); */ export namespace JSON { /** - * Serializes valid JSON data. + * Serializes valid JSON data and outputs it to string * ```js * JSON.stringify(data) * ``` * @param data T * @returns string */ - export function stringifyTo(data: T, out: string): string { - if (isString()) { - const oldCapacity = changetype(changetype(out) - TOTAL_OVERHEAD).rtSize; - const outPtr = setCapacity(out, oldCapacity, oldCapacity << 1); - out = changetype(__renew(outPtr, serializeString_SIMD(data as string, outPtr))); - return changetype(outPtr); - } else { - return unreachable(); - } + export function stringifyTo(data: T, out: string): string { + if (isString()) { + const oldCapacity = changetype(changetype(out) - TOTAL_OVERHEAD).rtSize; + const outPtr = setCapacity(out, oldCapacity, oldCapacity << 3); // this doesn't account for \u0000+ + out = changetype(__renew(outPtr, serializeString_SIMD(data as string, outPtr))); + return changetype(outPtr); + } else { + return unreachable(); + } + } + + /** + * Serializes valid JSON data and outputs it to string + * ```js + * JSON.stringify(data) + * ``` + * @param data T + * @returns string + */ + export function stringifySafe(data: T, out: string): Option { + if (isBoolean()) { + return Option.Some(serializeBool(data as bool)); + } else if (isInteger()) { + // @ts-ignore + return Option.Some(serializeInteger(data)); + } else if (isFloat(data)) { + // @ts-ignore + return Option.Some(serializeFloat(data)); + // @ts-ignore: Function is generated by transform + } else if (isNullable() && changetype(data) == 0) { + return Option.Some(NULL_WORD); + // @ts-ignore + } else if (isString>()) { + return serializeString(changetype(data)); + // @ts-ignore: Supplied by transform + } else if (isDefined(data.__SERIALIZE)) { + /*if (options.pretty) { + // @ts-ignore + return serializeObject_Pretty(changetype>(data)); + }*/ + // @ts-ignore + return serializeObject(changetype>(data)); + } else if (data instanceof Date) { + // @ts-ignore + return serializeDate(changetype>(data)); + } else if (data instanceof Array) { + // @ts-ignore + return serializeArray(changetype>(data)); + } else if (data instanceof Map) { + // @ts-ignore + return serializeMap(changetype>(data)); + } else if (data instanceof JSON.Value) { + return serializeArbitrary(data); + } else { + throw new Error(`Could not serialize data of type ${nameof()}. Make sure to add the correct decorators to classes.`); } + } /** * Serializes valid JSON data. * ```js @@ -88,10 +136,10 @@ export namespace JSON { return serializeString(changetype(data)); // @ts-ignore: Supplied by transform } else if (isDefined(data.__SERIALIZE)) { - /*if (options.pretty) { - // @ts-ignore - return serializeObject_Pretty(changetype>(data)); - }*/ + /*if (options.pretty) { + // @ts-ignore + return serializeObject_Pretty(changetype>(data)); + }*/ // @ts-ignore return serializeObject(changetype>(data)); } else if (data instanceof Date) { @@ -124,7 +172,7 @@ export namespace JSON { return deserializeInteger(data); } else if (isFloat()) { return deserializeFloat(data); - } else if (isNullable() && data.length === 4 && data == "null") { + } else if (isNullable() && data.length == 4 && data == "null") { // @ts-ignore return null; } else if (isString()) { diff --git a/assembly/serialize/simd/string.ts b/assembly/serialize/simd/string.ts index a0e5880..108bcbc 100644 --- a/assembly/serialize/simd/string.ts +++ b/assembly/serialize/simd/string.ts @@ -1,44 +1,43 @@ import { OBJECT, TOTAL_OVERHEAD } from "rt/common"; +import { BACK_SLASH } from "../../custom/chars"; const ESCAPE_TABLE = memory.data([ - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 0-3 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 4-7 - - 92, 98, 92, 116, 92, 110, 0, 0, // Pair 8-11 - 92, 102, 92, 114, 0, 0, 0, 0, // Pair 12-15 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 16-19 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 20-23 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 24-27 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 28-31 - - 0, 0, 0, 0, 92, 34, 0, 0, // Pair 32-35 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 36-39 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 40-43 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 44-47 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 48-51 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 52-55 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 56-59 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 60-63 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 64-67 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 68-71 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 72-75 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 76-79 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 80-83 - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 84-87 - - 0, 0, 0, 0, 0, 0, 0, 0, // Pair 88-91 - 92, 92, 0, 0, 0, 0, 0, 0, // Pair 92-95 -]); + 48, 48, 48, 49, 48, 50, 48, 51, // Pair 0-3 + 48, 52, 48, 53, 48, 54, 48, 55, // Pair 4-7 + + 92, 98, 92, 116, 92, 110, 48, 98, // Pair 8-11 + 92, 102, 92, 114, 48, 101, 48, 102, // Pair 12-15 + + 49, 48, 49, 49, 49, 50, 49, 51, // Pair 16-19 + 49, 52, 49, 53, 49, 54, 49, 55, // Pair 20-23 + + 49, 56, 49, 57, 49, 97, 49, 98, // Pair 24-27 + 49, 99, 49, 100, 49, 101, 49, 102, // Pair 28-31 + + 0, 0, 0, 0, 92, 34, 0, 0, // Pair 32-35 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 36-39 + + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 40-43 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 44-47 + + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 48-51 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 52-55 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 56-59 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 60-63 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 64-67 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 68-71 + + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 72-75 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 76-79 + + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 80-83 + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 84-87 + + 0, 0, 0, 0, 0, 0, 0, 0, // Pair 88-91 + 92, 92, // Pair 92-93 +]); const SPLAT_34 = i16x8.splat(34); /* " */ const SPLAT_92 = i16x8.splat(92); /* \ */ @@ -70,28 +69,26 @@ export function serializeString_SIMD(src: string, dst: usize): usize { const sieve = v128.or(v128.or(backslash_indices, quote_indices), escape_indices); let mask = i16x8.bitmask(sieve); - // console.log("Lanes: " + lanes(block)); - // console.log("Bits: " + bits(mask)); + while (mask != 0) { const lane_index = ctz(mask) << 1; const dst_offset = dst_ptr + lane_index; const src_offset = src_ptr + lane_index; const code = load(src_offset) << 2; - // console.log("Code: " + (code >> 2).toString()); const escaped = load(ESCAPE_TABLE + code); - // console.log("Escaped: " + String.fromCharCode(load(ESCAPE_TABLE + code)) + String.fromCharCode(load(ESCAPE_TABLE + code, 2))) - // if (escaped < 6684764) { - // store(dst_offset, 13511005048209500); - // store(dst_offset, escaped, 8); - // v128.store(dst_offset, v128.load(src_offset, 2), 12); - // mask &= mask - 1; - // dst_ptr += 10; - // } else { - store(dst_offset, escaped); - v128.store(dst_offset, v128.load(src_offset, 2), 4); + mask &= mask - 1; - dst_ptr += 2; - // } + + if ((escaped & 0xFFFF) != BACK_SLASH) { + store(dst_offset, 13511005048209500); + store(dst_offset, escaped, 8); + v128.store(dst_offset, v128.load(src_offset, 2), 12); + dst_ptr += 10; + } else { + store(dst_offset, escaped); + v128.store(dst_offset, v128.load(src_offset, 2), 4); + dst_ptr += 2; + } } src_ptr += 16; @@ -101,11 +98,19 @@ export function serializeString_SIMD(src: string, dst: usize): usize { while (src_ptr < src_end) { const code = load(src_ptr); if (code == 92 || code == 34 || code < 32) { - // console.log("Escaped: " + String.fromCharCode(load(ESCAPE_TABLE + (code << 2))) + String.fromCharCode(load(ESCAPE_TABLE + (code << 2), 2))) const escaped = load(ESCAPE_TABLE + (code << 2)); - store(dst_ptr, escaped); - dst_ptr += 4; - src_ptr += 2; + + if ((escaped & 0xFFFF) != BACK_SLASH) { + store(dst_ptr, 13511005048209500); + store(dst_ptr, escaped, 8); + dst_ptr += 12; + src_ptr += 2; + } else { + store(dst_ptr, escaped); + dst_ptr += 4; + src_ptr += 2; + } + } else { store(dst_ptr, code); dst_ptr += 2; @@ -115,33 +120,4 @@ export function serializeString_SIMD(src: string, dst: usize): usize { store(dst_ptr, 34); /* " */ return dst_ptr - changetype(dst) + 2; -} - - - -function bits(mask: u32): string { - let out = "" - for (let i = 31; i >= 0; i--) { - const bit = (mask >> i) & 1; - out += bit.toString(); - } - return out; -} - - -function lanes(vec: v128): string { - let buf = new ArrayBuffer(16); - v128.store(changetype(buf), vec); - let out = ""; - for (let i = 0; i < 16; i += sizeof()) { - const lane = load(changetype(buf) + i); - out += abs(lane).toString() + " "; - } - return out.trimEnd(); -} - -function str(vec: v128): string { - let buf = new ArrayBuffer(16); - v128.store(changetype(buf), vec); - return String.UTF16.decode(buf); } \ No newline at end of file diff --git a/assembly/serialize/simple/string.ts b/assembly/serialize/simple/string.ts index cc1cad1..fd6e12c 100644 --- a/assembly/serialize/simple/string.ts +++ b/assembly/serialize/simple/string.ts @@ -68,3 +68,97 @@ import { Sink } from "../../custom/sink"; result.writeCodePoint(34); return result.toString(); } + +// import { _intTo16, nextPowerOf2 } from "../../custom/util"; +// import { OBJECT, TOTAL_OVERHEAD } from "rt/common"; + +// const ESCAPE_TABLE = memory.data([ +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 0-3 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 4-7 + +// 92, 98, 92, 116, 92, 110, 0, 0, // Pair 8-11 +// 92, 102, 92, 114, 0, 0, 0, 0, // Pair 12-15 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 16-19 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 20-23 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 24-27 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 28-31 + +// 0, 0, 0, 0, 92, 34, 0, 0, // Pair 32-35 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 36-39 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 40-43 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 44-47 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 48-51 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 52-55 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 56-59 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 60-63 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 64-67 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 68-71 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 72-75 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 76-79 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 80-83 +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 84-87 + +// 0, 0, 0, 0, 0, 0, 0, 0, // Pair 88-91 +// 92, 92, 0, 0, 0, 0, 0, 0, // Pair 92-95 +// ]); + +// /** +// * Serializes valid strings into their JSON counterpart +// * @param src string +// * @returns JSON +// */ +// // @ts-ignore: Decorator +// @inline export function serializeString(src: string, dst: usize): string { +// const src_len = changetype(changetype(src) - TOTAL_OVERHEAD).rtSize; +// let dst_len: usize; +// let src_ptr = changetype(src); +// let dst_ptr = dst; + +// if (dst == 0) { +// dst_len = src_len + 4; +// dst = changetype(__new(dst_len, idof())); +// } else if (src_len + 4 > (dst_len = changetype(changetype(dst) - TOTAL_OVERHEAD).rtSize)) { +// const len = src_len + 4; +// dst_ptr = (dst = __renew(dst, len)); +// } + +// let src_end = src_ptr + src_len; + +// store(dst, 34); /* " */ + +// let last: usize = src_ptr; +// while (src_ptr < src_end) { +// const code = load(src_ptr); +// if (code == 34 || code == 92 || code < 32) { +// memory.copy(last, src_ptr - 2, dst_ptr - last); +// if (dst_ptr - dst > dst_len) { +// dst_ptr -= dst; +// dst_ptr += dst = __renew(dst, dst_len += 2); +// } +// const escaped = load(ESCAPE_TABLE + (code << 2)); +// store(dst_ptr, escaped); +// dst_ptr += 4; +// src_ptr += 2; +// last = dst_ptr; +// } else { +// dst_ptr += 2; +// src_ptr += 2; +// } +// } + +// store(dst_ptr, 34, 2); /* " */ + +// dst_ptr -= dst; +// if (dst_len > dst_ptr) { +// dst_ptr += dst = __renew(dst, max(4, dst_ptr)); +// } +// return changetype(dst); +// } diff --git a/assembly/test.ts b/assembly/test.ts index 2bdce27..965e614 100644 --- a/assembly/test.ts +++ b/assembly/test.ts @@ -1,6 +1,3 @@ -// import { JSON } from "./index" -import { BLOCK_MAXSIZE, OBJECT, TOTAL_OVERHEAD } from "rt/common"; -import { E_INVALIDLENGTH } from "util/error"; import { JSON } from "."; // import { Buffer } from "./custom/buffer"; @@ -13,7 +10,7 @@ import { JSON } from "."; // public z: T; // } -let a = "hello\\ the\"re how are you doing?"; +let a = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000a\u000b\u000c\u000d\u000e\u000f\u000f\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f"; const b = "world"; JSON.stringifyTo(a, a) // console.log(JSON.stringifyTo(a, a)); diff --git a/package.json b/package.json index f265d40..0e9fd34 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "as-console": "^7.0.0", "assemblyscript": "^0.27.31", "assemblyscript-prettier": "^3.0.1", + "minimatch": "^10.0.1", "prettier": "^3.4.2", "typescript": "latest" }, diff --git a/transform/lib/builder.js b/transform/lib/builder.js index 55627d8..1f9e05b 100644 --- a/transform/lib/builder.js +++ b/transform/lib/builder.js @@ -150,7 +150,7 @@ export class ASTBuilder extends Visitor { util.indent(sb, this.indentLevel); let name = names[i]; let value = values[i]; - if (name === value) { + if (name == value) { this.visitNode(name); } else { diff --git a/transform/lib/builder.js.map b/transform/lib/builder.js.map index 76679c0..7e0bc65 100644 --- a/transform/lib/builder.js.map +++ b/transform/lib/builder.js.map @@ -1 +1 @@ -{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/transform/lib/index.js b/transform/lib/index.js index fc72298..9a13f80 100644 --- a/transform/lib/index.js +++ b/transform/lib/index.js @@ -36,7 +36,7 @@ class JSONTransform extends Visitor { let found = false; for (const decorator of node.decorators) { const name = decorator.name.text; - if (name === "json" || name === "serializable") { + if (name == "json" || name == "serializable") { found = true; break; } @@ -47,7 +47,7 @@ class JSONTransform extends Visitor { this.schema = new SchemaData(); this.schema.node = node; this.schema.name = node.name.text; - const members = [...node.members.filter((v) => v.kind === 54)]; + const members = [...node.members.filter((v) => v.kind == 54)]; if (node.extendsType) { this.schema.parent = this.schemasList.find((v) => v.name == node.extendsType?.name.identifier.text); if (this.schema.parent?.members) { @@ -88,9 +88,9 @@ class JSONTransform extends Visitor { } if (member.flags == 32) continue; - if (member.flags === 512) + if (member.flags == 512) continue; - if (member.flags === 1024) + if (member.flags == 1024) continue; const type = toString(member.type); const name = member.name; @@ -145,25 +145,25 @@ class JSONTransform extends Visitor { else if (mem.value) { mem.initialize = "this." + name.text + " = " + mem.value; } - else if (type === "Map") { + else if (type == "Map") { mem.initialize = "this." + name.text + " = new " + mem.type + "()"; } - else if (type === "string") { + else if (type == "string") { mem.initialize = "this." + name.text + ' = ""'; } - else if (type === "Array") { + else if (type == "Array") { mem.initialize = "this." + name.text + " = instantiate<" + mem.type + ">()"; } - else if (type === "bool" || type === "boolean") { + else if (type == "bool" || type == "boolean") { mem.initialize = "this." + name.text + " = false"; } - else if (type === "JSON.Raw") { + else if (type == "JSON.Raw") { mem.initialize = "this." + name.text + ' = ""'; } - else if (type === "u8" || type === "u16" || type === "u32" || type === "u64" || type === "i8" || type === "i16" || type === "i32" || type === "i64") { + else if (type == "u8" || type == "u16" || type == "u32" || type == "u64" || type == "i8" || type == "i16" || type == "i32" || type == "i64") { mem.initialize = "this." + name.text + " = 0"; } - else if (type === "f32" || type === "f64") { + else if (type == "f32" || type == "f64") { mem.initialize = "this." + name.text + " = 0.0"; } } @@ -227,7 +227,7 @@ class JSONTransform extends Visitor { for (let i = 0; i < _sorted.length; i++) { const member = _sorted[i]; const _name = member.alias || member.name; - if (_name.length === len) { + if (_name.length == len) { sortedMembers[offset]?.push(member); } else { @@ -240,40 +240,40 @@ class JSONTransform extends Visitor { for (const memberSet of sortedMembers) { const firstMember = memberSet[0]; const _name = encodeKey(firstMember.alias || firstMember.name); - if (_name.length === 1) { + if (_name.length == 1) { if (first) { - DESERIALIZE += " if (1 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += " if (1 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; first = false; } else { - DESERIALIZE += "else if (1 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += "else if (1 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; } } - else if (_name.length === 2) { + else if (_name.length == 2) { if (first) { - DESERIALIZE += " if (2 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += " if (2 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; first = false; } else { - DESERIALIZE += "else if (2 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += "else if (2 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; } } - else if (_name.length === 4) { + else if (_name.length == 4) { if (first) { - DESERIALIZE += " if (4 === len) {\n const code = load(changetype(data) + (key_start << 1));\n"; + DESERIALIZE += " if (4 == len) {\n const code = load(changetype(data) + (key_start << 1));\n"; first = false; } else { - DESERIALIZE += "else if (4 === len) {\n const code = load(changetype(data) + (key_start << 1));\n"; + DESERIALIZE += "else if (4 == len) {\n const code = load(changetype(data) + (key_start << 1));\n"; } } else { if (first) { - DESERIALIZE += " if (" + _name.length + " === len) {\n"; + DESERIALIZE += " if (" + _name.length + " == len) {\n"; first = false; } else { - DESERIALIZE += "else if (" + _name.length + " === len) {\n"; + DESERIALIZE += "else if (" + _name.length + " == len) {\n"; } } let f = true; @@ -282,28 +282,28 @@ class JSONTransform extends Visitor { if (!member.deserialize) continue; const _name = encodeKey(member.alias || member.name); - if (_name.length === 1) { + if (_name.length == 1) { DESERIALIZE += ` case ${_name.charCodeAt(0)}: { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } - else if (_name.length === 2) { + else if (_name.length == 2) { DESERIALIZE += ` case ${charCodeAt32(_name, 0)}: { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } - else if (_name.length === 4) { + else if (_name.length == 4) { if (f) { f = false; - DESERIALIZE += ` if (${charCodeAt64(_name, 0)} === code) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE += ` if (${charCodeAt64(_name, 0)} == code) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } else { - DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + `else if (${charCodeAt64(_name, 0)} === code) {\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + `else if (${charCodeAt64(_name, 0)} == code) {\n ${member.deserialize}\n return true;\n }\n`; } } else { if (f) { f = false; - DESERIALIZE += ` if (0 === memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE += ` if (0 == memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } else { - DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + ` else if (0 === memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + ` else if (0 == memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } } } @@ -347,23 +347,22 @@ class JSONTransform extends Visitor { if (ref.kind == 9) { const newNode = Node.createBinaryExpression(101, node.args[1], node, node.range); ref.args[ref.args.indexOf(node)] = newNode; - console.log(toString(ref)); } else { const newNode = Node.createExpressionStatement(Node.createBinaryExpression(101, node.args[1], node, node.range)); const nodeIndex = source.statements.findIndex((n) => { if (n == node) return true; - if (n.kind === 38 && n.expression == node) + if (n.kind == 38 && n.expression == node) return true; return false; }); - console.log("Index: " + nodeIndex); if (nodeIndex > 0) source.statements[nodeIndex] = newNode; - console.log(toString(source), ref.kind); } } + visitBinaryExpression(node, ref) { + } visitSource(node) { this.imports = []; super.visitSource(node); @@ -376,10 +375,10 @@ export default class Transformer extends Transform { .sort((_a, _b) => { const a = _a.internalPath; const b = _b.internalPath; - if (a[0] === "~" && b[0] !== "~") { + if (a[0] == "~" && b[0] !== "~") { return -1; } - else if (a[0] !== "~" && b[0] === "~") { + else if (a[0] !== "~" && b[0] == "~") { return 1; } else { @@ -402,7 +401,7 @@ export default class Transformer extends Transform { const schemas = transformer.schemasList; for (const schema of schemas) { if (schema.parent) { - const parent = schemas.find((v) => v.name === schema.parent?.name); + const parent = schemas.find((v) => v.name == schema.parent?.name); if (!parent) throw new Error(`Class ${schema.name} extends its parent class ${schema.parent}, but ${schema.parent} does not include a @json or @serializable decorator! Add the decorator and rebuild.`); } @@ -439,7 +438,7 @@ class Property { if (this.flags.has(PropertyFlags.JSON_Raw)) { if (this.flags.has(PropertyFlags.Null)) { this.right_s = "(load<" + type + '>(ptr, offsetof("' + name + '")) || "null")'; - this.right_d = "value_start === value_end - 4 && 30399761348886638 === load(changetype(data) + (value_start << 1)) ? null : data.substring(value_start, value_end)"; + this.right_d = "value_start == value_end - 4 && 30399761348886638 == load(changetype(data) + (value_start << 1)) ? null : data.substring(value_start, value_end)"; } else { this.right_s = "load<" + type + '>(ptr, offsetof("' + name + '"))'; diff --git a/transform/lib/index.js.map b/transform/lib/index.js.map index cf00f06..517e666 100644 --- a/transform/lib/index.js.map +++ b/transform/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/transform/src/builder.ts b/transform/src/builder.ts index 53a7a2f..1706a48 100644 --- a/transform/src/builder.ts +++ b/transform/src/builder.ts @@ -240,7 +240,7 @@ export class ASTBuilder extends Visitor { util.indent(sb, this.indentLevel); let name = names[i]; let value = values[i]; - if (name === value) { + if (name == value) { this.visitNode(name); } else { this.visitNode(name); diff --git a/transform/src/index.ts b/transform/src/index.ts index 274a155..6066dd7 100644 --- a/transform/src/index.ts +++ b/transform/src/index.ts @@ -4,8 +4,7 @@ import { Visitor } from "./visitor.js"; import { SimpleParser, toString } from "./util.js"; import * as path from "path"; import { fileURLToPath } from "url"; -import { CommentKind } from "types:assemblyscript/src/ast"; -import { Range } from "types:assemblyscript/src/diagnostics"; +import { BinaryExpression } from "types:assemblyscript/src/ast"; class JSONTransform extends Visitor { public parser!: Parser; @@ -39,7 +38,7 @@ class JSONTransform extends Visitor { let found = false; for (const decorator of node.decorators) { const name = (decorator.name).text; - if (name === "json" || name === "serializable") { + if (name == "json" || name == "serializable") { found = true; break; } @@ -52,7 +51,7 @@ class JSONTransform extends Visitor { this.schema.node = node; this.schema.name = node.name.text; - const members = [...node.members.filter((v) => v.kind === NodeKind.FieldDeclaration)]; + const members = [...node.members.filter((v) => v.kind == NodeKind.FieldDeclaration)]; if (node.extendsType) { this.schema.parent = this.schemasList.find((v) => v.name == node.extendsType?.name.identifier.text) as SchemaData | null; @@ -102,8 +101,8 @@ class JSONTransform extends Visitor { } if (member.flags == CommonFlags.Static) continue; - if (member.flags === CommonFlags.Private) continue; - if (member.flags === CommonFlags.Protected) continue; + if (member.flags == CommonFlags.Private) continue; + if (member.flags == CommonFlags.Protected) continue; const type = toString(member.type!); const name = member.name; @@ -161,19 +160,19 @@ class JSONTransform extends Visitor { mem.initialize = "this." + name.text + " = changetype>(__new(offsetof>(), idof>()));\n changetype>(this." + name.text + ").__INITIALIZE()"; } else if (mem.value) { mem.initialize = "this." + name.text + " = " + mem.value; - } else if (type === "Map") { + } else if (type == "Map") { mem.initialize = "this." + name.text + " = new " + mem.type + "()"; - } else if (type === "string") { + } else if (type == "string") { mem.initialize = "this." + name.text + ' = ""'; - } else if (type === "Array") { + } else if (type == "Array") { mem.initialize = "this." + name.text + " = instantiate<" + mem.type + ">()"; - } else if (type === "bool" || type === "boolean") { + } else if (type == "bool" || type == "boolean") { mem.initialize = "this." + name.text + " = false"; - } else if (type === "JSON.Raw") { + } else if (type == "JSON.Raw") { mem.initialize = "this." + name.text + ' = ""'; - } else if (type === "u8" || type === "u16" || type === "u32" || type === "u64" || type === "i8" || type === "i16" || type === "i32" || type === "i64") { + } else if (type == "u8" || type == "u16" || type == "u32" || type == "u64" || type == "i8" || type == "i16" || type == "i32" || type == "i64") { mem.initialize = "this." + name.text + " = 0"; - } else if (type === "f32" || type === "f64") { + } else if (type == "f32" || type == "f64") { mem.initialize = "this." + name.text + " = 0.0"; } } @@ -250,7 +249,7 @@ class JSONTransform extends Visitor { for (let i = 0; i < _sorted.length; i++) { const member = _sorted[i]!; const _name = member.alias || member.name; - if (_name.length === len) { + if (_name.length == len) { sortedMembers[offset]?.push(member); } else { sortedMembers.push([member]); @@ -263,33 +262,33 @@ class JSONTransform extends Visitor { for (const memberSet of sortedMembers) { const firstMember = memberSet[0]!; const _name = encodeKey(firstMember.alias || firstMember.name); - if (_name.length === 1) { + if (_name.length == 1) { if (first) { - DESERIALIZE += " if (1 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += " if (1 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; first = false; } else { - DESERIALIZE += "else if (1 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += "else if (1 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; } - } else if (_name.length === 2) { + } else if (_name.length == 2) { if (first) { - DESERIALIZE += " if (2 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += " if (2 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; first = false; } else { - DESERIALIZE += "else if (2 === len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; + DESERIALIZE += "else if (2 == len) {\n switch (load(changetype(data) + (key_start << 1))) {\n"; } - } else if (_name.length === 4) { + } else if (_name.length == 4) { if (first) { - DESERIALIZE += " if (4 === len) {\n const code = load(changetype(data) + (key_start << 1));\n"; + DESERIALIZE += " if (4 == len) {\n const code = load(changetype(data) + (key_start << 1));\n"; first = false; } else { - DESERIALIZE += "else if (4 === len) {\n const code = load(changetype(data) + (key_start << 1));\n"; + DESERIALIZE += "else if (4 == len) {\n const code = load(changetype(data) + (key_start << 1));\n"; } } else { if (first) { - DESERIALIZE += " if (" + _name.length + " === len) {\n"; + DESERIALIZE += " if (" + _name.length + " == len) {\n"; first = false; } else { - DESERIALIZE += "else if (" + _name.length + " === len) {\n"; + DESERIALIZE += "else if (" + _name.length + " == len) {\n"; } } let f = true; @@ -297,23 +296,23 @@ class JSONTransform extends Visitor { const member = memberSet[i]!; if (!member.deserialize) continue; const _name = encodeKey(member.alias || member.name); - if (_name.length === 1) { + if (_name.length == 1) { DESERIALIZE += ` case ${_name.charCodeAt(0)}: { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; - } else if (_name.length === 2) { + } else if (_name.length == 2) { DESERIALIZE += ` case ${charCodeAt32(_name, 0)}: { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; - } else if (_name.length === 4) { + } else if (_name.length == 4) { if (f) { f = false; - DESERIALIZE += ` if (${charCodeAt64(_name, 0)} === code) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE += ` if (${charCodeAt64(_name, 0)} == code) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } else { - DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + `else if (${charCodeAt64(_name, 0)} === code) {\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + `else if (${charCodeAt64(_name, 0)} == code) {\n ${member.deserialize}\n return true;\n }\n`; } } else { if (f) { f = false; - DESERIALIZE += ` if (0 === memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE += ` if (0 == memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } else { - DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + ` else if (0 === memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; + DESERIALIZE = DESERIALIZE.slice(0, DESERIALIZE.length - 1) + ` else if (0 == memory.compare(changetype("${escapeQuote(escapeSlash(_name))}"), changetype(data) + (key_start << 1), ${_name.length << 1})) { /* ${_name} */\n ${member.deserialize}\n return true;\n }\n`; } } } @@ -386,13 +385,16 @@ class JSONTransform extends Visitor { const nodeIndex = source.statements.findIndex((n: Node) => { if (n == node) return true; - if (n.kind === NodeKind.Expression && (n).expression == node) return true; + if (n.kind == NodeKind.Expression && (n).expression == node) return true; return false; }); if (nodeIndex > 0) source.statements[nodeIndex] = newNode; } } + visitBinaryExpression(node: BinaryExpression, ref?: Node | null): void { + // if (node.right.kind == NodeKind.Call && (node).) + } visitSource(node: Source): void { this.imports = []; super.visitSource(node); @@ -410,9 +412,9 @@ export default class Transformer extends Transform { .sort((_a, _b) => { const a = _a.internalPath; const b = _b.internalPath; - if (a[0] === "~" && b[0] !== "~") { + if (a[0] == "~" && b[0] !== "~") { return -1; - } else if (a[0] !== "~" && b[0] === "~") { + } else if (a[0] !== "~" && b[0] == "~") { return 1; } else { return 0; @@ -445,7 +447,7 @@ export default class Transformer extends Transform { const schemas = transformer.schemasList; for (const schema of schemas) { if (schema.parent) { - const parent = schemas.find((v) => v.name === schema.parent?.name); + const parent = schemas.find((v) => v.name == schema.parent?.name); if (!parent) throw new Error(`Class ${schema.name} extends its parent class ${schema.parent}, but ${schema.parent} does not include a @json or @serializable decorator! Add the decorator and rebuild.`); } } @@ -486,7 +488,7 @@ class Property { if (this.flags.has(PropertyFlags.JSON_Raw)) { if (this.flags.has(PropertyFlags.Null)) { this.right_s = "(load<" + type + '>(ptr, offsetof("' + name + '")) || "null")'; - this.right_d = "value_start === value_end - 4 && 30399761348886638 === load(changetype(data) + (value_start << 1)) ? null : data.substring(value_start, value_end)"; + this.right_d = "value_start == value_end - 4 && 30399761348886638 == load(changetype(data) + (value_start << 1)) ? null : data.substring(value_start, value_end)"; } else { this.right_s = "load<" + type + '>(ptr, offsetof("' + name + '"))'; this.right_d = "data.substring(value_start, value_end)";