@idlizer/core 2.0.43 → 2.1.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 (45) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +17 -1
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +115 -13
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +13 -5
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +9 -3
  5. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +1 -1
  6. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +15 -13
  7. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +0 -1
  8. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
  9. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -1
  10. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +10 -2
  11. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +47 -29
  12. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +10 -3
  13. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +7 -10
  14. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +0 -5
  15. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +1 -42
  16. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +9 -3
  17. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +30 -7
  18. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +8 -2
  19. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +38 -11
  20. package/build/lib/src/LibraryInterface.d.ts +0 -1
  21. package/build/lib/src/config.d.ts +889 -0
  22. package/build/lib/src/config.js +11 -0
  23. package/build/lib/src/from-idl/DtsPrinter.js +2 -2
  24. package/build/lib/src/idl.d.ts +4 -2
  25. package/build/lib/src/idl.js +13 -2
  26. package/build/lib/src/idlize.d.ts +1 -0
  27. package/build/lib/src/idlize.js +3 -2
  28. package/build/lib/src/index.d.ts +2 -0
  29. package/build/lib/src/index.js +2 -0
  30. package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -3
  31. package/build/lib/src/peer-generation/PeerLibrary.js +23 -9
  32. package/build/lib/src/peer-generation/PeerMethod.js +2 -16
  33. package/build/lib/src/peer-generation/isEnumType.d.ts +5 -0
  34. package/build/lib/src/peer-generation/isEnumType.js +29 -0
  35. package/build/lib/src/peer-generation/isMaterialized.js +16 -1
  36. package/build/lib/src/peer-generation/modules.d.ts +10 -0
  37. package/build/lib/src/peer-generation/modules.js +38 -0
  38. package/build/lib/src/util.d.ts +1 -0
  39. package/build/lib/src/util.js +6 -0
  40. package/package.json +2 -2
  41. package/build/lib/src/configMerge.d.ts +0 -2
  42. package/build/lib/src/configMerge.js +0 -42
  43. package/webidl2.js/LICENSE +0 -21
  44. package/webidl2.js/README.md +0 -827
  45. package/webidl2.js/dist/package.json +0 -3
@@ -1,9 +1,10 @@
1
1
  import * as idl from "../idl";
2
2
  import { Language } from "../Language";
3
- import { LanguageExpression, LanguageStatement, LanguageWriter, ExpressionAssigner } from "./LanguageWriter";
3
+ import { ExpressionAssigner, LanguageExpression, LanguageStatement, LanguageWriter, Method } from "./LanguageWriter";
4
4
  import { RuntimeType } from "./common";
5
5
  import { LibraryInterface } from "../LibraryInterface";
6
6
  import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
7
+ import { PeerLibrary } from "../peer-generation/PeerLibrary";
7
8
  export interface ArgConvertor {
8
9
  param: string;
9
10
  idlType: idl.IDLType;
@@ -14,6 +15,7 @@ export interface ArgConvertor {
14
15
  convertorArg(param: string, writer: LanguageWriter): string;
15
16
  convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
16
17
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
18
+ holdResource(resourceName: string, holder: string, writer: LanguageWriter): void;
17
19
  interopType(): idl.IDLType;
18
20
  nativeType(): idl.IDLType;
19
21
  targetType(writer: LanguageWriter): string;
@@ -22,6 +24,9 @@ export interface ArgConvertor {
22
24
  getMembers(): string[];
23
25
  getObjectAccessor(languge: Language, value: string, args?: Record<string, string>, writer?: LanguageWriter): string;
24
26
  }
27
+ export declare function isDirectConvertedType(originalType: idl.IDLType | undefined, library: PeerLibrary): boolean;
28
+ export declare function isVMContextMethod(method: Method): boolean;
29
+ export declare function isDirectMethod(method: Method, library: PeerLibrary): boolean;
25
30
  export declare abstract class BaseArgConvertor implements ArgConvertor {
26
31
  idlType: idl.IDLType;
27
32
  runtimeTypes: RuntimeType[];
@@ -29,6 +34,7 @@ export declare abstract class BaseArgConvertor implements ArgConvertor {
29
34
  useArray: boolean;
30
35
  param: string;
31
36
  protected constructor(idlType: idl.IDLType, runtimeTypes: RuntimeType[], isScoped: boolean, useArray: boolean, param: string);
37
+ holdResource(_resourceName: string, _holder: string, _writer: LanguageWriter): void;
32
38
  nativeType(): idl.IDLType;
33
39
  isPointerType(): boolean;
34
40
  interopType(): idl.IDLType;
@@ -116,6 +122,16 @@ export declare class BigIntToU64Convertor extends BaseArgConvertor {
116
122
  interopType(): idl.IDLType;
117
123
  isPointerType(): boolean;
118
124
  }
125
+ export declare class ObjectConvertor extends BaseArgConvertor {
126
+ constructor(param: string);
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
+ }
119
135
  export declare class PointerConvertor extends BaseArgConvertor {
120
136
  constructor(param: string);
121
137
  convertorArg(param: string, writer: LanguageWriter): string;
@@ -14,15 +14,74 @@
14
14
  */
15
15
  import * as idl from "../idl";
16
16
  import { Language } from "../Language";
17
- import { PrintHint, BlockStatement, StringExpression } from "./LanguageWriter";
17
+ import { BlockStatement, PrintHint, StringExpression, MethodModifier } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
19
  import { generatorTypePrefix } from "../config";
20
20
  import { hashCodeFromString, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
- import { CppNameConvertor } from "./convertors/CppConvertors";
22
+ import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
23
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
24
- import { CppConvertor } from "./convertors/CppConvertors";
25
24
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
25
+ import { qualifiedName } from "../peer-generation/idl/common";
26
+ export function isDirectConvertedType(originalType, library) {
27
+ const debug = false;
28
+ if (originalType == undefined)
29
+ return true; // TODO: is it correct?
30
+ if (debug)
31
+ console.log(`IDL type ${idl.DebugUtils.debugPrintType(originalType)}`);
32
+ if (originalType == idl.IDLInteropReturnBufferType) {
33
+ return false;
34
+ }
35
+ if (originalType == idl.IDLSerializerBuffer)
36
+ return true;
37
+ let convertor = library.typeConvertor("x", originalType, false);
38
+ // Resolve aliases.
39
+ while (convertor instanceof TypeAliasConvertor) {
40
+ convertor = convertor.convertor;
41
+ }
42
+ if (convertor instanceof ArrayConvertor ||
43
+ convertor instanceof CustomTypeConvertor ||
44
+ convertor instanceof UnionConvertor ||
45
+ convertor instanceof CallbackConvertor ||
46
+ convertor instanceof MapConvertor ||
47
+ convertor instanceof TupleConvertor ||
48
+ convertor instanceof AggregateConvertor ||
49
+ convertor instanceof OptionConvertor) {
50
+ return false;
51
+ }
52
+ let type = convertor.interopType();
53
+ if (debug)
54
+ console.log(`converted type ${idl.DebugUtils.debugPrintType(originalType)}`);
55
+ let result = type == idl.IDLI8Type || type == idl.IDLU8Type
56
+ || type == idl.IDLI16Type || type == idl.IDLU16Type
57
+ || type == idl.IDLI32Type || type == idl.IDLU32Type
58
+ || type == idl.IDLF32Type
59
+ || type == idl.IDLI64Type || type == idl.IDLU64Type
60
+ || type == idl.IDLPointerType
61
+ || type == idl.IDLBooleanType
62
+ || type == idl.IDLVoidType
63
+ || type == idl.IDLUndefinedType
64
+ || type == idl.IDLSerializerBuffer
65
+ || type == idl.IDLNumberType;
66
+ if (!result && debug)
67
+ console.log(`type ${idl.DebugUtils.debugPrintType(type)} is not direct`);
68
+ return result;
69
+ }
70
+ export function isVMContextMethod(method) {
71
+ var _a, _b;
72
+ return !!idl.asPromise(method.signature.returnType) ||
73
+ !!((_a = method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.THROWS)) ||
74
+ !!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT));
75
+ }
76
+ export function isDirectMethod(method, library) {
77
+ if (isVMContextMethod(method)) {
78
+ return false;
79
+ }
80
+ let result = isDirectConvertedType(method.signature.returnType, library) &&
81
+ method.signature.args.every((arg) => isDirectConvertedType(arg, library));
82
+ // if (!result) console.log(`method ${method.name} is not direct`)
83
+ return result;
84
+ }
26
85
  export class BaseArgConvertor {
27
86
  constructor(idlType, runtimeTypes, isScoped, useArray, param) {
28
87
  this.idlType = idlType;
@@ -31,6 +90,7 @@ export class BaseArgConvertor {
31
90
  this.useArray = useArray;
32
91
  this.param = param;
33
92
  }
93
+ holdResource(_resourceName, _holder, _writer) { }
34
94
  nativeType() {
35
95
  throw new Error("Define");
36
96
  }
@@ -158,14 +218,10 @@ export class EnumConvertor extends BaseArgConvertor {
158
218
  this.enumEntry = enumEntry;
159
219
  }
160
220
  convertorArg(param, writer) {
161
- return writer.makeEnumCast(writer.escapeKeyword(param), false, this);
221
+ return writer.makeEnumCast(this.enumEntry, writer.escapeKeyword(param));
162
222
  }
163
223
  convertorSerialize(param, value, writer) {
164
- value =
165
- idl.isStringEnum(this.enumEntry)
166
- ? writer.ordinalFromEnum(writer.makeString(value), idl.createReferenceType(this.enumEntry)).asString()
167
- : writer.makeEnumCast(value, false, this);
168
- writer.writeMethodCall(`${param}Serializer`, "writeInt32", [value]);
224
+ writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.makeEnumCast(this.enumEntry, value)]);
169
225
  }
170
226
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
171
227
  const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
@@ -265,6 +321,50 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
265
321
  return false;
266
322
  }
267
323
  }
324
+ export class ObjectConvertor extends BaseArgConvertor {
325
+ constructor(param) {
326
+ super(idl.IDLAnyType, [
327
+ RuntimeType.BIGINT,
328
+ RuntimeType.BOOLEAN,
329
+ RuntimeType.FUNCTION,
330
+ RuntimeType.MATERIALIZED,
331
+ RuntimeType.NUMBER,
332
+ RuntimeType.OBJECT,
333
+ RuntimeType.STRING,
334
+ RuntimeType.SYMBOL,
335
+ RuntimeType.UNDEFINED
336
+ ], false, true, param);
337
+ }
338
+ convertorArg(param, writer) {
339
+ return writer.escapeKeyword(param);
340
+ }
341
+ convertorSerialize(param, value, printer) {
342
+ if (printer.language === Language.CPP) {
343
+ printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
344
+ }
345
+ else {
346
+ printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
347
+ }
348
+ }
349
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
350
+ return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
351
+ }
352
+ holdResource(name, holder, writer) {
353
+ writer.writeStatement(writer.makeAssign(name, idl.createReferenceType(`CallbackResource`), writer.makeString(`{${this.param}.resource.resourceId, holdManagedCallbackResource, releaseManagedCallbackResource}`), true));
354
+ writer.writeExpressionStatement(writer.makeMethodCall(holder, 'holdCallbackResource', [
355
+ writer.makeString('&' + name)
356
+ ]));
357
+ }
358
+ nativeType() {
359
+ return idl.IDLAnyType;
360
+ }
361
+ interopType() {
362
+ return idl.IDLAnyType;
363
+ }
364
+ isPointerType() {
365
+ return true;
366
+ }
367
+ }
268
368
  export class PointerConvertor extends BaseArgConvertor {
269
369
  constructor(param) {
270
370
  // check numericPrimitiveTypes.include(type)
@@ -456,7 +556,9 @@ export class InterfaceConvertor extends BaseArgConvertor {
456
556
  return this.idlType;
457
557
  }
458
558
  interopType() {
459
- throw new Error("Must never be used");
559
+ // Actually shouldn't be used!
560
+ // throw new Error("Must never be used")
561
+ return idl.IDLObjectType;
460
562
  }
461
563
  isPointerType() {
462
564
  return true;
@@ -889,7 +991,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
889
991
  convertorArg(param, writer) {
890
992
  switch (writer.language) {
891
993
  case Language.CPP:
892
- return `static_cast<${generatorTypePrefix()}${this.declaration.name}>(${param})`;
994
+ return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_")}>(${param})`;
893
995
  case Language.JAVA:
894
996
  case Language.CJ:
895
997
  return `MaterializedBase.toPeerPtr(${param})`;
@@ -898,12 +1000,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
898
1000
  }
899
1001
  }
900
1002
  convertorSerialize(param, value, printer) {
901
- printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${this.declaration.name}`, [
1003
+ printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_")}`, [
902
1004
  printer.makeString(value)
903
1005
  ])));
904
1006
  }
905
1007
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
906
- const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${this.declaration.name}`, []), idl.createReferenceType(this.declaration));
1008
+ const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_")}`, []), idl.createReferenceType(this.declaration));
907
1009
  return assigneer(readStatement);
908
1010
  }
909
1011
  nativeType() {
@@ -154,7 +154,8 @@ export declare enum MethodModifier {
154
154
  GETTER = 6,
155
155
  SETTER = 7,
156
156
  THROWS = 8,
157
- FREE = 9
157
+ FREE = 9,
158
+ FORCE_CONTEXT = 10
158
159
  }
159
160
  export declare enum ClassModifier {
160
161
  PUBLIC = 0,
@@ -172,6 +173,7 @@ export declare class Method {
172
173
  signature: MethodSignature;
173
174
  modifiers: MethodModifier[] | undefined;
174
175
  generics?: string[] | undefined;
176
+ private static knownReferenceTypes;
175
177
  constructor(name: string, signature: MethodSignature, modifiers?: MethodModifier[] | undefined, generics?: string[] | undefined);
176
178
  }
177
179
  export declare class PrintHint {
@@ -234,7 +236,13 @@ export declare abstract class LanguageWriter {
234
236
  abstract writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
235
237
  abstract writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
236
238
  abstract writeMethodImplementation(method: Method, op: (writer: this) => void): void;
237
- abstract writeProperty(propName: string, propType: idl.IDLType, mutable?: boolean, getterLambda?: (writer: this) => void, setterLambda?: (writer: this) => void): void;
239
+ abstract writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
240
+ method: Method;
241
+ op?: () => void;
242
+ }, setter?: {
243
+ method: Method;
244
+ op: () => void;
245
+ }): void;
238
246
  abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
239
247
  abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
240
248
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
@@ -263,7 +271,7 @@ export declare abstract class LanguageWriter {
263
271
  abstract get supportedFieldModifiers(): FieldModifier[];
264
272
  abstract enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
265
273
  abstract ordinalFromEnum(value: LanguageExpression, enumReference: idl.IDLType): LanguageExpression;
266
- abstract makeEnumCast(enumName: string, unsafe: boolean, convertor: ArgConvertor | undefined): string;
274
+ abstract makeEnumCast(enumEntry: idl.IDLEnum, enumName: string): string;
267
275
  abstract getNodeName(type: idl.IDLNode): string;
268
276
  abstract fork(options?: {
269
277
  resolver?: ReferenceResolver;
@@ -315,7 +323,6 @@ export declare abstract class LanguageWriter {
315
323
  makeString(value: string): LanguageExpression;
316
324
  makeNaryOp(op: string, args: LanguageExpression[]): LanguageExpression;
317
325
  makeStatement(expr: LanguageExpression): LanguageStatement;
318
- tryWriteQuick(method: Method): void;
319
326
  writeNativeMethodDeclaration(method: Method): void;
320
327
  writeUnsafeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
321
328
  pushIndent(): void;
@@ -331,7 +338,7 @@ export declare abstract class LanguageWriter {
331
338
  /**
332
339
  * TODO: replace me with {@link makeUnsafeCast_}
333
340
  */
334
- makeUnsafeCast(convertor: ArgConvertor, param: string): string;
341
+ makeUnsafeCast(param: string): string;
335
342
  makeUnsafeCast_(value: LanguageExpression, type: idl.IDLType, typeOptions?: PrintHint): string;
336
343
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
337
344
  makeDiscriminatorFromFields(convertor: {
@@ -346,6 +353,7 @@ export declare abstract class LanguageWriter {
346
353
  discriminatorFromExpressions(value: string, runtimeType: RuntimeType, exprs: LanguageExpression[]): LanguageExpression;
347
354
  makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
348
355
  makeNot(expr: LanguageExpression): LanguageExpression;
356
+ makeSerializedBufferGetter(serializer: string): LanguageExpression;
349
357
  makeEquals(args: LanguageExpression[]): LanguageExpression;
350
358
  castToInt(value: string, bitness: 8 | 32): string;
351
359
  castToBoolean(value: string): string;
@@ -317,6 +317,7 @@ export var MethodModifier;
317
317
  MethodModifier[MethodModifier["SETTER"] = 7] = "SETTER";
318
318
  MethodModifier[MethodModifier["THROWS"] = 8] = "THROWS";
319
319
  MethodModifier[MethodModifier["FREE"] = 9] = "FREE";
320
+ MethodModifier[MethodModifier["FORCE_CONTEXT"] = 10] = "FORCE_CONTEXT";
320
321
  })(MethodModifier || (MethodModifier = {}));
321
322
  export var ClassModifier;
322
323
  (function (ClassModifier) {
@@ -339,6 +340,10 @@ export class Method {
339
340
  this.generics = generics;
340
341
  }
341
342
  }
343
+ // Mostly for synthetic methods.
344
+ Method.knownReferenceTypes = [
345
+ 'KInt', 'KPointer', 'undefined' /* This one looks like a bug */
346
+ ];
342
347
  export class PrintHint {
343
348
  constructor(hint) {
344
349
  this.hint = hint;
@@ -565,9 +570,7 @@ export class LanguageWriter {
565
570
  makeStatement(expr) {
566
571
  return new ExpressionStatement(expr);
567
572
  }
568
- tryWriteQuick(method) { }
569
573
  writeNativeMethodDeclaration(method) {
570
- this.tryWriteQuick(method);
571
574
  this.writeMethodDeclaration(method.name, method.signature);
572
575
  }
573
576
  writeUnsafeNativeMethodDeclaration(name, signature) {
@@ -609,7 +612,7 @@ export class LanguageWriter {
609
612
  /**
610
613
  * TODO: replace me with {@link makeUnsafeCast_}
611
614
  */
612
- makeUnsafeCast(convertor, param) {
615
+ makeUnsafeCast(param) {
613
616
  return `unsafeCast<int32>(${param})`;
614
617
  }
615
618
  makeUnsafeCast_(value, type, typeOptions) {
@@ -660,6 +663,9 @@ export class LanguageWriter {
660
663
  makeNot(expr) {
661
664
  return this.makeString(`!(${expr.asString()})`);
662
665
  }
666
+ makeSerializedBufferGetter(serializer) {
667
+ return this.makeMethodCall(serializer, `asBuffer`, []);
668
+ }
663
669
  makeEquals(args) {
664
670
  return this.makeNaryOp("===", args);
665
671
  }
@@ -25,7 +25,7 @@ export declare class GenericCppConvertor implements NodeConvertor<ConvertResult>
25
25
  convertTypeReference(type: idl.IDLReferenceType): ConvertResult;
26
26
  convertTypeParameter(type: idl.IDLTypeParameterType): ConvertResult;
27
27
  convertPrimitiveType(type: idl.IDLPrimitiveType): ConvertResult;
28
- private enumName;
28
+ private qualifiedName;
29
29
  private computeTargetTypeLiteralName;
30
30
  }
31
31
  export declare class CppConvertor extends GenericCppConvertor implements IdlNameConvertor {
@@ -39,34 +39,34 @@ export class GenericCppConvertor {
39
39
  switch (node.subkind) {
40
40
  case idl.IDLInterfaceSubkind.AnonymousInterface:
41
41
  return node.name
42
- ? this.make(node.name)
42
+ ? this.make(this.qualifiedName(node))
43
43
  : this.make(this.computeTargetTypeLiteralName(node), true);
44
44
  case idl.IDLInterfaceSubkind.Interface:
45
45
  case idl.IDLInterfaceSubkind.Class:
46
46
  if (isInIdlizeInternal(node)) {
47
- return this.make(node.name, true);
47
+ return this.make(this.qualifiedName(node), true);
48
48
  }
49
- return this.make(node.name);
49
+ return this.make(this.qualifiedName(node));
50
50
  case idl.IDLInterfaceSubkind.Tuple:
51
51
  return node.name
52
- ? this.make(node.name)
52
+ ? this.make(this.qualifiedName(node))
53
53
  : this.make(`Tuple_${node.properties.map(it => this.convertNode(idl.maybeOptional(it.type, it.isOptional)).text).join("_")}`, true);
54
54
  }
55
55
  }
56
56
  convertEnum(node) {
57
- return this.make(this.enumName(node));
57
+ return this.make(this.qualifiedName(node));
58
58
  }
59
59
  convertTypedef(node) {
60
- return this.make(node.name);
60
+ return this.make(this.qualifiedName(node));
61
61
  }
62
62
  convertCallback(node) {
63
- return this.make(generatorConfiguration().LibraryPrefix + node.name, true);
63
+ return this.make(generatorConfiguration().LibraryPrefix + this.qualifiedName(node), true);
64
64
  }
65
65
  convertMethod(node) {
66
66
  return this.make(node.name);
67
67
  }
68
68
  convertConstant(node) {
69
- return this.make(node.name);
69
+ return this.make(this.qualifiedName(node));
70
70
  }
71
71
  /////////////////////////////////////////////////////////////////////////////////////////
72
72
  convertOptional(type) {
@@ -140,19 +140,20 @@ export class GenericCppConvertor {
140
140
  case idl.IDLBooleanType: return this.make(`Boolean`);
141
141
  case idl.IDLBigintType: return this.make(`UInt64`); // TODO add arbitrary precision numeric type
142
142
  case idl.IDLPointerType: return this.make('NativePointer');
143
+ case idl.IDLCustomObjectType: return this.make('CustomObject');
143
144
  case idl.IDLUnknownType:
144
- case idl.IDLCustomObjectType:
145
- case idl.IDLAnyType: return this.make(`CustomObject`);
145
+ case idl.IDLAnyType: return this.make(`Object`);
146
146
  case idl.IDLUndefinedType: return this.make(`Undefined`);
147
147
  case idl.IDLLengthType: return this.make(`Length`);
148
148
  case idl.IDLFunctionType: return this.make(`Function`);
149
149
  case idl.IDLDate: return this.make(`Date`);
150
150
  case idl.IDLBufferType: return this.make('Buffer');
151
151
  case idl.IDLPointerType: return this.make('Pointer');
152
+ case idl.IDLSerializerBuffer: return { text: 'KSerializerBuffer', noPrefix: true };
152
153
  }
153
154
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
154
155
  }
155
- enumName(target) {
156
+ qualifiedName(target) {
156
157
  return qualifiedName(target, "_");
157
158
  }
158
159
  computeTargetTypeLiteralName(decl) {
@@ -218,7 +219,8 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
218
219
  case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
219
220
  case idl.IDLI32Type: return PrimitiveTypesInstance.Int32.getText();
220
221
  case idl.IDLNumberType: return "KInteropNumber";
221
- case idl.IDLBufferType: return "Ark_Buffer";
222
+ case idl.IDLSerializerBuffer: return "KSerializerBuffer";
223
+ case idl.IDLBufferType: return "KInteropBuffer";
222
224
  case idl.IDLLengthType: return "KLength";
223
225
  case idl.IDLFunctionType: return PrimitiveTypesInstance.Int32.getText();
224
226
  case idl.IDLDate: return PrimitiveTypesInstance.Int64.getText();
@@ -262,7 +264,7 @@ export class CppReturnTypeConvertor {
262
264
  convertTypeReference(type) {
263
265
  const decl = this.resolver.resolveTypeReference(type);
264
266
  if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
265
- return generatorTypePrefix() + decl.name;
267
+ return generatorTypePrefix() + qualifiedName(decl, "_");
266
268
  }
267
269
  return this.convertor.convert(type);
268
270
  }
@@ -76,7 +76,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
76
76
  return 'number';
77
77
  case idl.IDLStringType: return 'string';
78
78
  case idl.IDLFunctionType: return 'Object';
79
- case idl.IDLBufferType: return 'NativeBuffer';
80
79
  case idl.IDLBigintType: return 'long';
81
80
  }
82
81
  return super.convertPrimitiveType(type);
@@ -88,6 +88,9 @@ export class InteropReturnTypeConvertor {
88
88
  }
89
89
  return KInteropReturnBuffer;
90
90
  }
91
+ if (idl.isEnum(decl)) {
92
+ return PrimitiveTypesInstance.Int32.getText();
93
+ }
91
94
  }
92
95
  return "void";
93
96
  }
@@ -116,6 +119,7 @@ export class InteropArgConvertor {
116
119
  case idl.IDLF32Type: return "KFloat";
117
120
  case idl.IDLNumberType: return 'KInteropNumber';
118
121
  case idl.IDLBigintType: return 'KLong';
122
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
119
123
  case idl.IDLBooleanType:
120
124
  case idl.IDLFunctionType: return 'KInt';
121
125
  case idl.IDLStringType: return 'KStringPtr';
@@ -122,6 +122,7 @@ export class TSTypeNameConvertor {
122
122
  case idl.IDLAnyType: return 'any';
123
123
  case idl.IDLUndefinedType: return 'undefined';
124
124
  case idl.IDLPointerType: return 'KPointer';
125
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
125
126
  case idl.IDLVoidType: return 'void';
126
127
  case idl.IDLBooleanType: return 'boolean';
127
128
  case idl.IDLI32Type:
@@ -145,7 +146,7 @@ export class TSTypeNameConvertor {
145
146
  case idl.IDLDate:
146
147
  return 'Date';
147
148
  case idl.IDLBufferType:
148
- return `ArrayBuffer`;
149
+ return 'NativeBuffer';
149
150
  case idl.IDLInteropReturnBufferType:
150
151
  return `KInteropReturnBuffer`;
151
152
  }
@@ -89,15 +89,23 @@ export declare class CJLanguageWriter extends LanguageWriter {
89
89
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
90
90
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
91
91
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
92
- writeProperty(propName: string, propType: idl.IDLType, mutable?: boolean, getterLambda?: (writer: this) => void, setterLambda?: (writer: this) => void): void;
93
92
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
94
93
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
95
94
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
95
+ writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
96
+ method: Method;
97
+ op?: () => void;
98
+ }, setter?: {
99
+ method: Method;
100
+ op: () => void;
101
+ }): void;
102
+ writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
103
+ writeSetterImplementation(method: Method, op: (writer: this) => void): void;
96
104
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
97
105
  private writeDeclaration;
98
106
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
99
107
  writeNativeMethodDeclaration(method: Method): void;
100
- makeEnumCast(enumName: string, _unsafe: boolean, _convertor: ArgConvertor | undefined): string;
108
+ makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
101
109
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
102
110
  makeClassInit(type: idl.IDLType, parameters: LanguageExpression[]): LanguageExpression;
103
111
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
@@ -348,33 +348,6 @@ export class CJLanguageWriter extends LanguageWriter {
348
348
  this.popIndent();
349
349
  this.printer.print(`}`);
350
350
  }
351
- writeProperty(propName, propType, mutable, getterLambda, setterLambda) {
352
- let shortName = propName.concat("_container");
353
- if (!getterLambda) {
354
- this.print(`private var ${shortName}: ${this.getNodeName(propType)}`);
355
- }
356
- this.print(`${mutable ? "mut " : ""}prop ${propName}: ${this.getNodeName(propType)} {`);
357
- this.pushIndent();
358
- this.print(`get() {`);
359
- this.pushIndent();
360
- if (getterLambda) {
361
- getterLambda(this);
362
- }
363
- else {
364
- this.print(`return ${shortName}`);
365
- }
366
- this.popIndent();
367
- this.print(`}`);
368
- if (mutable) {
369
- this.print(`set(x) { ${shortName} = x }`);
370
- this.pushIndent();
371
- if (setterLambda)
372
- setterLambda(this);
373
- this.popIndent();
374
- }
375
- this.popIndent();
376
- this.print(`}`);
377
- }
378
351
  writeTypeDeclaration(decl) {
379
352
  throw new Error(`writeTypeDeclaration not implemented`);
380
353
  }
@@ -389,6 +362,51 @@ export class CJLanguageWriter extends LanguageWriter {
389
362
  this.popIndent();
390
363
  this.printer.print(`}`);
391
364
  }
365
+ writeProperty(propName, propType, modifiers, getter, setter) {
366
+ let containerName = propName.concat("_container");
367
+ let truePropName = this.escapeKeyword(propName);
368
+ if (getter) {
369
+ if (!getter.op) {
370
+ this.print(`private var ${containerName}: ${this.getNodeName(propType)}`);
371
+ }
372
+ }
373
+ let isStatic = modifiers.includes(FieldModifier.STATIC);
374
+ let isMutable = !modifiers.includes(FieldModifier.READONLY);
375
+ this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}`);
376
+ if (getter) {
377
+ this.print('{');
378
+ this.pushIndent();
379
+ this.writeGetterImplementation(getter.method, getter.op);
380
+ if (isMutable) {
381
+ if (setter) {
382
+ this.writeSetterImplementation(setter.method, setter ? setter.op : (writer) => { this.print(`${containerName} = ${truePropName}`); });
383
+ }
384
+ else {
385
+ this.print(`set(${truePropName}) {`);
386
+ this.pushIndent();
387
+ this.print(`${containerName} = ${truePropName}`);
388
+ this.popIndent();
389
+ this.print(`}`);
390
+ }
391
+ }
392
+ this.popIndent();
393
+ this.print('}');
394
+ }
395
+ }
396
+ writeGetterImplementation(method, op) {
397
+ this.print(`get() {`);
398
+ this.pushIndent();
399
+ op ? op(this) : this.print(`return ${method.signature.argsNames.map(arg => `${arg}_container`).join(', ')}`);
400
+ this.popIndent();
401
+ this.print('}');
402
+ }
403
+ writeSetterImplementation(method, op) {
404
+ this.print(`set(${method.signature.argsNames.join(', ')}) {`);
405
+ this.pushIndent();
406
+ op(this);
407
+ this.popIndent();
408
+ this.print('}');
409
+ }
392
410
  writeCJForeign(op) {
393
411
  this.print(`foreign {`);
394
412
  this.pushIndent();
@@ -399,7 +417,7 @@ export class CJLanguageWriter extends LanguageWriter {
399
417
  writeDeclaration(name, signature, modifiers, postfix) {
400
418
  let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
401
419
  prefix = prefix ? prefix + " " : "";
402
- this.print(`${prefix}func ${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}): ${this.getNodeName(signature.returnType)}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
420
+ this.print(`${prefix}${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.GETTER))) ? '' : 'func '}${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}): ${this.getNodeName(signature.returnType)}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
403
421
  }
404
422
  writeNativeFunctionCall(printer, name, signature) {
405
423
  printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
@@ -410,7 +428,7 @@ export class CJLanguageWriter extends LanguageWriter {
410
428
  name = name.startsWith('_') ? name.slice(1) : name;
411
429
  this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(method.signature.returnType)}`);
412
430
  }
413
- makeEnumCast(enumName, _unsafe, _convertor) {
431
+ makeEnumCast(_enumEntry, enumName) {
414
432
  return `${enumName}.value`;
415
433
  }
416
434
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
@@ -7,6 +7,7 @@ import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
8
8
  import { IndentedPrinter } from "../../IndentedPrinter";
9
9
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
10
+ import * as idl from "../../idl";
10
11
  export declare class CppCastExpression implements LanguageExpression {
11
12
  convertor: IdlNameConvertor;
12
13
  value: LanguageExpression;
@@ -45,7 +46,13 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
45
46
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
46
47
  writeFieldDeclaration(name: string, type: IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
47
48
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
48
- writeProperty(propName: string, propType: IDLType, mutable?: boolean): void;
49
+ writeProperty(propName: string, propType: IDLType, modifiers: FieldModifier[], getter?: {
50
+ method: Method;
51
+ op: () => void;
52
+ }, setter?: {
53
+ method: Method;
54
+ op: () => void;
55
+ }): void;
49
56
  writeTypeDeclaration(decl: IDLTypedef): void;
50
57
  writeConstant(constName: string, constType: IDLType, constVal?: string): void;
51
58
  /**
@@ -102,9 +109,9 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
102
109
  get supportedFieldModifiers(): FieldModifier[];
103
110
  enumFromOrdinal(value: LanguageExpression, type: IDLType): LanguageExpression;
104
111
  ordinalFromEnum(value: LanguageExpression, _: IDLType): LanguageExpression;
105
- makeUnsafeCast(convertor: ArgConvertor, param: string): string;
112
+ makeUnsafeCast(param: string): string;
106
113
  makeUnsafeCast_(value: LanguageExpression, type: IDLType, typeOptions?: PrintHint): string;
107
- makeEnumCast(value: string, _unsafe: boolean, convertor: ArgConvertor | undefined): string;
114
+ makeEnumCast(enumEntry: idl.IDLEnum, value: string): string;
108
115
  escapeKeyword(name: string): string;
109
116
  makeEnumEntity(enumEntity: IDLEnum, isExport: boolean): LanguageStatement;
110
117
  private decayTypeName;