@idlizer/core 2.1.9-arktscgen-8 → 2.1.10-arktscgen-2

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.
Files changed (51) hide show
  1. package/build/lib/src/IndentedPrinter.d.ts +2 -1
  2. package/build/lib/src/IndentedPrinter.js +9 -2
  3. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +35 -26
  4. package/build/lib/src/LanguageWriters/ArgConvertors.js +152 -117
  5. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +5 -4
  6. package/build/lib/src/LanguageWriters/LanguageWriter.js +16 -15
  7. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +1 -1
  8. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -1
  9. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +6 -6
  10. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +1 -1
  11. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +6 -6
  12. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +8 -1
  13. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +28 -8
  14. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +1 -1
  15. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +8 -8
  16. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +1 -1
  17. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +6 -6
  18. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
  19. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +7 -7
  20. package/build/lib/src/config.d.ts +132 -132
  21. package/build/lib/src/config.js +4 -4
  22. package/build/lib/src/configDescriber.js +1 -1
  23. package/build/lib/src/diagnosticmessages.d.ts +18 -12
  24. package/build/lib/src/diagnosticmessages.js +22 -14
  25. package/build/lib/src/diagnostictypes.d.ts +3 -9
  26. package/build/lib/src/formatter.d.ts +2 -1
  27. package/build/lib/src/formatter.js +3 -3
  28. package/build/lib/src/from-idl/deserialize.js +138 -6
  29. package/build/lib/src/from-idl/parser.d.ts +99 -0
  30. package/build/lib/src/from-idl/parser.js +939 -0
  31. package/build/lib/src/idl.d.ts +13 -1
  32. package/build/lib/src/idl.js +6 -0
  33. package/build/lib/src/index.d.ts +1 -0
  34. package/build/lib/src/index.js +1 -0
  35. package/build/lib/src/peer-generation/LayoutManager.d.ts +1 -1
  36. package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
  37. package/build/lib/src/peer-generation/Materialized.js +4 -4
  38. package/build/lib/src/peer-generation/PeerClass.d.ts +5 -0
  39. package/build/lib/src/peer-generation/PeerClass.js +2 -1
  40. package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -0
  41. package/build/lib/src/peer-generation/PeerLibrary.js +8 -2
  42. package/build/lib/src/peer-generation/PeerMethod.d.ts +8 -2
  43. package/build/lib/src/peer-generation/PeerMethod.js +22 -4
  44. package/build/lib/src/peer-generation/modules.js +21 -6
  45. package/build/lib/src/util.d.ts +1 -0
  46. package/build/lib/src/util.js +5 -0
  47. package/package.json +10 -3
  48. package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.d.ts +0 -24
  49. package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.js +0 -69
  50. package/build/lib/src/peer-generation/isExternalType.d.ts +0 -4
  51. package/build/lib/src/peer-generation/isExternalType.js +0 -15
@@ -17,7 +17,7 @@ import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, MethodModifier, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
19
  import { generatorConfiguration, generatorTypePrefix } from "../config";
20
- import { getExtractor, hashCodeFromString, throwException, warn } from "../util";
20
+ import { capitalize, getExtractor, hashCodeFromString, throwException, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
23
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
@@ -139,7 +139,7 @@ export class BooleanConvertor extends BaseArgConvertor {
139
139
  return writer.castToBoolean(param);
140
140
  }
141
141
  convertorSerialize(param, value, printer) {
142
- printer.writeMethodCall(`${param}Serializer`, "writeBoolean", [value]);
142
+ return printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeBoolean", [printer.makeString(value)]));
143
143
  }
144
144
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
145
145
  return assigneer(writer.makeString(`${deserializerName}.readBoolean()`));
@@ -161,7 +161,9 @@ export class UndefinedConvertor extends BaseArgConvertor {
161
161
  convertorArg(param, writer) {
162
162
  return writer.makeUndefined().asString();
163
163
  }
164
- convertorSerialize(param, value, printer) { }
164
+ convertorSerialize(param, value, printer) {
165
+ return printer.makeStatement(printer.makeString(""));
166
+ }
165
167
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
166
168
  return assigneer(writer.makeUndefined());
167
169
  }
@@ -196,7 +198,7 @@ export class StringConvertor extends BaseArgConvertor {
196
198
  : writer.escapeKeyword(param);
197
199
  }
198
200
  convertorSerialize(param, value, writer) {
199
- writer.writeMethodCall(`${param}Serializer`, `writeString`, [value]);
201
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeString", [writer.makeString(value)]));
200
202
  }
201
203
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
202
204
  return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readString()`), this.idlType, { optional: false }));
@@ -231,7 +233,7 @@ export class EnumConvertor extends BaseArgConvertor {
231
233
  return writer.i32FromEnum(writer.makeString(writer.escapeKeyword(param)), this.enumEntry).asString();
232
234
  }
233
235
  convertorSerialize(param, value, writer) {
234
- writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry).asString()]);
236
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry)]));
235
237
  }
236
238
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
237
239
  const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
@@ -279,8 +281,8 @@ export class NumberConvertor extends BaseArgConvertor {
279
281
  ? writer.makeUnsafeCast_(writer.makeString(`&${param}`), this.idlType, PrintHint.AsConstPointer)
280
282
  : writer.escapeKeyword(param);
281
283
  }
282
- convertorSerialize(param, value, printer) {
283
- printer.writeMethodCall(`${param}Serializer`, "writeNumber", [value]);
284
+ convertorSerialize(param, value, writer) {
285
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeNumber", [writer.makeString(value)]));
284
286
  }
285
287
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
286
288
  return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readNumber()`), this.idlType, { optional: false }));
@@ -304,8 +306,8 @@ export class NumericConvertor extends BaseArgConvertor {
304
306
  convertorArg(param, writer) {
305
307
  return param;
306
308
  }
307
- convertorSerialize(param, value, printer) {
308
- printer.writeMethodCall(`${param}Serializer`, `write${this.interopNameConvertor.convert(this.idlType)}`, [value]);
309
+ convertorSerialize(param, value, writer) {
310
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `write${this.interopNameConvertor.convert(this.idlType)}`, [writer.makeString(value)]));
309
311
  }
310
312
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
311
313
  return assigneer(writer.makeString(`${deserializerName}.read${this.interopNameConvertor.convert(this.idlType)}()`));
@@ -320,6 +322,31 @@ export class NumericConvertor extends BaseArgConvertor {
320
322
  return false;
321
323
  }
322
324
  }
325
+ // TODO use NumericConvertor when double is implemented as interop type
326
+ export class DoubleConvertor extends BaseArgConvertor {
327
+ constructor(param) {
328
+ // check numericPrimitiveTypes.include(type)
329
+ super(idl.IDLF64Type, [RuntimeType.NUMBER], false, true, param);
330
+ }
331
+ convertorArg(param, writer) {
332
+ return param;
333
+ }
334
+ convertorSerialize(param, value, writer) {
335
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `writeFloat64`, [writer.makeString(value)]));
336
+ }
337
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
338
+ return assigneer(writer.makeString(`${deserializerName}.readFloat64()`));
339
+ }
340
+ nativeType() {
341
+ return this.idlType;
342
+ }
343
+ interopType() {
344
+ return this.idlType;
345
+ }
346
+ isPointerType() {
347
+ return false;
348
+ }
349
+ }
323
350
  export class BigIntToU64Convertor extends BaseArgConvertor {
324
351
  constructor(param) {
325
352
  super(idl.IDLBigintType, [RuntimeType.BIGINT], false, false, param);
@@ -327,8 +354,8 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
327
354
  convertorArg(param, writer) {
328
355
  return writer.escapeKeyword(param);
329
356
  }
330
- convertorSerialize(param, value, printer) {
331
- printer.writeMethodCall(`${param}Serializer`, "writeInt64", [value]);
357
+ convertorSerialize(param, value, writer) {
358
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `writeInt64`, [writer.makeString(value)]));
332
359
  }
333
360
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
334
361
  return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readInt64()`), this.idlType, { optional: false }));
@@ -359,13 +386,8 @@ export class ObjectConvertor extends BaseArgConvertor {
359
386
  convertorArg(param, writer) {
360
387
  return writer.escapeKeyword(param);
361
388
  }
362
- convertorSerialize(param, value, printer) {
363
- if (printer.language === Language.CPP) {
364
- printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
365
- }
366
- else {
367
- printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
368
- }
389
+ convertorSerialize(param, value, writer) {
390
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, writer.language === Language.CPP ? `writeObject` : "holdAndWriteObject", [writer.makeString(value)]));
369
391
  }
370
392
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
371
393
  return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
@@ -394,8 +416,8 @@ export class PointerConvertor extends BaseArgConvertor {
394
416
  convertorArg(param, writer) {
395
417
  return param;
396
418
  }
397
- convertorSerialize(param, value, printer) {
398
- printer.writeMethodCall(`${param}Serializer`, `writePointer`, [value]);
419
+ convertorSerialize(param, value, writer) {
420
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeString(value)]));
399
421
  }
400
422
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
401
423
  return assigneer(writer.makeString(`${deserializerName}.readPointer()`));
@@ -417,8 +439,8 @@ export class BufferConvertor extends BaseArgConvertor {
417
439
  convertorArg(param, _) {
418
440
  return param;
419
441
  }
420
- convertorSerialize(param, value, printer) {
421
- printer.writeMethodCall(`${param}Serializer`, "writeBuffer", [value]);
442
+ convertorSerialize(param, value, writer) {
443
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeBuffer", [writer.makeString(value)]));
422
444
  }
423
445
  convertorDeserialize(_, deserializerName, assigneer, writer) {
424
446
  return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readBuffer()`), this.idlType, { optional: false }));
@@ -455,12 +477,16 @@ export class AggregateConvertor extends BaseArgConvertor {
455
477
  throw new Error("Do not use for aggregates");
456
478
  }
457
479
  convertorSerialize(param, value, printer) {
458
- this.memberConvertors.forEach((it, index) => {
459
- let memberName = this.members[index][0];
460
- let memberAccess = `${value}.${printer.escapeKeyword(memberName)}`;
461
- printer.writeStatement(printer.makeAssign(`${value}_${memberName}`, undefined, printer.makeString(memberAccess), true));
462
- it.convertorSerialize(param, `${value}_${memberName}`, printer);
480
+ const stmts = this.memberConvertors.flatMap((it, index) => {
481
+ const memberName = this.members[index][0];
482
+ const memberAccess = `${value}.${printer.escapeKeyword(memberName)}`;
483
+ const memberMangledName = `${value}${capitalize(memberName)}`;
484
+ return [
485
+ printer.makeAssign(memberMangledName, undefined, printer.makeString(memberAccess), true),
486
+ it.convertorSerialize(param, memberMangledName, printer)
487
+ ];
463
488
  });
489
+ return printer.makeBlock(stmts, false);
464
490
  }
465
491
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
466
492
  const statements = [];
@@ -475,7 +501,8 @@ export class AggregateConvertor extends BaseArgConvertor {
475
501
  for (let i = 0; i < this.decl.properties.length; i++) {
476
502
  const prop = this.decl.properties[i];
477
503
  const propConvertor = this.memberConvertors[i];
478
- statements.push(propConvertor.convertorDeserialize(`${bufferName}_${prop.name}_buf`, deserializerName, (expr) => {
504
+ const propName = `${bufferName}${capitalize(prop.name)}`;
505
+ statements.push(propConvertor.convertorDeserialize(`${propName}TempBuf`, deserializerName, (expr) => {
479
506
  if (writer.language === Language.CPP) {
480
507
  // prefix initialization for CPP, just easier. Waiting for easy work with nullables
481
508
  return writer.makeAssign(`${bufferName}.${writer.escapeKeyword(prop.name)}`, undefined, expr, false);
@@ -484,7 +511,7 @@ export class AggregateConvertor extends BaseArgConvertor {
484
511
  * todo: check UnionType name creation for union of unnamed nodes (isNamedNode() == false)
485
512
  */
486
513
  const memberType = idl.maybeOptional(prop.type, prop.isOptional);
487
- return writer.makeAssign(`${bufferName}_${prop.name}`, memberType, expr, true, true);
514
+ return writer.makeAssign(propName, memberType, expr, true, true);
488
515
  }, writer));
489
516
  }
490
517
  if (writer.language === Language.CPP) {
@@ -502,7 +529,7 @@ export class AggregateConvertor extends BaseArgConvertor {
502
529
  }
503
530
  else {
504
531
  const resultExpression = this.makeAssigneeExpression(this.decl.properties.map(prop => {
505
- return [prop.name, writer.makeString(`${bufferName}_${prop.name}`)];
532
+ return [prop.name, writer.makeString(`${bufferName}${capitalize(prop.name)}`)];
506
533
  }), writer);
507
534
  statements.push(assigneer(resultExpression));
508
535
  }
@@ -537,10 +564,13 @@ export class TupleConvertor extends AggregateConvertor {
537
564
  throw new Error("Must never be used");
538
565
  }
539
566
  convertorSerialize(param, value, printer) {
540
- this.memberConvertors.forEach((it, index) => {
541
- printer.writeStatement(printer.makeAssign(`${value}_${index}`, undefined, printer.makeTupleAccess(value, index), true));
542
- it.convertorSerialize(param, `${value}_${index}`, printer);
567
+ const stmts = this.memberConvertors.flatMap((it, index) => {
568
+ return [
569
+ printer.makeAssign(`${value}_${index}`, undefined, printer.makeTupleAccess(value, index), true),
570
+ it.convertorSerialize(param, `${value}_${index}`, printer)
571
+ ];
543
572
  });
573
+ return printer.makeBlock(stmts, false);
544
574
  }
545
575
  makeAssigneeExpression(fields, writer) {
546
576
  return writer.makeCast(writer.makeString(`[${fields.map(it => it[1].asString()).join(', ')}]`), this.idlType);
@@ -571,10 +601,10 @@ export class InterfaceConvertor extends BaseArgConvertor {
571
601
  convertorArg(param, writer) {
572
602
  throw new Error("Must never be used");
573
603
  }
574
- convertorSerialize(param, value, printer) {
604
+ convertorSerialize(param, value, writer) {
575
605
  const accessor = getSerializerName(this.declaration);
576
- printer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
577
- printer.writeStaticMethodCall(accessor, 'write', [`${param}Serializer`, value]);
606
+ writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
607
+ return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(value)]));
578
608
  }
579
609
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
580
610
  const accessor = getSerializerName(this.declaration);
@@ -623,26 +653,27 @@ export class ArrayConvertor extends BaseArgConvertor {
623
653
  throw new Error("Must never be used");
624
654
  }
625
655
  convertorSerialize(param, value, printer) {
656
+ const statements = [];
626
657
  // Array length.
627
658
  const valueLength = printer.makeArrayLength(value).asString();
628
- const loopCounter = `${value}_counter_i`;
629
- printer.writeMethodCall(`${param}Serializer`, "writeInt32", [printer.castToInt(valueLength, 32)]);
630
- printer.writeStatement(printer.makeLoop(loopCounter, valueLength));
631
- printer.pushIndent();
632
- printer.writeStatement(printer.makeAssign(`${value}_element`, this.elementType, printer.makeArrayAccess(value, loopCounter), true));
633
- this.elementConvertor.convertorSerialize(param, `${value}_element`, printer);
634
- printer.popIndent();
635
- printer.print(`}`);
659
+ statements.push(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt32", [printer.makeString(printer.castToInt(valueLength, 32))])));
660
+ const loopCounter = `${value}CounterI`;
661
+ const elementName = `${value}TmpElement`;
662
+ statements.push(printer.makeLoop(loopCounter, valueLength, printer.makeBlock([
663
+ printer.makeAssign(elementName, this.elementType, printer.makeArrayAccess(value, loopCounter), true),
664
+ this.elementConvertor.convertorSerialize(param, elementName, printer)
665
+ ], false)));
666
+ return printer.makeBlock(statements, false);
636
667
  }
637
668
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
638
- const lengthBuffer = `${bufferName}_length`;
639
- const counterBuffer = `${bufferName}_i`;
669
+ const lengthBuffer = `${bufferName}Length`;
670
+ const counterBuffer = `${bufferName}BufCounterI`;
640
671
  const statements = [];
641
672
  const arrayType = this.idlType;
642
673
  statements.push(writer.makeAssign(lengthBuffer, idl.IDLI32Type, writer.makeString(`${deserializerName}.readInt32()`), true));
643
674
  statements.push(writer.makeAssign(bufferName, arrayType, writer.makeArrayInit(this.type, lengthBuffer), true, false));
644
675
  statements.push(writer.makeArrayResize(bufferName, writer.getNodeName(arrayType), lengthBuffer, deserializerName));
645
- statements.push(writer.makeLoop(counterBuffer, lengthBuffer, this.elementConvertor.convertorDeserialize(`${bufferName}_buf`, deserializerName, (expr) => {
676
+ statements.push(writer.makeLoop(counterBuffer, lengthBuffer, this.elementConvertor.convertorDeserialize(`${bufferName}TempBuf`, deserializerName, (expr) => {
646
677
  return writer.makeAssign(writer.makeArrayAccess(bufferName, counterBuffer).asString(), undefined, expr, false);
647
678
  }, writer)));
648
679
  statements.push(assigneer(writer.makeString(bufferName)));
@@ -680,20 +711,22 @@ export class MapConvertor extends BaseArgConvertor {
680
711
  convertorSerialize(param, value, printer) {
681
712
  // Map size.
682
713
  const mapSize = printer.makeMapSize(value);
683
- printer.writeMethodCall(`${param}Serializer`, "writeInt32", [printer.castToInt(mapSize.asString(), 32)]);
684
- printer.writeStatement(printer.makeMapForEach(value, `${value}_key`, `${value}_value`, () => {
685
- this.keyConvertor.convertorSerialize(param, `${value}_key`, printer);
686
- this.valueConvertor.convertorSerialize(param, `${value}_value`, printer);
687
- }));
714
+ return printer.makeBlock([
715
+ printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt32", [printer.makeString(printer.castToInt(mapSize.asString(), 32))])),
716
+ printer.makeMapForEach(value, `${value}KeyVar`, `${value}ValueVar`, [
717
+ this.keyConvertor.convertorSerialize(param, `${value}KeyVar`, printer),
718
+ this.valueConvertor.convertorSerialize(param, `${value}ValueVar`, printer)
719
+ ])
720
+ ], false);
688
721
  }
689
722
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
690
723
  const mapTypeName = writer.getNodeName(this.idlType);
691
724
  const keyType = this.keyType;
692
725
  const valueType = this.valueType;
693
- const sizeBuffer = `${bufferName}_size`;
694
- const keyBuffer = `${bufferName}_key`;
695
- const valueBuffer = `${bufferName}_value`;
696
- const counterBuffer = `${bufferName}_i`;
726
+ const sizeBuffer = `${bufferName}SizeVar`;
727
+ const keyBuffer = `${bufferName}KeyVar`;
728
+ const valueBuffer = `${bufferName}ValueVar`;
729
+ const counterBuffer = `${bufferName}IVar`;
697
730
  const keyAccessor = this.getObjectAccessor(writer.language, bufferName, { index: counterBuffer, field: "keys" });
698
731
  const valueAccessor = this.getObjectAccessor(writer.language, bufferName, { index: counterBuffer, field: "values" });
699
732
  return new BlockStatement([
@@ -701,10 +734,10 @@ export class MapConvertor extends BaseArgConvertor {
701
734
  writer.makeAssign(bufferName, this.idlType, writer.makeMapInit(this.idlType), true, false),
702
735
  writer.makeMapResize(mapTypeName, keyType, valueType, bufferName, sizeBuffer, deserializerName),
703
736
  writer.makeLoop(counterBuffer, sizeBuffer, new BlockStatement([
704
- this.keyConvertor.convertorDeserialize(`${keyBuffer}_buf`, deserializerName, (expr) => {
737
+ this.keyConvertor.convertorDeserialize(`${keyBuffer}TempBuf`, deserializerName, (expr) => {
705
738
  return writer.makeAssign(keyBuffer, keyType, expr, true, true);
706
739
  }, writer),
707
- this.valueConvertor.convertorDeserialize(`${valueBuffer}_buf`, deserializerName, (expr) => {
740
+ this.valueConvertor.convertorDeserialize(`${valueBuffer}TempBuf`, deserializerName, (expr) => {
708
741
  return writer.makeAssign(valueBuffer, valueType, expr, true, true);
709
742
  }, writer),
710
743
  writer.makeMapInsert(keyAccessor, keyBuffer, valueAccessor, valueBuffer),
@@ -742,17 +775,17 @@ export class DateConvertor extends BaseArgConvertor {
742
775
  }
743
776
  convertorSerialize(param, value, writer) {
744
777
  if (writer.language === Language.CPP) {
745
- writer.writeMethodCall(`${param}Serializer`, "writeInt64", [value]);
778
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt64", [writer.makeString(value)]));
746
779
  }
747
780
  else if (writer.language === Language.CJ) {
748
- writer.writeMethodCall(`${param}Serializer`, "writeInt64", [
749
- writer.makeCast(writer.makeString(`${value}`), idl.IDLI64Type).asString()
750
- ]);
781
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt64", [
782
+ writer.makeCast(writer.makeString(`${value}`), idl.IDLI64Type)
783
+ ]));
751
784
  }
752
785
  else {
753
- writer.writeMethodCall(`${param}Serializer`, "writeInt64", [
754
- writer.makeCast(writer.makeString(`${value}.getTime()`), idl.IDLI64Type).asString()
755
- ]);
786
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt64", [
787
+ writer.makeCast(writer.makeString(`${value}.getTime()`), idl.IDLI64Type)
788
+ ]));
756
789
  }
757
790
  }
758
791
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
@@ -787,7 +820,7 @@ export class ProxyConvertor extends BaseArgConvertor {
787
820
  return this.convertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
788
821
  }
789
822
  convertorSerialize(param, value, printer) {
790
- this.convertor.convertorSerialize(param, value, printer);
823
+ return this.convertor.convertorSerialize(param, value, printer);
791
824
  }
792
825
  nativeType() {
793
826
  return this.convertor.nativeType();
@@ -822,7 +855,7 @@ export class CustomTypeConvertor extends BaseArgConvertor {
822
855
  }
823
856
  /** todo: check */
824
857
  convertorSerialize(param, value, printer) {
825
- printer.writeMethodCall(`${param}Serializer`, `writeCustomObject`, [`"${this.customTypeName}"`, printer.makeCastCustomObject(value, this.isGenericType).asString()]);
858
+ return printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `writeCustomObject`, [printer.makeString(`"${this.customTypeName}"`), printer.makeCastCustomObject(value, this.isGenericType)]));
826
859
  }
827
860
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
828
861
  const type = writer.language === Language.CPP
@@ -863,18 +896,12 @@ export class OptionConvertor extends BaseArgConvertor {
863
896
  throw new Error("Must never be used");
864
897
  }
865
898
  convertorSerialize(param, value, printer) {
866
- printer.print(`if (${printer.makeDefinedCheck(value).asString()}) {`);
867
- printer.pushIndent();
868
- printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.OBJECT).asString()]);
869
- const valueValue = `${value}_value`.replaceAll('.', '_');
870
- printer.writeStatement(printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
871
- this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer);
872
- printer.popIndent();
873
- printer.print('} else {');
874
- printer.pushIndent();
875
- printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.UNDEFINED).asString()]);
876
- printer.popIndent();
877
- printer.print('}');
899
+ const valueValue = `${value}TmpValue`.replaceAll('.', '_');
900
+ return printer.makeCondition(printer.makeDefinedCheck(value), new BlockStatement([
901
+ printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.OBJECT)])),
902
+ printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true),
903
+ this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer)
904
+ ], true, false), new BlockStatement([printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.UNDEFINED)]))], true, false));
878
905
  }
879
906
  convertorCArg(param) {
880
907
  throw new Error("Must never be used");
@@ -891,7 +918,7 @@ export class OptionConvertor extends BaseArgConvertor {
891
918
  ? `${bufferName}.value` : bufferName;
892
919
  return writer.makeAssign(receiver, undefined, expr, false);
893
920
  }, writer)
894
- ]);
921
+ ], true, false);
895
922
  statements.push(writer.makeSetOptionTag(bufferName, writer.makeCast(writer.makeString(runtimeBufferName), writer.getTagType())));
896
923
  statements.push(writer.makeCondition(writer.makeRuntimeTypeDefinedCheck(runtimeBufferName), thenStatement));
897
924
  statements.push(assigneer(writer.makeString(bufferName)));
@@ -924,23 +951,23 @@ export class UnionConvertor extends BaseArgConvertor {
924
951
  throw new Error("Do not use for union");
925
952
  }
926
953
  convertorSerialize(param, value, printer) {
927
- this.memberConvertors.forEach((it, index) => {
928
- const maybeElse = (index > 0 && this.memberConvertors[index - 1].runtimeTypes.length > 0) ? "else " : "";
929
- const discriminator = this.unionChecker.makeDiscriminator(value, index, printer).asString();
930
- printer.print(`${maybeElse}if (${discriminator}) {`);
931
- printer.pushIndent();
932
- printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.castToInt(index.toString(), 8)]);
954
+ const branches = this.memberConvertors.map((it, index) => {
955
+ const discriminator = this.unionChecker.makeDiscriminator(value, index, printer);
956
+ const statements = [];
957
+ statements.push(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeString(printer.castToInt(index.toString(), 8))])));
933
958
  if (!(it instanceof UndefinedConvertor)) {
934
- printer.writeStatement(printer.makeAssign(`${value}_${index}`, undefined, printer.makeUnionVariantCast(it.getObjectAccessor(printer.language, value), printer.getNodeName(it.idlType), it, index), true));
935
- it.convertorSerialize(param, `${value}_${index}`, printer);
959
+ const varName = `${value}ForIdx${index}`;
960
+ statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(it.getObjectAccessor(printer.language, value), printer.getNodeName(it.idlType), it, index), true));
961
+ statements.push(it.convertorSerialize(param, varName, printer));
936
962
  }
937
- printer.popIndent();
938
- printer.print(`}`);
963
+ const stmt = new BlockStatement(statements, false);
964
+ return { expr: discriminator, stmt };
939
965
  });
966
+ return printer.makeMultiBranchCondition(branches);
940
967
  }
941
968
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
942
969
  const statements = [];
943
- let selectorBuffer = `${bufferName}_selector`;
970
+ let selectorBuffer = `${bufferName}UnionSelector`;
944
971
  const maybeOptionalUnion = writer.language === Language.CPP || writer.language == Language.CJ
945
972
  ? this.type
946
973
  : idl.createOptionalType(this.type);
@@ -953,7 +980,7 @@ export class UnionConvertor extends BaseArgConvertor {
953
980
  const expr = writer.makeString(`${selectorBuffer} == ${writer.castToInt(index.toString(), 8)}`);
954
981
  const stmt = new BlockStatement([
955
982
  writer.makeSetUnionSelector(bufferName, `${index}`),
956
- it.convertorDeserialize(`${bufferName}_u`, deserializerName, (expr) => {
983
+ it.convertorDeserialize(`${bufferName}BufU`, deserializerName, (expr) => {
957
984
  if (writer.language == Language.CJ || writer.language == Language.KOTLIN) {
958
985
  return writer.makeAssign(receiver, undefined, writer.makeFunctionCall(writer.getNodeName(this.type), [expr]), false);
959
986
  }
@@ -991,13 +1018,13 @@ export class FunctionConvertor extends BaseArgConvertor {
991
1018
  this.library = library;
992
1019
  }
993
1020
  convertorArg(param, writer) {
994
- return writer.language == Language.CPP ? `makeArkFunctionFromId(${param})` : `registerCallback(${param})`;
1021
+ throw new Error('Shall not be used');
995
1022
  }
996
1023
  convertorSerialize(param, value, writer) {
997
- writer.writeMethodCall(`${param}Serializer`, "writeFunction", [value]);
1024
+ throw new Error('Shall not be used');
998
1025
  }
999
1026
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1000
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), idl.IDLFunctionType, { optional: true }));
1027
+ throw new Error('Shall not be used');
1001
1028
  }
1002
1029
  nativeType() {
1003
1030
  return idl.IDLFunctionType;
@@ -1034,7 +1061,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1034
1061
  convertorSerialize(param, value, printer) {
1035
1062
  const accessorRoot = getSerializerName(this.declaration);
1036
1063
  printer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
1037
- printer.writeStaticMethodCall(accessorRoot, 'write', [`${param}Serializer`, value]);
1064
+ return printer.makeStatement(printer.makeStaticMethodCall(accessorRoot, 'write', [printer.makeString(`${param}Serializer`), printer.makeString(value)]));
1038
1065
  }
1039
1066
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1040
1067
  const accessorRoot = getSerializerName(this.declaration);
@@ -1073,7 +1100,7 @@ export class ImportTypeConvertor extends BaseArgConvertor {
1073
1100
  throw new Error("Must never be used");
1074
1101
  }
1075
1102
  convertorSerialize(param, value, printer) {
1076
- printer.writeMethodCall(`${param}Serializer`, "writeCustomObject", [`"${this.importedName}"`, value]);
1103
+ return printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeCustomObject", [printer.makeString(`"${this.importedName}"`), printer.makeString(value)]));
1077
1104
  }
1078
1105
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1079
1106
  return assigneer(writer.makeString(`${deserializerName}.readCustomObject("${this.importedName}")`));
@@ -1108,16 +1135,17 @@ export class CallbackConvertor extends BaseArgConvertor {
1108
1135
  }
1109
1136
  convertorSerialize(param, value, writer) {
1110
1137
  if (writer.language == Language.CPP) {
1111
- writer.writeMethodCall(`${param}Serializer`, "writeCallbackResource", [`${value}.resource`]);
1112
- writer.writeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.call`), idl.IDLPointerType, { unsafe: true }).asString()]);
1113
- writer.writeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.callSync`), idl.IDLPointerType, { unsafe: true }).asString()]);
1114
- return;
1138
+ return writer.makeBlock([
1139
+ writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeCallbackResource", [writer.makeString(`${value}.resource`)])),
1140
+ writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.call`), idl.IDLPointerType, { unsafe: true })])),
1141
+ writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.callSync`), idl.IDLPointerType, { unsafe: true })]))
1142
+ ], false);
1115
1143
  }
1116
1144
  if (this.isTransformed)
1117
1145
  value = `CallbackTransformer.transformFrom${this.library.getInteropName(this.decl)}(${value})`;
1118
- writer.writeMethodCall(`${param}Serializer`, `holdAndWriteCallback`, [`${value}`]);
1146
+ return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallback`, [writer.makeString(`${value}`)]));
1119
1147
  }
1120
- convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion = false) {
1148
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion = true) {
1121
1149
  if (writer.language == Language.CPP) {
1122
1150
  const callerInvocation = writer.makeString(`getManagedCallbackCaller(${generateCallbackKindAccess(this.transformedDecl, writer.language)})`);
1123
1151
  const callerSyncInvocation = writer.makeString(`getManagedCallbackCallerSync(${generateCallbackKindAccess(this.transformedDecl, writer.language)})`);
@@ -1132,12 +1160,12 @@ export class CallbackConvertor extends BaseArgConvertor {
1132
1160
  });
1133
1161
  return assigneer(writer.makeString(`{${resourceReadExpr.asString()}, ${callReadExpr.asString()}, ${callSyncReadExpr.asString()}}`));
1134
1162
  }
1135
- const resourceName = bufferName + "_resource";
1136
- const callName = bufferName + "_call";
1137
- const callSyncName = bufferName + '_callSync';
1138
- const argsSerializer = bufferName + "_args";
1139
- const continuationValueName = bufferName + "_continuationValue";
1140
- const continuationCallbackName = bufferName + "_continuationCallback";
1163
+ const resourceName = bufferName + "BufResource";
1164
+ const callName = bufferName + "BufCall";
1165
+ const callSyncName = bufferName + 'BufCallSync';
1166
+ const argsSerializer = bufferName + "BufArgs";
1167
+ const continuationValueName = bufferName + "BufContinuationValue";
1168
+ const continuationCallbackName = bufferName + "BufContinuationCallback";
1141
1169
  const statements = [];
1142
1170
  statements.push(writer.makeAssign(resourceName, idl.createReferenceType("CallbackResource"), writer.makeMethodCall(deserializerName, 'readCallbackResource', []), true));
1143
1171
  statements.push(writer.makeAssign(callName, idl.IDLPointerType, writer.makeMethodCall(deserializerName, `readPointer`, []), true));
@@ -1160,7 +1188,7 @@ export class CallbackConvertor extends BaseArgConvertor {
1160
1188
  writer.makeAssign(continuationValueName, undefined, writer.makeString(`value`), false)
1161
1189
  ]), true),
1162
1190
  new ProxyStatement(writer => {
1163
- continuationConvertor.convertorSerialize(argsSerializer, continuationCallbackName, writer);
1191
+ writer.writeStatement(continuationConvertor.convertorSerialize(argsSerializer, continuationCallbackName, writer));
1164
1192
  }),
1165
1193
  ];
1166
1194
  }
@@ -1172,17 +1200,19 @@ export class CallbackConvertor extends BaseArgConvertor {
1172
1200
  ...this.decl.parameters.map(it => {
1173
1201
  const convertor = this.library.typeConvertor(it.name, it.type, it.isOptional);
1174
1202
  return new ProxyStatement((writer) => {
1175
- convertor.convertorSerialize(argsSerializer, writer.escapeKeyword(it.name), writer);
1203
+ writer.writeStatement(convertor.convertorSerialize(argsSerializer, writer.escapeKeyword(it.name), writer));
1176
1204
  });
1177
1205
  }),
1178
1206
  ...continuation,
1179
1207
  new ExpressionStatement(useSyncVersion
1180
1208
  ? writer.makeNativeCall(this.interopModuleName, `_CallCallbackSync`, [
1209
+ writer.makeString(generatorConfiguration().ApiKind.toString()),
1181
1210
  writer.makeString(generateCallbackKindValue(this.decl).toString()),
1182
1211
  writer.makeSerializedBufferGetter(`${argsSerializer}Serializer`),
1183
1212
  writer.makeString(`${argsSerializer}Serializer.length()`),
1184
1213
  ])
1185
1214
  : writer.makeNativeCall(this.interopModuleName, `_CallCallback`, [
1215
+ writer.makeString(generatorConfiguration().ApiKind.toString()),
1186
1216
  writer.makeString(generateCallbackKindValue(this.decl).toString()),
1187
1217
  writer.makeSerializedBufferGetter(`${argsSerializer}Serializer`),
1188
1218
  writer.makeString(`${argsSerializer}Serializer.length()`),
@@ -1267,13 +1297,18 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
1267
1297
  }
1268
1298
  convertorSerialize(param, value, writer) {
1269
1299
  if (writer.language == Language.CPP) {
1270
- this.callbackConvertor.convertorSerialize(param, value, writer);
1271
- return;
1300
+ return this.callbackConvertor.convertorSerialize(param, value, writer);
1301
+ }
1302
+ let serializeCallback;
1303
+ if (idl.isVoidType(this.promise.elementType[0])) {
1304
+ serializeCallback = writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallbackForPromiseVoid`, []);
1305
+ }
1306
+ else {
1307
+ serializeCallback = writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallbackForPromise<${writer.getNodeName(this.promise.elementType[0])}>`, []);
1272
1308
  }
1273
- const serializeCallback = idl.isVoidType(this.promise.elementType[0])
1274
- ? writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallbackForPromiseVoid`, [])
1275
- : writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallbackForPromise<${writer.getNodeName(this.promise.elementType[0])}>`, []);
1276
- writer.writeStatement(writer.makeAssign(value, undefined, writer.language == Language.CJ ? writer.makeString(serializeCallback.asString().concat('.promise')) : writer.makeTupleAccess(serializeCallback.asString(), 0), true));
1309
+ return writer.makeAssign(value, undefined, writer.language == Language.CJ
1310
+ ? writer.makeString(serializeCallback.asString().concat('.promise'))
1311
+ : writer.makeTupleAccess(serializeCallback.asString(), 0), true);
1277
1312
  }
1278
1313
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1279
1314
  return this.callbackConvertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
@@ -84,8 +84,9 @@ export declare class ExpressionStatement implements LanguageStatement {
84
84
  }
85
85
  export declare class BlockStatement implements LanguageStatement {
86
86
  statements: LanguageStatement[];
87
- private inScope;
88
- constructor(statements: LanguageStatement[], inScope?: boolean);
87
+ readonly inScope: boolean;
88
+ private newLine;
89
+ constructor(statements: LanguageStatement[], inScope?: boolean, newLine?: boolean);
89
90
  write(writer: LanguageWriter): void;
90
91
  }
91
92
  export declare class IfStatement implements LanguageStatement {
@@ -131,7 +132,7 @@ export declare abstract class LambdaExpression implements LanguageExpression {
131
132
  constructor(originalWriter: LanguageWriter, signature: MethodSignature, resolver: ReferenceResolver, body?: LanguageStatement[] | undefined);
132
133
  protected abstract get statementHasSemicolon(): boolean;
133
134
  abstract asString(): string;
134
- bodyAsString(): string;
135
+ bodyAsString(isScoped?: boolean): string;
135
136
  }
136
137
  export declare enum ArgumentModifier {
137
138
  OPTIONAL = 0
@@ -283,7 +284,7 @@ export declare abstract class LanguageWriter {
283
284
  abstract makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
284
285
  abstract makeLoop(counter: string, limit: string): LanguageStatement;
285
286
  abstract makeLoop(counter: string, limit: string, statement: LanguageStatement): LanguageStatement;
286
- abstract makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
287
+ abstract makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
287
288
  abstract getTagType(): idl.IDLType;
288
289
  abstract getRuntimeType(): idl.IDLType;
289
290
  abstract makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;