json-as 1.1.19 → 1.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +6 -34
- package/assembly/__benches__/abc.bench.ts +12 -4
- package/assembly/__benches__/lib/bench.ts +19 -7
- package/assembly/__tests__/arbitrary.spec.ts +16 -0
- package/assembly/__tests__/enum.spec.ts +35 -0
- package/assembly/deserialize/simd/string.ts +18 -19
- package/assembly/deserialize/simple/object.ts +15 -8
- package/assembly/index.ts +32 -20
- package/assembly/serialize/simd/string.ts +8 -95
- package/assembly/serialize/simple/arbitrary.ts +1 -0
- package/assembly/serialize/simple/array.ts +1 -1
- package/assembly/serialize/simple/bool.ts +1 -1
- package/assembly/serialize/simple/float.ts +3 -1
- package/assembly/serialize/simple/integer.ts +1 -1
- package/assembly/serialize/simple/map.ts +2 -2
- package/assembly/serialize/simple/object.ts +28 -26
- package/assembly/test.tmp.ts +16 -609
- package/assembly/test.ts +2 -0
- package/bench/abc.bench.ts +9 -2
- package/bench/lib/bench.ts +33 -18
- package/bench/runners/assemblyscript.js +1 -0
- package/bench.ts +18 -0
- package/lib/as-bs.ts +13 -12
- package/package.json +6 -6
- package/run-bench.as.sh +5 -6
- package/run-bench.js.sh +2 -6
- package/run-tests.sh +1 -1
- package/transform/lib/index.js +4 -1
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/types.js +21 -0
- package/transform/lib/types.js.map +1 -1
- package/transform/src/index.ts +5 -1
- package/transform/src/types.ts +35 -1
- package/bench.js +0 -83
|
@@ -4,5 +4,7 @@ import { dtoa_buffered } from "util/number";
|
|
|
4
4
|
// @ts-ignore: inline
|
|
5
5
|
@inline export function serializeFloat<T extends number>(data: T): void {
|
|
6
6
|
bs.ensureSize(64);
|
|
7
|
-
|
|
7
|
+
const size = dtoa_buffered(bs.offset, data) << 1;
|
|
8
|
+
bs.stackSize += size;
|
|
9
|
+
bs.offset += size;
|
|
8
10
|
}
|
|
@@ -5,8 +5,8 @@ import { itoa_buffered } from "util/number";
|
|
|
5
5
|
@inline export function serializeInteger<T extends number>(data: T): void {
|
|
6
6
|
bs.ensureSize(sizeof<T>() << 3);
|
|
7
7
|
const bytesWritten = itoa_buffered(bs.offset, data) << 1;
|
|
8
|
-
bs.offset += bytesWritten;
|
|
9
8
|
bs.growSize(bytesWritten);
|
|
9
|
+
bs.offset += bytesWritten;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
// 32 {"x":,"y":,"z"}
|
|
@@ -16,7 +16,7 @@ export function serializeMap<T extends Map<any, any>>(src: T): void {
|
|
|
16
16
|
let keys = src.keys();
|
|
17
17
|
let values = src.values();
|
|
18
18
|
|
|
19
|
-
bs.proposeSize(
|
|
19
|
+
bs.proposeSize(4);
|
|
20
20
|
|
|
21
21
|
store<u16>(bs.offset, BRACE_LEFT);
|
|
22
22
|
bs.offset += 2;
|
|
@@ -37,7 +37,7 @@ export function serializeMap<T extends Map<any, any>>(src: T): void {
|
|
|
37
37
|
store<u16>(bs.offset, COLON);
|
|
38
38
|
bs.offset += 2;
|
|
39
39
|
JSON.__serialize(unchecked(values[srcEnd]));
|
|
40
|
-
bs.growSize(2);
|
|
40
|
+
// bs.growSize(2);
|
|
41
41
|
store<u16>(bs.offset, BRACE_RIGHT);
|
|
42
42
|
bs.offset += 2;
|
|
43
43
|
}
|
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
import { bs } from "../../../lib/as-bs";
|
|
2
2
|
import { JSON } from "../..";
|
|
3
|
-
import { BRACE_LEFT, BRACE_RIGHT,
|
|
4
|
-
import {
|
|
3
|
+
import { BRACE_LEFT, BRACE_RIGHT, COLON, COMMA } from "../../custom/chars";
|
|
4
|
+
import { serializeArbitrary } from "./arbitrary";
|
|
5
|
+
import { serializeString } from "./string";
|
|
5
6
|
|
|
6
|
-
export function serializeObject(
|
|
7
|
-
|
|
7
|
+
export function serializeObject(src: JSON.Obj): void {
|
|
8
|
+
const srcSize = src.size;
|
|
9
|
+
const srcEnd = srcSize - 1;
|
|
10
|
+
|
|
11
|
+
if (srcSize == 0) {
|
|
8
12
|
bs.proposeSize(4);
|
|
9
13
|
store<u32>(bs.offset, 8192123);
|
|
10
14
|
bs.offset += 4;
|
|
11
15
|
return;
|
|
12
16
|
}
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const values = data.values();
|
|
17
|
-
|
|
18
|
-
// console.log(" Keys " + keys.join(" "));
|
|
19
|
-
// console.log(" Values " + values.map<string>(v => v.toString()).join(" "))
|
|
18
|
+
const keys = src.keys();
|
|
19
|
+
const values = src.values();
|
|
20
20
|
|
|
21
|
+
bs.growSize(2);
|
|
21
22
|
store<u16>(bs.offset, BRACE_LEFT);
|
|
22
23
|
bs.offset += 2;
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const keySize = bytes(key);
|
|
35
|
-
store<u32>(bs.offset, 2228268); // ,"
|
|
36
|
-
memory.copy(bs.offset + 4, changetype<usize>(key), keySize);
|
|
37
|
-
store<u32>((bs.offset += keySize + 4), 3801122); // ":
|
|
38
|
-
bs.offset += 4;
|
|
39
|
-
JSON.__serialize(unchecked(values[i]));
|
|
25
|
+
for (let i = 0; i < srcEnd; i++) {
|
|
26
|
+
serializeString(unchecked(keys[i]));
|
|
27
|
+
bs.growSize(2);
|
|
28
|
+
store<u16>(bs.offset, COLON);
|
|
29
|
+
bs.offset += 2;
|
|
30
|
+
|
|
31
|
+
serializeArbitrary(unchecked(values[i]));
|
|
32
|
+
bs.growSize(2);
|
|
33
|
+
store<u16>(bs.offset, COMMA);
|
|
34
|
+
bs.offset += 2;
|
|
40
35
|
}
|
|
41
36
|
|
|
37
|
+
serializeString(unchecked(keys[srcEnd]));
|
|
38
|
+
bs.growSize(2);
|
|
39
|
+
store<u16>(bs.offset, COLON);
|
|
40
|
+
bs.offset += 2;
|
|
41
|
+
serializeArbitrary(unchecked(values[srcEnd]));
|
|
42
|
+
|
|
43
|
+
bs.growSize(2);
|
|
42
44
|
store<u16>(bs.offset, BRACE_RIGHT);
|
|
43
45
|
bs.offset += 2;
|
|
44
46
|
}
|