json-as 1.0.0-alpha.3 → 1.0.0-alpha.4

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.
@@ -138,7 +138,6 @@ class JSONTransform extends Visitor {
138
138
  let SERIALIZE = "__SERIALIZE(ptr: usize): void {\n";
139
139
  let INITIALIZE = "@inline __INITIALIZE(): this {\n";
140
140
  let DESERIALIZE = "__DESERIALIZE(keyStart: usize, keyEnd: usize, valStart: usize, valEnd: usize, ptr: usize): void {\n switch (<u32>keyEnd - <u32>keyStart) {\n";
141
- let ALLOCATE = "@inline __ALLOCATE(): void {\n";
142
141
 
143
142
  indent = " ";
144
143
 
@@ -224,6 +223,13 @@ class JSONTransform extends Visitor {
224
223
  if (member.flags.get(PropertyFlags.OmitIf).kind == NodeKind.Function) {
225
224
  const arg = member.flags.get(PropertyFlags.OmitIf) as FunctionExpression;
226
225
  // @ts-ignore: type
226
+ arg.declaration.signature.parameters[0].type = Node.createNamedType(
227
+ Node.createSimpleTypeName("this", node.range),
228
+ null,
229
+ false,
230
+ node.range
231
+ );
232
+ // @ts-ignore: type
227
233
  arg.declaration.signature.returnType.name = Node.createSimpleTypeName("boolean", arg.declaration.signature.returnType.name.range);
228
234
  SERIALIZE += indent + `if (!(${toString(member.flags.get(PropertyFlags.OmitIf))})(this)) {\n`;
229
235
  } else {
@@ -272,31 +278,39 @@ class JSONTransform extends Visitor {
272
278
  indentInc();
273
279
  if (memberLen == 2) DESERIALIZE += `${indent}switch (load<u16>(keyStart)) {\n`;
274
280
  else if (memberLen == 4) DESERIALIZE += `${indent}switch (load<u32>(keyStart)) {\n`;
275
- else if (memberLen == 6) DESERIALIZE += `${indent}let code = (<u64>load<u32>(keyStart) << 16) | <u64>load<u16>(keyStart, 4);\n`;
281
+ else if (memberLen == 6) DESERIALIZE += `${indent}let code = load<u64>(keyStart) & 0x0000FFFFFFFFFFFF;\n`;
282
+ else if (memberLen == 6) DESERIALIZE += `${indent}let code = load<u64>(keyStart);\n`;
276
283
  else DESERIALIZE += toMemCDecl(memberLen, indent);
277
284
  for (let i = 0; i < memberGroup.length; i++) {
278
285
  const member = memberGroup[i];
279
286
  const memberName = member.alias || member.name;
287
+ const dst = this.schemas.find(v => v.name == member.type) ? "ptr + offsetof<this>(\"" + member.name + "\") + 12" : "0";
280
288
  if (memberLen == 2) {
281
289
  DESERIALIZE += `${indent} case ${memberName.charCodeAt(0)}: { // ${memberName}\n`;
282
- DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd), offsetof<this>(${JSON.stringify(member.name)}));\n`;
290
+ DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd, ${dst}), offsetof<this>(${JSON.stringify(member.name)}));\n`;
283
291
  DESERIALIZE += `${indent} return;\n`;
284
292
  DESERIALIZE += `${indent} }\n`;
285
293
  } else if (memberLen == 4) {
286
294
  DESERIALIZE += `${indent} case ${toU32(memberName)}: { // ${memberName}\n`;
287
- DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd), offsetof<this>(${JSON.stringify(member.name)}));\n`;
295
+ DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd, ${dst}), offsetof<this>(${JSON.stringify(member.name)}));\n`;
288
296
  DESERIALIZE += `${indent} return;\n`;
289
297
  DESERIALIZE += `${indent} }\n`;
290
298
  } else if (memberLen == 6) {
291
299
  DESERIALIZE += i == 0 ? indent : "";
292
300
  DESERIALIZE += `if (code == ${toU48(memberName)}) { // ${memberName}\n`;
293
- DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd), offsetof<this>(${JSON.stringify(member.name)}));\n`;
301
+ DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd, ${dst}), offsetof<this>(${JSON.stringify(member.name)}));\n`;
302
+ DESERIALIZE += `${indent} return;\n`;
303
+ DESERIALIZE += `${indent}}${i < memberGroup.length - 1 ? " else " : "\n"}`;
304
+ } else if (memberLen == 8) {
305
+ DESERIALIZE += i == 0 ? indent : "";
306
+ DESERIALIZE += `if (code == ${toU64(memberName)}) { // ${memberName}\n`;
307
+ DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd, ${dst}), offsetof<this>(${JSON.stringify(member.name)}));\n`;
294
308
  DESERIALIZE += `${indent} return;\n`;
295
309
  DESERIALIZE += `${indent}}${i < memberGroup.length - 1 ? " else " : "\n"}`;
296
310
  } else {
297
311
  DESERIALIZE += i == 0 ? indent : "";
298
312
  DESERIALIZE += `if (${toMemCCheck(memberName)}) { // ${memberName}\n`;
299
- DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd), offsetof<this>(${JSON.stringify(member.name)}));\n`;
313
+ DESERIALIZE += `${indent} store<${member.type}>(ptr, JSON.__deserialize<${member.type}>(valStart, valEnd, ${dst}), offsetof<this>(${JSON.stringify(member.name)}));\n`;
300
314
  DESERIALIZE += `${indent} return;\n`;
301
315
  DESERIALIZE += `${indent}}${i < memberGroup.length - 1 ? " else " : "\n"}`;
302
316
  }
@@ -321,8 +335,7 @@ class JSONTransform extends Visitor {
321
335
  SERIALIZE += indent + "bs.offset += 2;\n";
322
336
  SERIALIZE += "}";
323
337
 
324
- ALLOCATE += indent + "bs.proposeSize(" + this.schema.byteSize + ");\n";
325
- ALLOCATE += "}";
338
+ SERIALIZE = SERIALIZE.slice(0, 32) + indent + "bs.proposeSize(" + this.schema.byteSize + ");\n" + SERIALIZE.slice(32);
326
339
 
327
340
  INITIALIZE += " return this;\n";
328
341
  INITIALIZE += "}";
@@ -331,46 +344,39 @@ class JSONTransform extends Visitor {
331
344
  console.log(SERIALIZE);
332
345
  console.log(INITIALIZE);
333
346
  console.log(DESERIALIZE);
334
- console.log(ALLOCATE);
335
347
  }
336
348
 
337
349
  const SERIALIZE_METHOD = SimpleParser.parseClassMember(SERIALIZE, node);
338
350
  const INITIALIZE_METHOD = SimpleParser.parseClassMember(INITIALIZE, node);
339
351
  const DESERIALIZE_METHOD = SimpleParser.parseClassMember(DESERIALIZE, node);
340
- const ALLOCATE_METHOD = SimpleParser.parseClassMember(ALLOCATE, node);
341
352
 
342
353
  if (!node.members.find((v) => v.name.text == "__SERIALIZE")) node.members.push(SERIALIZE_METHOD);
343
354
  if (!node.members.find((v) => v.name.text == "__INITIALIZE")) node.members.push(INITIALIZE_METHOD);
344
355
  if (!node.members.find((v) => v.name.text == "__DESERIALIZE")) node.members.push(DESERIALIZE_METHOD);
345
- if (!node.members.find((v) => v.name.text == "__ALLOCATE")) node.members.push(ALLOCATE_METHOD);
346
356
  super.visitClassDeclaration(node);
347
357
  }
348
358
  generateEmptyMethods(node: ClassDeclaration): void {
349
359
  let SERIALIZE_RAW_EMPTY = '@inline __SERIALIZE(ptr: usize = changetype<usize>(this)): string {\n return "{}";\n}';
350
- let SERIALIZE_BS_EMPTY = "@inline __SERIALIZE(ptr: usize: bool): void {\n store<u32>(bs.offset, 8192123);\n bs.offset += 4;\n}";
360
+ let SERIALIZE_BS_EMPTY = "@inline __SERIALIZE(ptr: usize: bool): void {\n bs.proposeSize(4);\n store<u32>(bs.offset, 8192123);\n bs.offset += 4;\n}";
351
361
  let INITIALIZE_EMPTY = "@inline __INITIALIZE(): this {\n return this;\n}";
352
362
  let DESERIALIZE_EMPTY = "@inline __DESERIALIZE(keyStart: usize, keyEnd: usize, valStart: usize, valEnd: usize, ptr: usize): void {\n return false;\n}";
353
- let ALLOCATE_EMPTY = "@inline __ALLOCATE(): void {\n bs.ensureSize(4);\n}";
354
363
 
355
364
  if (process.env["JSON_DEBUG"]) {
356
365
  console.log(SERIALIZE_RAW_EMPTY);
357
366
  console.log(SERIALIZE_BS_EMPTY);
358
367
  console.log(INITIALIZE_EMPTY);
359
368
  console.log(DESERIALIZE_EMPTY);
360
- console.log(ALLOCATE_EMPTY);
361
369
  }
362
370
 
363
371
  const SERIALIZE_RAW_METHOD_EMPTY = SimpleParser.parseClassMember(SERIALIZE_RAW_EMPTY, node);
364
372
  const SERIALIZE_BS_METHOD_EMPTY = SimpleParser.parseClassMember(SERIALIZE_BS_EMPTY, node);
365
373
  const INITIALIZE_METHOD_EMPTY = SimpleParser.parseClassMember(INITIALIZE_EMPTY, node);
366
374
  const DESERIALIZE_METHOD_EMPTY = SimpleParser.parseClassMember(DESERIALIZE_EMPTY, node);
367
- const ALLOCATE_METHOD_EMPTY = SimpleParser.parseClassMember(ALLOCATE_EMPTY, node);
368
375
 
369
376
  if (!node.members.find((v) => v.name.text == "__SERIALIZE")) node.members.push(SERIALIZE_RAW_METHOD_EMPTY);
370
377
  if (!node.members.find((v) => v.name.text == "__SERIALIZE")) node.members.push(SERIALIZE_BS_METHOD_EMPTY);
371
378
  if (!node.members.find((v) => v.name.text == "__INITIALIZE")) node.members.push(INITIALIZE_METHOD_EMPTY);
372
379
  if (!node.members.find((v) => v.name.text == "__DESERIALIZE")) node.members.push(DESERIALIZE_METHOD_EMPTY);
373
- if (!node.members.find((v) => v.name.text == "__ALLOCATE")) node.members.push(ALLOCATE_METHOD_EMPTY);
374
380
  }
375
381
  // visitCallExpression(node: CallExpression, ref: Node): void {
376
382
  // super.visitCallExpression(node, ref);