@idlizer/core 2.1.0 → 2.1.5

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 (82) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +15 -2
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +93 -33
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +34 -14
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +29 -52
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +2 -1
  6. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -5
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +4 -2
  8. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +25 -15
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +7 -18
  10. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +13 -3
  12. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
  13. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
  14. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
  15. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +49 -29
  16. package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
  17. package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
  18. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +21 -10
  19. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +56 -65
  20. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
  21. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
  22. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +16 -10
  23. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +18 -27
  24. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -9
  25. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +18 -21
  26. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +11 -7
  27. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +42 -18
  28. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +14 -6
  29. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +49 -44
  30. package/build/lib/src/LibraryInterface.d.ts +1 -5
  31. package/build/lib/src/config.d.ts +1029 -66
  32. package/build/lib/src/config.js +15 -2
  33. package/build/lib/src/configDescriber.d.ts +30 -3
  34. package/build/lib/src/configDescriber.js +99 -1
  35. package/build/lib/src/from-idl/DtsPrinter.js +32 -20
  36. package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
  37. package/build/lib/src/from-idl/IDLLinter.js +211 -25
  38. package/build/lib/src/from-idl/common.js +1 -1
  39. package/build/lib/src/from-idl/deserialize.d.ts +4 -1
  40. package/build/lib/src/from-idl/deserialize.js +434 -346
  41. package/build/lib/src/idl.d.ts +28 -18
  42. package/build/lib/src/idl.js +376 -111
  43. package/build/lib/src/idlize.d.ts +3 -1
  44. package/build/lib/src/idlize.js +85 -28
  45. package/build/lib/src/index.d.ts +6 -3
  46. package/build/lib/src/index.js +5 -2
  47. package/build/lib/src/options.d.ts +1 -1
  48. package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
  49. package/build/lib/src/peer-generation/BuilderClass.js +0 -8
  50. package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
  51. package/build/lib/src/peer-generation/LayoutManager.js +3 -2
  52. package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
  53. package/build/lib/src/peer-generation/Materialized.js +2 -2
  54. package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
  55. package/build/lib/src/peer-generation/PeerClass.js +0 -1
  56. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  57. package/build/lib/src/peer-generation/PeerFile.js +1 -1
  58. package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -9
  59. package/build/lib/src/peer-generation/PeerLibrary.js +136 -71
  60. package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
  61. package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
  62. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
  63. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
  64. package/build/lib/src/peer-generation/idl/common.d.ts +2 -1
  65. package/build/lib/src/peer-generation/idl/common.js +13 -2
  66. package/build/lib/src/peer-generation/isEnumType.d.ts +5 -0
  67. package/build/lib/src/peer-generation/isEnumType.js +29 -0
  68. package/build/lib/src/peer-generation/isMaterialized.js +25 -8
  69. package/build/lib/src/peer-generation/modules.d.ts +10 -0
  70. package/build/lib/src/peer-generation/modules.js +38 -0
  71. package/build/lib/src/peer-generation/unions.d.ts +3 -2
  72. package/build/lib/src/peer-generation/unions.js +6 -2
  73. package/build/lib/src/resolveNamedNode.d.ts +3 -0
  74. package/build/lib/src/resolveNamedNode.js +105 -0
  75. package/build/lib/src/util.d.ts +7 -0
  76. package/build/lib/src/util.js +39 -0
  77. package/build/lib/src/visitor.d.ts +0 -1
  78. package/build/lib/src/visitor.js +1 -7
  79. package/package.json +2 -2
  80. package/webidl2.js/dist/webidl2.js +35 -7
  81. package/build/lib/src/configMerge.d.ts +0 -2
  82. package/build/lib/src/configMerge.js +0 -42
@@ -15,6 +15,7 @@ export interface ArgConvertor {
15
15
  convertorArg(param: string, writer: LanguageWriter): string;
16
16
  convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
17
17
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
18
+ holdResource(resourceName: string, holder: string, writer: LanguageWriter): void;
18
19
  interopType(): idl.IDLType;
19
20
  nativeType(): idl.IDLType;
20
21
  targetType(writer: LanguageWriter): string;
@@ -23,6 +24,7 @@ export interface ArgConvertor {
23
24
  getMembers(): string[];
24
25
  getObjectAccessor(languge: Language, value: string, args?: Record<string, string>, writer?: LanguageWriter): string;
25
26
  }
27
+ export declare function isDirectConvertedType(originalType: idl.IDLType | undefined, library: PeerLibrary): boolean;
26
28
  export declare function isVMContextMethod(method: Method): boolean;
27
29
  export declare function isDirectMethod(method: Method, library: PeerLibrary): boolean;
28
30
  export declare abstract class BaseArgConvertor implements ArgConvertor {
@@ -32,6 +34,7 @@ export declare abstract class BaseArgConvertor implements ArgConvertor {
32
34
  useArray: boolean;
33
35
  param: string;
34
36
  protected constructor(idlType: idl.IDLType, runtimeTypes: RuntimeType[], isScoped: boolean, useArray: boolean, param: string);
37
+ holdResource(_resourceName: string, _holder: string, _writer: LanguageWriter): void;
35
38
  nativeType(): idl.IDLType;
36
39
  isPointerType(): boolean;
37
40
  interopType(): idl.IDLType;
@@ -119,6 +122,16 @@ export declare class BigIntToU64Convertor extends BaseArgConvertor {
119
122
  interopType(): idl.IDLType;
120
123
  isPointerType(): boolean;
121
124
  }
125
+ export declare class ObjectConvertor extends BaseArgConvertor {
126
+ constructor(param: string, type: idl.IDLType);
127
+ convertorArg(param: string, writer: LanguageWriter): string;
128
+ convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
129
+ convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
130
+ holdResource(name: string, holder: string, writer: LanguageWriter): void;
131
+ nativeType(): idl.IDLType;
132
+ interopType(): idl.IDLType;
133
+ isPointerType(): boolean;
134
+ }
122
135
  export declare class PointerConvertor extends BaseArgConvertor {
123
136
  constructor(param: string);
124
137
  convertorArg(param: string, writer: LanguageWriter): string;
@@ -280,8 +293,7 @@ export declare class UnionConvertor extends BaseArgConvertor {
280
293
  }
281
294
  export declare class FunctionConvertor extends BaseArgConvertor {
282
295
  private library;
283
- protected type: idl.IDLReferenceType;
284
- constructor(library: LibraryInterface, param: string, type: idl.IDLReferenceType);
296
+ constructor(library: LibraryInterface, param: string);
285
297
  convertorArg(param: string, writer: LanguageWriter): string;
286
298
  convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
287
299
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
@@ -321,6 +333,7 @@ export declare class CallbackConvertor extends BaseArgConvertor {
321
333
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter, useSyncVersion?: boolean): LanguageStatement;
322
334
  nativeType(): idl.IDLType;
323
335
  isPointerType(): boolean;
336
+ unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
324
337
  }
325
338
  export declare const CallbackKind = "CallbackKind";
326
339
  export declare function generateCallbackKindName(callback: idl.IDLCallback): string;
@@ -16,37 +16,46 @@ import * as idl from "../idl";
16
16
  import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, MethodModifier } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
- import { generatorTypePrefix } from "../config";
19
+ import { generatorConfiguration, generatorTypePrefix } from "../config";
20
20
  import { hashCodeFromString, 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";
24
24
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
25
25
  import { qualifiedName } from "../peer-generation/idl/common";
26
- function isDirectConvertedType(originalType, library) {
26
+ export function isDirectConvertedType(originalType, library) {
27
+ const debug = false;
27
28
  if (originalType == undefined)
28
29
  return true; // TODO: is it correct?
30
+ if (debug)
31
+ console.log(`IDL type ${idl.DebugUtils.debugPrintType(originalType)}`);
29
32
  if (originalType == idl.IDLInteropReturnBufferType)
30
33
  return false;
31
34
  if (originalType == idl.IDLThisType)
35
+ return true; /* Because this type for native is pointer, right? */
36
+ if (originalType == idl.IDLSerializerBuffer)
32
37
  return true;
33
38
  let convertor = library.typeConvertor("x", originalType, false);
34
39
  // Resolve aliases.
35
40
  while (convertor instanceof TypeAliasConvertor) {
36
41
  convertor = convertor.convertor;
37
42
  }
38
- // Temporary!
39
43
  if (convertor instanceof ArrayConvertor ||
40
- convertor instanceof MapConvertor ||
41
44
  convertor instanceof CustomTypeConvertor ||
45
+ convertor instanceof UnionConvertor ||
42
46
  convertor instanceof CallbackConvertor ||
47
+ convertor instanceof MapConvertor ||
48
+ convertor instanceof TupleConvertor ||
43
49
  convertor instanceof AggregateConvertor ||
44
- convertor instanceof UnionConvertor) {
50
+ convertor instanceof UnionConvertor ||
51
+ convertor instanceof OptionConvertor ||
52
+ convertor instanceof ImportTypeConvertor) {
45
53
  // try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
46
54
  return false;
47
55
  }
48
56
  let type = convertor.interopType();
49
- // TODO: make 'number' be direct!
57
+ if (debug)
58
+ console.log(`converted type ${idl.DebugUtils.debugPrintType(originalType)}`);
50
59
  let result = type == idl.IDLI8Type || type == idl.IDLU8Type
51
60
  || type == idl.IDLI16Type || type == idl.IDLU16Type
52
61
  || type == idl.IDLI32Type || type == idl.IDLU32Type
@@ -55,22 +64,27 @@ function isDirectConvertedType(originalType, library) {
55
64
  || type == idl.IDLPointerType
56
65
  || type == idl.IDLBooleanType
57
66
  || type == idl.IDLVoidType
58
- || type == idl.IDLUndefinedType;
59
- // try { if (!result) console.log(`type ${JSON.stringify(type)} is not direct`) } catch (e) {}
67
+ || type == idl.IDLUndefinedType
68
+ || type == idl.IDLSerializerBuffer
69
+ || type == idl.IDLNumberType;
70
+ if (!result && debug)
71
+ console.log(`type ${idl.DebugUtils.debugPrintType(type)} is not direct`);
60
72
  return result;
61
73
  }
62
74
  export function isVMContextMethod(method) {
63
75
  var _a, _b;
64
76
  return !!idl.asPromise(method.signature.returnType) ||
65
77
  !!((_a = method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.THROWS)) ||
66
- !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT));
78
+ !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT)) ||
79
+ generatorConfiguration().forceContext.includes(method.name);
67
80
  }
68
81
  export function isDirectMethod(method, library) {
69
- if (isVMContextMethod(method))
82
+ if (isVMContextMethod(method)) {
70
83
  return false;
84
+ }
71
85
  let result = isDirectConvertedType(method.signature.returnType, library) &&
72
86
  method.signature.args.every((arg) => isDirectConvertedType(arg, library));
73
- //if (!result) console.log(`method ${method.name} is not direct`)
87
+ // if (!result) console.log(`method ${method.name} is not direct`)
74
88
  return result;
75
89
  }
76
90
  export class BaseArgConvertor {
@@ -81,6 +95,7 @@ export class BaseArgConvertor {
81
95
  this.useArray = useArray;
82
96
  this.param = param;
83
97
  }
98
+ holdResource(_resourceName, _holder, _writer) { }
84
99
  nativeType() {
85
100
  throw new Error("Define");
86
101
  }
@@ -208,20 +223,18 @@ export class EnumConvertor extends BaseArgConvertor {
208
223
  this.enumEntry = enumEntry;
209
224
  }
210
225
  convertorArg(param, writer) {
211
- return writer.makeEnumCast(this.enumEntry, writer.escapeKeyword(param));
226
+ return writer.i32FromEnum(writer.makeString(writer.escapeKeyword(param)), this.enumEntry).asString();
212
227
  }
213
228
  convertorSerialize(param, value, writer) {
214
- writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.makeEnumCast(this.enumEntry, value)]);
229
+ writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry).asString()]);
215
230
  }
216
231
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
217
232
  const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
218
- const enumExpr = idl.isStringEnum(this.enumEntry)
219
- ? writer.enumFromOrdinal(readExpr, idl.createReferenceType(this.enumEntry))
220
- : writer.makeCast(readExpr, idl.createReferenceType(this.enumEntry));
233
+ const enumExpr = writer.enumFromI32(readExpr, this.enumEntry);
221
234
  return assigneer(enumExpr);
222
235
  }
223
236
  nativeType() {
224
- return idl.createReferenceType(this.enumEntry);
237
+ return this.idlType;
225
238
  }
226
239
  interopType() {
227
240
  return idl.IDLI32Type;
@@ -296,21 +309,64 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
296
309
  return writer.escapeKeyword(param);
297
310
  }
298
311
  convertorSerialize(param, value, printer) {
299
- printer.writeMethodCall(`${param}Serializer`, "writeUInt64", [value]);
312
+ printer.writeMethodCall(`${param}Serializer`, "writeInt64", [value]);
300
313
  }
301
314
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
302
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readUInt64()`), this.idlType, { optional: false }));
315
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readInt64()`), this.idlType, { optional: false }));
303
316
  }
304
317
  nativeType() {
305
- return idl.IDLU64Type;
318
+ return idl.IDLI64Type;
306
319
  }
307
320
  interopType() {
308
- return idl.IDLU64Type;
321
+ return idl.IDLI64Type;
309
322
  }
310
323
  isPointerType() {
311
324
  return false;
312
325
  }
313
326
  }
327
+ export class ObjectConvertor extends BaseArgConvertor {
328
+ constructor(param, type) {
329
+ super(type, [
330
+ RuntimeType.BIGINT,
331
+ RuntimeType.BOOLEAN,
332
+ RuntimeType.FUNCTION,
333
+ RuntimeType.MATERIALIZED,
334
+ RuntimeType.NUMBER,
335
+ RuntimeType.OBJECT,
336
+ RuntimeType.STRING,
337
+ RuntimeType.SYMBOL,
338
+ ], false, true, param);
339
+ }
340
+ convertorArg(param, writer) {
341
+ return writer.escapeKeyword(param);
342
+ }
343
+ convertorSerialize(param, value, printer) {
344
+ if (printer.language === Language.CPP) {
345
+ printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
346
+ }
347
+ else {
348
+ printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
349
+ }
350
+ }
351
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
352
+ return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
353
+ }
354
+ holdResource(name, holder, writer) {
355
+ writer.writeStatement(writer.makeAssign(name, idl.createReferenceType(`CallbackResource`), writer.makeString(`{${this.param}.resource.resourceId, holdManagedCallbackResource, releaseManagedCallbackResource}`), true));
356
+ writer.writeExpressionStatement(writer.makeMethodCall(holder, 'holdCallbackResource', [
357
+ writer.makeString('&' + name)
358
+ ]));
359
+ }
360
+ nativeType() {
361
+ return idl.IDLAnyType;
362
+ }
363
+ interopType() {
364
+ return idl.IDLAnyType;
365
+ }
366
+ isPointerType() {
367
+ return true;
368
+ }
369
+ }
314
370
  export class PointerConvertor extends BaseArgConvertor {
315
371
  constructor(param) {
316
372
  // check numericPrimitiveTypes.include(type)
@@ -409,7 +465,7 @@ export class AggregateConvertor extends BaseArgConvertor {
409
465
  * todo: check UnionType name creation for union of unnamed nodes (isNamedNode() == false)
410
466
  */
411
467
  const memberType = prop.isOptional
412
- ? idl.createUnionType([idl.IDLUndefinedType, prop.type], "$NOT TO BE PRINTED%")
468
+ ? idl.createUnionType([idl.IDLUndefinedType, prop.type])
413
469
  : prop.type;
414
470
  return writer.makeAssign(`${bufferName}_${prop.name}`, memberType, expr, true, true);
415
471
  }, writer));
@@ -504,7 +560,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
504
560
  interopType() {
505
561
  // Actually shouldn't be used!
506
562
  // throw new Error("Must never be used")
507
- return idl.IDLObjectType;
563
+ return idl.IDLSerializerBuffer;
508
564
  }
509
565
  isPointerType() {
510
566
  return true;
@@ -547,7 +603,7 @@ export class ArrayConvertor extends BaseArgConvertor {
547
603
  printer.writeStatement(printer.makeLoop(loopCounter, valueLength));
548
604
  printer.pushIndent();
549
605
  printer.writeStatement(printer.makeAssign(`${value}_element`, this.elementType, printer.makeArrayAccess(value, loopCounter), true));
550
- this.elementConvertor.convertorSerialize(param, this.elementConvertor.getObjectAccessor(printer.language, `${value}_element`), printer);
606
+ this.elementConvertor.convertorSerialize(param, `${value}_element`, printer);
551
607
  printer.popIndent();
552
608
  printer.print(`}`);
553
609
  }
@@ -766,7 +822,7 @@ export class OptionConvertor extends BaseArgConvertor {
766
822
  throw new Error("Must never be used");
767
823
  }
768
824
  convertorSerialize(param, value, printer) {
769
- const valueType = `${value}_type`;
825
+ const valueType = `${value}_type`.replaceAll('.', '_');
770
826
  const serializedType = (printer.language == Language.JAVA ? undefined : idl.IDLI32Type);
771
827
  printer.writeStatement(printer.makeAssign(valueType, serializedType, printer.makeRuntimeType(RuntimeType.UNDEFINED), true, false));
772
828
  if (printer.language != Language.CJ) {
@@ -778,8 +834,9 @@ export class OptionConvertor extends BaseArgConvertor {
778
834
  if (printer.language == Language.CJ) {
779
835
  printer.writeMethodCall(`${param}Serializer`, "writeInt8", ["RuntimeType.OBJECT.ordinal"]); // everything is object, except None<T>
780
836
  }
781
- printer.writeStatement(printer.makeAssign(`${value}_value`, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
782
- this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, `${value}_value`), printer);
837
+ const valueValue = `${value}_value`.replaceAll('.', '_');
838
+ printer.writeStatement(printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
839
+ this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer);
783
840
  printer.popIndent();
784
841
  printer.print(`}`);
785
842
  if (printer.language == Language.CJ) {
@@ -904,11 +961,10 @@ export class UnionConvertor extends BaseArgConvertor {
904
961
  }
905
962
  }
906
963
  export class FunctionConvertor extends BaseArgConvertor {
907
- constructor(library, param, type) {
964
+ constructor(library, param) {
908
965
  // TODO: pass functions as integers to native side.
909
966
  super(idl.IDLFunctionType, [RuntimeType.FUNCTION], false, false, param);
910
967
  this.library = library;
911
- this.type = type;
912
968
  }
913
969
  convertorArg(param, writer) {
914
970
  return writer.language == Language.CPP ? `makeArkFunctionFromId(${param})` : `registerCallback(${param})`;
@@ -917,7 +973,7 @@ export class FunctionConvertor extends BaseArgConvertor {
917
973
  writer.writeMethodCall(`${param}Serializer`, "writeFunction", [value]);
918
974
  }
919
975
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
920
- return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), this.type, { optional: true }));
976
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), idl.IDLFunctionType, { optional: true }));
921
977
  }
922
978
  nativeType() {
923
979
  return idl.IDLFunctionType;
@@ -937,7 +993,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
937
993
  convertorArg(param, writer) {
938
994
  switch (writer.language) {
939
995
  case Language.CPP:
940
- return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_")}>(${param})`;
996
+ return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
941
997
  case Language.JAVA:
942
998
  case Language.CJ:
943
999
  return `MaterializedBase.toPeerPtr(${param})`;
@@ -946,12 +1002,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
946
1002
  }
947
1003
  }
948
1004
  convertorSerialize(param, value, printer) {
949
- printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_")}`, [
1005
+ printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_", "namespace.name")}`, [
950
1006
  printer.makeString(value)
951
1007
  ])));
952
1008
  }
953
1009
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
954
- const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_")}`, []), idl.createReferenceType(this.declaration));
1010
+ const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_", "namespace.name")}`, []), this.declaration);
955
1011
  return assigneer(readStatement);
956
1012
  }
957
1013
  nativeType() {
@@ -1054,6 +1110,10 @@ export class CallbackConvertor extends BaseArgConvertor {
1054
1110
  isPointerType() {
1055
1111
  return true;
1056
1112
  }
1113
+ unionDiscriminator(value, index, writer, duplicates) {
1114
+ // We serialize callbacks as table offsets, so don't need to discriminate them. Runtime type check is enough
1115
+ return writer.makeUnionVariantCondition(this, value, `${value}_type`, RuntimeType[RuntimeType.FUNCTION]);
1116
+ }
1057
1117
  }
1058
1118
  ////////////////////////////////////////////////////////////////////////////////
1059
1119
  // UTILS
@@ -114,8 +114,11 @@ export declare class CheckOptionalStatement implements LanguageStatement {
114
114
  }
115
115
  export declare class TsEnumEntityStatement implements LanguageStatement {
116
116
  private readonly enumEntity;
117
- private readonly isExport;
118
- constructor(enumEntity: idl.IDLEnum, isExport: boolean);
117
+ private readonly options;
118
+ constructor(enumEntity: idl.IDLEnum, options: {
119
+ isExport: boolean;
120
+ isDeclare: boolean;
121
+ });
119
122
  write(writer: LanguageWriter): void;
120
123
  private maybeQuoted;
121
124
  }
@@ -134,6 +137,9 @@ export declare abstract class LambdaExpression implements LanguageExpression {
134
137
  abstract asString(): string;
135
138
  bodyAsString(): string;
136
139
  }
140
+ export declare enum ArgumentModifier {
141
+ OPTIONAL = 0
142
+ }
137
143
  export declare enum FieldModifier {
138
144
  READONLY = 0,
139
145
  PRIVATE = 1,
@@ -191,16 +197,18 @@ export declare class MethodSignature {
191
197
  defaults: stringOrNone[] | undefined;
192
198
  printHints?: MethodArgPrintHintOrNone[] | undefined;
193
199
  argNames?: string[] | undefined;
194
- constructor(returnType: idl.IDLType, args: idl.IDLType[], defaults?: stringOrNone[] | undefined, printHints?: MethodArgPrintHintOrNone[] | undefined, argNames?: string[] | undefined);
200
+ argsModifiers: ArgumentModifier[][] | undefined;
201
+ constructor(returnType: idl.IDLType, args: idl.IDLType[], defaults?: stringOrNone[] | undefined, argsModifiers?: (ArgumentModifier[] | ArgumentModifier | undefined)[] | undefined, printHints?: MethodArgPrintHintOrNone[] | undefined, argNames?: string[] | undefined);
195
202
  argName(index: number): string;
196
203
  argDefault(index: number): string | undefined;
204
+ isArgOptional(index: number): boolean;
197
205
  retHint(): PrintHint | undefined;
198
206
  argHint(index: number): PrintHint | undefined;
199
207
  toString(): string;
200
208
  }
201
209
  export declare class NamedMethodSignature extends MethodSignature {
202
210
  argsNames: string[];
203
- constructor(returnType: idl.IDLType, args?: idl.IDLType[], argsNames?: string[], defaults?: stringOrNone[] | undefined, printHints?: MethodArgPrintHintOrNone[]);
211
+ constructor(returnType: idl.IDLType, args?: idl.IDLType[], argsNames?: string[], defaults?: stringOrNone[] | undefined, argsModifiers?: (ArgumentModifier[] | ArgumentModifier | undefined)[] | undefined, printHints?: MethodArgPrintHintOrNone[]);
204
212
  static make(returnType: idl.IDLType, args: {
205
213
  name: string;
206
214
  type: idl.IDLType;
@@ -228,7 +236,10 @@ export declare abstract class LanguageWriter {
228
236
  alias?: string;
229
237
  stringId: string | undefined;
230
238
  numberId: number;
231
- }[], op?: (writer: this) => void): void;
239
+ }[], options: {
240
+ isExport: boolean;
241
+ isDeclare?: boolean;
242
+ }, op?: (writer: this) => void): void;
232
243
  abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
233
244
  abstract writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
234
245
  abstract writeFunctionDeclaration(name: string, signature: MethodSignature): void;
@@ -236,7 +247,13 @@ export declare abstract class LanguageWriter {
236
247
  abstract writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
237
248
  abstract writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
238
249
  abstract writeMethodImplementation(method: Method, op: (writer: this) => void): void;
239
- abstract writeProperty(propName: string, propType: idl.IDLType, mutable?: boolean, getterLambda?: (writer: this) => void, setterLambda?: (writer: this) => void): void;
250
+ abstract writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
251
+ method: Method;
252
+ op?: () => void;
253
+ }, setter?: {
254
+ method: Method;
255
+ op: () => void;
256
+ }): void;
240
257
  abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
241
258
  abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
242
259
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
@@ -246,7 +263,7 @@ export declare abstract class LanguageWriter {
246
263
  abstract makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
247
264
  abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
248
265
  abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
249
- abstract makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
266
+ abstract makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
250
267
  makeTypeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
251
268
  abstract writePrintLog(message: string): void;
252
269
  abstract makeUndefined(): LanguageExpression;
@@ -263,9 +280,8 @@ export declare abstract class LanguageWriter {
263
280
  abstract makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
264
281
  abstract get supportedModifiers(): MethodModifier[];
265
282
  abstract get supportedFieldModifiers(): FieldModifier[];
266
- abstract enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
267
- abstract ordinalFromEnum(value: LanguageExpression, enumReference: idl.IDLType): LanguageExpression;
268
- abstract makeEnumCast(enumEntry: idl.IDLEnum, enumName: string): string;
283
+ abstract enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
284
+ abstract i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
269
285
  abstract getNodeName(type: idl.IDLNode): string;
270
286
  abstract fork(options?: {
271
287
  resolver?: ReferenceResolver;
@@ -307,7 +323,6 @@ export declare abstract class LanguageWriter {
307
323
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, _convertorIndex?: number, _runtimeTypeIndex?: number): LanguageExpression;
308
324
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
309
325
  makeUnionTypeDefaultInitializer(): LanguageExpression;
310
- makeRuntimeTypeGetterCall(value: string): LanguageExpression;
311
326
  makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
312
327
  makeMapResize(mapTypeName: string, keyType: idl.IDLType, valueType: idl.IDLType, map: string, size: string, deserializer: string): LanguageStatement;
313
328
  makeMapSize(map: string): LanguageExpression;
@@ -339,7 +354,10 @@ export declare abstract class LanguageWriter {
339
354
  targetType: (writer: LanguageWriter) => string;
340
355
  }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
341
356
  makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
342
- makeEnumEntity(enumEntity: idl.IDLEnum, isExport: boolean): LanguageStatement;
357
+ makeEnumEntity(enumEntity: idl.IDLEnum, options: {
358
+ isExport: boolean;
359
+ isDeclare?: boolean;
360
+ }): LanguageStatement;
343
361
  makeFieldModifiersList(modifiers: FieldModifier[] | undefined, customFieldFilter?: (field: FieldModifier) => boolean): string;
344
362
  escapeKeyword(keyword: string): string;
345
363
  makeCastCustomObject(customName: string, _isGenericType: boolean): LanguageExpression;
@@ -347,14 +365,13 @@ export declare abstract class LanguageWriter {
347
365
  discriminatorFromExpressions(value: string, runtimeType: RuntimeType, exprs: LanguageExpression[]): LanguageExpression;
348
366
  makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
349
367
  makeNot(expr: LanguageExpression): LanguageExpression;
368
+ makeSerializedBufferGetter(serializer: string): LanguageExpression;
350
369
  makeEquals(args: LanguageExpression[]): LanguageExpression;
351
370
  castToInt(value: string, bitness: 8 | 32): string;
352
371
  castToBoolean(value: string): string;
353
372
  makeCallIsObject(value: string): LanguageExpression;
354
373
  instanceOf(convertor: ArgConvertor, value: string, _duplicateMembers?: Set<string>): LanguageExpression;
355
374
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
356
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
357
- makeLengthDeserializer(deserializer: string): LanguageStatement | undefined;
358
375
  stringifyTypeOrEmpty(type: idl.IDLType | undefined): string;
359
376
  /**
360
377
  * Writes `namespace <namespace> {` and adds extra indent
@@ -365,6 +382,9 @@ export declare abstract class LanguageWriter {
365
382
  * Writes closing brace of namespace block and removes one level of indent
366
383
  */
367
384
  popNamespace(ident?: boolean): void;
385
+ static _isReferenceRelativeToNamespaces: boolean;
386
+ static get isReferenceRelativeToNamespaces(): boolean;
387
+ static relativeReferences<T>(isRelative: boolean, op: () => T): T;
368
388
  }
369
389
  export declare function mangleMethodName(method: Method, id?: number): string;
370
390
  export declare function printMethodDeclaration(printer: IndentedPrinter, retType: string, methodName: string, apiParameters: string[], postfix?: string): void;
@@ -231,14 +231,13 @@ export class CheckOptionalStatement {
231
231
  }
232
232
  // maybe rename or move of fix
233
233
  export class TsEnumEntityStatement {
234
- constructor(enumEntity, isExport) {
234
+ constructor(enumEntity, options) {
235
235
  this.enumEntity = enumEntity;
236
- this.isExport = isExport;
236
+ this.options = options;
237
237
  }
238
238
  write(writer) {
239
239
  // writer.print(this.enumEntity.comment)
240
- idl.getNamespacesPathFor(this.enumEntity).forEach(it => writer.pushNamespace(it.name));
241
- writer.print(`${this.isExport ? "export " : ""}enum ${this.enumEntity.name} {`);
240
+ writer.print(`${this.options.isExport ? "export " : ""}${this.options.isDeclare ? "declare " : ""}enum ${this.enumEntity.name} {`);
242
241
  writer.pushIndent();
243
242
  this.enumEntity.elements.forEach((member, index) => {
244
243
  // writer.print(member.comment)
@@ -253,7 +252,6 @@ export class TsEnumEntityStatement {
253
252
  });
254
253
  writer.popIndent();
255
254
  writer.print(`}`);
256
- idl.getNamespacesPathFor(this.enumEntity).forEach(it => writer.popNamespace());
257
255
  }
258
256
  maybeQuoted(value) {
259
257
  if (typeof value == "string")
@@ -294,6 +292,10 @@ export class LambdaExpression {
294
292
  ////////////////////////////////////////////////////////////////
295
293
  // SIGNATURES //
296
294
  ////////////////////////////////////////////////////////////////
295
+ export var ArgumentModifier;
296
+ (function (ArgumentModifier) {
297
+ ArgumentModifier[ArgumentModifier["OPTIONAL"] = 0] = "OPTIONAL";
298
+ })(ArgumentModifier || (ArgumentModifier = {}));
297
299
  export var FieldModifier;
298
300
  (function (FieldModifier) {
299
301
  FieldModifier[FieldModifier["READONLY"] = 0] = "READONLY";
@@ -354,12 +356,13 @@ PrintHint.AsConstPointer = new PrintHint('AsConstPointer');
354
356
  PrintHint.AsValue = new PrintHint('AsValue');
355
357
  PrintHint.AsConstReference = new PrintHint('AsConstReference');
356
358
  export class MethodSignature {
357
- constructor(returnType, args, defaults = undefined, printHints, argNames) {
359
+ constructor(returnType, args, defaults = undefined, argsModifiers = undefined, printHints, argNames) {
358
360
  this.returnType = returnType;
359
361
  this.args = args;
360
362
  this.defaults = defaults;
361
363
  this.printHints = printHints;
362
364
  this.argNames = argNames;
365
+ this.argsModifiers = argsModifiers === null || argsModifiers === void 0 ? void 0 : argsModifiers.map(it => it === undefined ? [] : Array.isArray(it) ? it : [it]);
363
366
  }
364
367
  argName(index) {
365
368
  var _a, _b;
@@ -369,6 +372,10 @@ export class MethodSignature {
369
372
  var _a;
370
373
  return (_a = this.defaults) === null || _a === void 0 ? void 0 : _a[index];
371
374
  }
375
+ isArgOptional(index) {
376
+ var _a, _b, _c;
377
+ return (_c = (_b = (_a = this.argsModifiers) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.includes(ArgumentModifier.OPTIONAL)) !== null && _c !== void 0 ? _c : false;
378
+ }
372
379
  retHint() {
373
380
  var _a;
374
381
  return (_a = this.printHints) === null || _a === void 0 ? void 0 : _a[0];
@@ -382,8 +389,8 @@ export class MethodSignature {
382
389
  }
383
390
  }
384
391
  export class NamedMethodSignature extends MethodSignature {
385
- constructor(returnType, args = [], argsNames = [], defaults = undefined, printHints) {
386
- super(returnType, args, defaults, printHints);
392
+ constructor(returnType, args = [], argsNames = [], defaults = undefined, argsModifiers = undefined, printHints) {
393
+ super(returnType, args, defaults, argsModifiers, printHints);
387
394
  this.argsNames = argsNames;
388
395
  }
389
396
  static make(returnType, args) {
@@ -538,9 +545,6 @@ export class LanguageWriter {
538
545
  makeUnionTypeDefaultInitializer() {
539
546
  return this.makeRuntimeType(RuntimeType.UNDEFINED);
540
547
  }
541
- makeRuntimeTypeGetterCall(value) {
542
- return this.makeFunctionCall("runtimeType", [this.makeString(value)]);
543
- }
544
548
  makeArrayResize(array, arrayType, length, deserializer) {
545
549
  return new ExpressionStatement(new StringExpression(""));
546
550
  }
@@ -627,8 +631,8 @@ export class LanguageWriter {
627
631
  makeIsTypeCall(value, decl) {
628
632
  return this.makeString(`is${decl.name}(${value})`);
629
633
  }
630
- makeEnumEntity(enumEntity, isExport) {
631
- return new TsEnumEntityStatement(enumEntity, isExport);
634
+ makeEnumEntity(enumEntity, options) {
635
+ return new TsEnumEntityStatement(enumEntity, { isExport: options.isExport, isDeclare: !!options.isDeclare });
632
636
  }
633
637
  makeFieldModifiersList(modifiers, customFieldFilter) {
634
638
  let allowedModifiers = this.supportedFieldModifiers;
@@ -663,6 +667,9 @@ export class LanguageWriter {
663
667
  makeNot(expr) {
664
668
  return this.makeString(`!(${expr.asString()})`);
665
669
  }
670
+ makeSerializedBufferGetter(serializer) {
671
+ return this.makeMethodCall(serializer, `asBuffer`, []);
672
+ }
666
673
  makeEquals(args) {
667
674
  return this.makeNaryOp("===", args);
668
675
  }
@@ -678,45 +685,6 @@ export class LanguageWriter {
678
685
  typeInstanceOf(type, value, members) {
679
686
  return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
680
687
  }
681
- makeLengthSerializer(serializer, value) {
682
- const valueType = "valueType";
683
- return this.makeBlock([
684
- this.makeAssign(valueType, undefined, this.makeFunctionCall("runtimeType", [this.makeString(value)]), true),
685
- this.makeStatement(this.makeMethodCall(serializer, "writeInt8", [this.makeString(valueType)])),
686
- this.makeMultiBranchCondition([
687
- {
688
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER),
689
- stmt: this.makeStatement(this.makeMethodCall(serializer, "writeFloat32", [this.makeString(`${value} as float32`)]))
690
- },
691
- {
692
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING),
693
- stmt: this.makeStatement(this.makeMethodCall(serializer, "writeString", [this.makeString(`${value} as string`)]))
694
- },
695
- {
696
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT),
697
- stmt: this.makeStatement(this.makeMethodCall(serializer, "writeInt32", [this.makeString(`(${value} as Resource).id as int32`)]))
698
- },
699
- ]),
700
- ], false);
701
- }
702
- makeLengthDeserializer(deserializer) {
703
- const valueType = "valueType";
704
- return this.makeBlock([
705
- this.makeAssign(valueType, undefined, this.makeMethodCall(deserializer, "readInt8", []), true),
706
- this.makeMultiBranchCondition([{
707
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER),
708
- stmt: this.makeReturn(this.makeString(`${deserializer}.readFloat32() as number`))
709
- },
710
- {
711
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING),
712
- stmt: this.makeReturn(this.makeMethodCall(deserializer, "readString", []))
713
- },
714
- {
715
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT),
716
- stmt: this.makeReturn(this.makeString(`({id: ${deserializer}.readInt32(), bundleName: "", moduleName: ""}) as Resource`))
717
- }], this.makeReturn(this.makeUndefined())),
718
- ], false);
719
- }
720
688
  stringifyTypeOrEmpty(type) {
721
689
  if (type === undefined)
722
690
  return "";
@@ -740,7 +708,16 @@ export class LanguageWriter {
740
708
  this.popIndent();
741
709
  this.print(`}`);
742
710
  }
711
+ static get isReferenceRelativeToNamespaces() { return this._isReferenceRelativeToNamespaces; }
712
+ static relativeReferences(isRelative, op) {
713
+ const prevIsRelative = this.isReferenceRelativeToNamespaces;
714
+ this._isReferenceRelativeToNamespaces = isRelative;
715
+ const result = op();
716
+ this._isReferenceRelativeToNamespaces = prevIsRelative;
717
+ return result;
718
+ }
743
719
  }
720
+ LanguageWriter._isReferenceRelativeToNamespaces = false;
744
721
  export function mangleMethodName(method, id) {
745
722
  return `${method.name}${id !== null && id !== void 0 ? id : ""}`;
746
723
  }
@@ -17,7 +17,8 @@ export declare class CJTypeNameConvertor implements NodeConvertor<string>, IdlNa
17
17
  convertCallback(type: idl.IDLCallback): string;
18
18
  convertMethod(node: idl.IDLMethod): string;
19
19
  convertConstant(node: idl.IDLConstant): string;
20
- convertImport(type: idl.IDLReferenceType, importClause: string): string;
20
+ convertImport(type: idl.IDLImport): string;
21
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
21
22
  convertTypeReference(type: idl.IDLReferenceType): string;
22
23
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
23
24
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;