Comparing version
# 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
557462
-1%10281
-0.25%