diff --git a/assembly/decoder.ts b/assembly/decoder.ts index 1a60d74..b4923ef 100644 --- a/assembly/decoder.ts +++ b/assembly/decoder.ts @@ -196,16 +196,22 @@ export class JSONDecoder { private readString(): string { assert(this.readChar() == '"'.charCodeAt(0), "Expected double-quoted string"); let savedIndex = this.state.readIndex; - let stringParts: Array = new Array(); + let stringParts: Array = null; for (;;) { let byte = this.readChar(); assert(byte >= 0x20, "Unexpected control character"); if (byte == '"'.charCodeAt(0)) { - stringParts.push( - String.fromUTF8(this.state.buffer.buffer.data + savedIndex, this.state.readIndex - savedIndex - 1)); - return stringParts.join(""); - } - if (byte == "\\".charCodeAt(0)) { + let s = String.fromUTF8(this.state.buffer.buffer.data + savedIndex, this.state.readIndex - savedIndex - 1); + if (stringParts != null) { + stringParts.push(s); + return stringParts.join(""); + } else { + return s; + } + } else if (byte == "\\".charCodeAt(0)) { + if (stringParts == null) { + stringParts = new Array(); + } if (this.state.readIndex > savedIndex + 1) { stringParts.push( String.fromUTF8(this.state.buffer.buffer.data + savedIndex, this.state.readIndex - savedIndex - 1)); diff --git a/assembly/encoder.ts b/assembly/encoder.ts index 5df46c6..bb5d74a 100644 --- a/assembly/encoder.ts +++ b/assembly/encoder.ts @@ -13,11 +13,9 @@ export class JSONEncoder { // TODO: Write directly to UTF8 bytes let result = this.toString(); let utf8ptr = result.toUTF8(); - let buffer = new Uint8Array(result.lengthUTF8); - for (let i = 0; i < buffer.length; i++) { - buffer[i] = load(utf8ptr + i); - } - return buffer.subarray(0, buffer.length - 1); + let buffer = new Uint8Array(result.lengthUTF8 - 1); + memory.copy(buffer.buffer.data, utf8ptr, buffer.byteLength); + return buffer; } toString(): String { diff --git a/package-lock.json b/package-lock.json index 901fc76..e0b2000 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,8 @@ { - "requires": true, + "name": "assemblyscript-json", + "version": "0.0.2", "lockfileVersion": 1, + "requires": true, "dependencies": { "@ava/babel-plugin-throws-helper": { "version": "3.0.0", @@ -594,9 +596,35 @@ "dev": true, "requires": { "@protobufjs/utf8": "^1.1.0", - "binaryen": "63.0.0-nightly.20190107", + "binaryen": "72.0.0-nightly.20190308", "glob": "^7.1.3", - "long": "^4.0.0" + "long": "^4.0.0", + "opencollective-postinstall": "^2.0.0", + "source-map-support": "^0.5.10" + }, + "dependencies": { + "binaryen": { + "version": "72.0.0-nightly.20190308", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-72.0.0-nightly.20190308.tgz", + "integrity": "sha512-aUa9Hc3rfvG/9GwUQBuxx1ApBZIOLSEv81nBgQ5ldq+yANenHO7Ml7m3bUrBbDLhIPX2+a26jei4+lLd7CGlJA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } } }, "assign-symbols": { @@ -797,12 +825,6 @@ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, - "binaryen": { - "version": "55.0.0-nightly.20181130", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-55.0.0-nightly.20181130.tgz", - "integrity": "sha512-RfMiI0vavw7Sy7KX8h1xOs4D3zp9nehmtE87DSfY6nXyd2EAdMwJ97tWdepuhOc6JWZsntOfzUA2fqu/sYTTLg==", - "dev": true - }, "bluebird": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", @@ -1731,7 +1753,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -1752,12 +1775,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1772,17 +1797,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -1899,7 +1927,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -1911,6 +1940,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1925,6 +1955,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1932,12 +1963,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -1956,6 +1989,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2036,7 +2070,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2048,6 +2083,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2133,7 +2169,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2169,6 +2206,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2188,6 +2226,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2231,12 +2270,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -3319,6 +3360,12 @@ "mimic-fn": "^1.0.0" } }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "dev": true + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", diff --git a/package.json b/package.json index a4518e9..05645b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name" : "assemblyscript-json", - "version" : "0.0.1", + "name": "assemblyscript-json", + "version": "0.0.2", "scripts": { "asbuild:untouched": "npx asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --sourceMap --validate --debug", "asbuild:optimized": "npx asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat --sourceMap --validate --optimize", @@ -29,5 +29,6 @@ "files": [ "tests/**/*.spec.ts" ] - } + }, + "dependencies": {} }