You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP →

json-as

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

json-as - npm Package Compare versions

Comparing version

to
1.1.4

# Change Log
## 2-25-05-23 - 1.1.4
- revert: grouping properties in favor of memory.compare
## 2025-05-23 - 1.1.3

@@ -4,0 +8,0 @@

{
"name": "json-as",
"version": "1.1.3",
"version": "1.1.4",
"author": "Jairus Tanaka",

@@ -5,0 +5,0 @@ "description": "The only JSON library you'll need for AssemblyScript. SIMD enabled",

@@ -9,3 +9,3 @@ <h6 align="center">

</span>
AssemblyScript - v1.1.3
AssemblyScript - v1.1.4
</pre>

@@ -12,0 +12,0 @@ </h6>

@@ -303,3 +303,2 @@ import { Node } from "assemblyscript/dist/assemblyscript.js";

indent = "";
let shouldGroup = false;
DESERIALIZE += indent + " let keyStart: usize = 0;\n";

@@ -378,5 +377,2 @@ DESERIALIZE += indent + " let keyEnd: usize = 0;\n";

}
if (members.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...members.map((m) => (m.alias || m.name).length << 1)), " ");
}
const complex = isStruct(members[0].type) || members[0].type != "JSON.Obj" || isArray(members[0].type);

@@ -420,3 +416,3 @@ const firstMemberName = members[0].alias || members[0].name;

DESERIALIZE += " if (code == 34 && load<u16>(srcStart - 2) !== 92) {\n";
generateGroups(sortedMembers.string, generateComparisions);
generateComparisions(sortedMembers.string);
DESERIALIZE += " }\n";

@@ -435,3 +431,3 @@ DESERIALIZE += " srcStart += 2;\n";

DESERIALIZE += " if (code == 44 || code == 125 || JSON.Util.isSpace(code)) {\n";
generateGroups(sortedMembers.number, generateComparisions);
generateComparisions(sortedMembers.number);
DESERIALIZE += " }\n";

@@ -457,3 +453,3 @@ DESERIALIZE += " srcStart += 2;\n";

indent = " ";
generateGroups(sortedMembers.object, generateComparisions);
generateComparisions(sortedMembers.object);
indent = "";

@@ -481,3 +477,3 @@ DESERIALIZE += " }\n";

indent = " ";
generateGroups(sortedMembers.array, generateComparisions);
generateComparisions(sortedMembers.array);
indent = "";

@@ -495,41 +491,36 @@ DESERIALIZE += " }\n";

DESERIALIZE += " srcStart += 8;\n";
generateGroups(sortedMembers.boolean, (group) => {
if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
}
const firstMemberName = group[0].alias || group[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
for (let i = 1; i < group.length; i++) {
const member = group[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
});
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
const firstMemberName = sortedMembers.boolean[0].alias || sortedMembers.boolean[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
for (let i = 1; i < sortedMembers.boolean.length; i++) {
const member = sortedMembers.boolean[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
DESERIALIZE += " }";

@@ -539,21 +530,13 @@ mbElse = " else ";

DESERIALIZE += " srcStart += 10;\n";
generateGroups(sortedMembers.boolean, (group) => {
if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
}
const firstMemberName = group[0].alias || group[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
for (let i = 1; i < sortedMembers.boolean.length; i++) {
const member = sortedMembers.boolean[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";

@@ -563,18 +546,8 @@ DESERIALIZE += indent + " keyStart = 0;\n";

DESERIALIZE += indent + " }";
for (let i = 1; i < group.length; i++) {
const member = group[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
});
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
DESERIALIZE += " }\n";

@@ -587,21 +560,26 @@ DESERIALIZE += " }";

DESERIALIZE += " srcStart += 8;\n";
generateGroups(sortedMembers.null, (group) => {
if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
}
const firstMemberName = group[0].alias || group[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
const firstMemberName = sortedMembers.null[0].alias || sortedMembers.null[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + sortedMembers.null[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(sortedMembers.null[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
for (let i = 1; i < sortedMembers.null.length; i++) {
const member = sortedMembers.null[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";

@@ -611,18 +589,8 @@ DESERIALIZE += indent + " keyStart = 0;\n";

DESERIALIZE += indent + " }";
for (let i = 1; i < group.length; i++) {
const member = group[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
});
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
DESERIALIZE += " }";

@@ -982,3 +950,3 @@ DESERIALIZE += "\n }";

default: {
return toMemCCheck(data);
return "memory.compare(keyStart, changetype<usize>(" + JSON.stringify(data) + "), keyEnd - keyStart) == 0";
}

@@ -985,0 +953,0 @@ }

@@ -326,3 +326,2 @@ import { ClassDeclaration, FieldDeclaration, IdentifierExpression, Parser, Source, NodeKind, CommonFlags, ImportStatement, Node, Tokenizer, SourceKind, NamedTypeNode, Range, FEATURE_SIMD, FunctionExpression, MethodDeclaration, Statement, Program, Feature } from "assemblyscript/dist/assemblyscript.js";

indent = "";
let shouldGroup = false;

@@ -361,3 +360,2 @@ // DESERIALIZE += indent + " console.log(\"data: \" + JSON.Util.ptrToStr(srcStart,srcEnd))\n";

DESERIALIZE += indent + " } else {\n";
// if (shouldGroup) DESERIALIZE += " const keySize = keyEnd - keyStart;\n";

@@ -417,5 +415,5 @@ const groupMembers = (members: Property[]): Property[][] => {

}
if (members.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...members.map((m) => (m.alias || m.name).length << 1)), " ");
}
// if (members.some((m) => (m.alias || m.name).length << 1 > 8)) {
// DESERIALIZE += toMemCDecl(Math.max(...members.map((m) => (m.alias || m.name).length << 1)), " ");
// }

@@ -453,3 +451,2 @@ const complex = isStruct(members[0].type) || members[0].type != "JSON.Obj" || isArray(members[0].type);

if (sortedMembers.string.length) {
// generateGroups(sortedMembers.string, generateComparisions)
DESERIALIZE += mbElse + "if (code == 34) {\n";

@@ -462,3 +459,3 @@ DESERIALIZE += " lastIndex = srcStart;\n";

// DESERIALIZE += " console.log(JSON.Util.ptrToStr(keyStart,keyEnd) + \" = \" + load<u16>(keyStart).toString() + \" val \" + JSON.Util.ptrToStr(lastIndex, srcStart));\n";
generateGroups(sortedMembers.string, generateComparisions);
generateComparisions(sortedMembers.string);
DESERIALIZE += " }\n"; // Close break char check

@@ -480,3 +477,3 @@ DESERIALIZE += " srcStart += 2;\n";

generateGroups(sortedMembers.number, generateComparisions);
generateComparisions(sortedMembers.number);
DESERIALIZE += " }\n"; // Close break char check

@@ -504,3 +501,3 @@ DESERIALIZE += " srcStart += 2;\n";

indent = " ";
generateGroups(sortedMembers.object, generateComparisions);
generateComparisions(sortedMembers.object);
indent = "";

@@ -531,3 +528,3 @@

indent = " ";
generateGroups(sortedMembers.array, generateComparisions);
generateComparisions(sortedMembers.array);
indent = "";

@@ -547,46 +544,43 @@

DESERIALIZE += " srcStart += 8;\n";
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
// if (sortedMembers.boolean.some((m) => (m.alias || m.name).length << 1 > 8)) {
// DESERIALIZE += toMemCDecl(Math.max(...sortedMembers.boolean.map((m) => (m.alias || m.name).length << 1)), " ");
// }
generateGroups(sortedMembers.boolean, (group) => {
if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
}
const firstMemberName = group[0].alias || group[0].name;
const firstMemberName = sortedMembers.boolean[0].alias || sortedMembers.boolean[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
for (let i = 1; i < sortedMembers.boolean.length; i++) {
const member = sortedMembers.boolean[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
for (let i = 1; i < group.length; i++) {
const member = group[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), true, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
});
DESERIALIZE += " }"; // Close first char check

@@ -597,22 +591,14 @@ mbElse = " else ";

generateGroups(sortedMembers.boolean, (group) => {
if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
}
const firstMemberName = group[0].alias || group[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + sortedMembers.boolean[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(sortedMembers.boolean[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
for (let i = 1; i < sortedMembers.boolean.length; i++) {
const member = sortedMembers.boolean[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";

@@ -622,20 +608,10 @@ DESERIALIZE += indent + " keyStart = 0;\n";

DESERIALIZE += indent + " }";
}
for (let i = 1; i < group.length; i++) {
const member = group[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), false, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
});
DESERIALIZE += " }\n"; // Close first char check

@@ -650,22 +626,32 @@ DESERIALIZE += " }"; // Close first char check

DESERIALIZE += " srcStart += 8;\n";
generateGroups(sortedMembers.null, (group) => {
if (group.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
if (group.some((m) => (m.alias || m.name).length << 1 > 8)) {
DESERIALIZE += toMemCDecl(Math.max(...group.map((m) => (m.alias || m.name).length << 1)), " ");
}
const firstMemberName = group[0].alias || group[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 2)) {
DESERIALIZE += " const code16 = load<u16>(keyStart);\n";
}
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 4)) {
DESERIALIZE += " const code32 = load<u32>(keyStart);\n";
}
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 6)) {
DESERIALIZE += " const code48 = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n";
}
if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 == 8)) {
DESERIALIZE += " const code64 = load<u64>(keyStart);\n";
}
// if (sortedMembers.null.some((m) => (m.alias || m.name).length << 1 > 8)) {
// DESERIALIZE += toMemCDecl(Math.max(...sortedMembers.null.map((m) => (m.alias || m.name).length << 1)), " ");
// }
const firstMemberName = sortedMembers.null[0].alias || sortedMembers.null[0].name;
DESERIALIZE += indent + " if (" + getComparision(firstMemberName) + ") { // " + firstMemberName + "\n";
DESERIALIZE += indent + " store<" + sortedMembers.null[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(sortedMembers.null[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
for (let i = 1; i < sortedMembers.null.length; i++) {
const member = sortedMembers.null[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + member.type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(member.name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";

@@ -675,21 +661,10 @@ DESERIALIZE += indent + " keyStart = 0;\n";

DESERIALIZE += indent + " }";
}
for (let i = 1; i < group.length; i++) {
const member = group[i];
const memberName = member.alias || member.name;
DESERIALIZE += indent + " else if (" + getComparision(memberName) + ") { // " + memberName + "\n";
DESERIALIZE += indent + " store<" + group[0].type + ">(changetype<usize>(out), null, offsetof<this>(" + JSON.stringify(group[0].name) + "));\n";
DESERIALIZE += indent + " srcStart += 2;\n";
DESERIALIZE += indent + " keyStart = 0;\n";
DESERIALIZE += indent + " break;\n";
DESERIALIZE += indent + " }";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
if (STRICT) {
DESERIALIZE += " else {\n";
DESERIALIZE += indent + ' throw new Error("Unexpected key in JSON object \'" + String.fromCharCode(load<u16>(srcStart)) + "\' at position " + (srcEnd - srcStart).toString());\n';
DESERIALIZE += indent + " }\n";
}
});
DESERIALIZE += " }"; // Close first char check

@@ -1113,5 +1088,5 @@ DESERIALIZE += "\n }"; // Close first char check

default: {
return toMemCCheck(data);
return "memory.compare(keyStart, changetype<usize>(" + JSON.stringify(data)+"), keyEnd - keyStart) == 0"; //toMemCCheck(data);
}
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet