@idlizer/core 2.0.41 → 2.1.0

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 (53) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +4 -1
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +61 -13
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +7 -5
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +8 -3
  5. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +2 -1
  6. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +27 -12
  7. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +3 -1
  8. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -1
  9. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -4
  10. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +11 -1
  11. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +44 -1
  12. package/build/lib/src/LanguageWriters/index.d.ts +2 -2
  13. package/build/lib/src/LanguageWriters/index.js +4 -5
  14. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +4 -4
  15. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +6 -5
  16. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +4 -3
  17. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +5 -8
  18. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +6 -5
  19. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +26 -30
  20. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +3 -3
  21. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +4 -4
  22. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +3 -3
  23. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +21 -12
  24. package/build/lib/src/config.d.ts +958 -12
  25. package/build/lib/src/config.js +24 -2
  26. package/build/lib/src/configDescriber.d.ts +85 -0
  27. package/build/lib/src/configDescriber.js +297 -0
  28. package/build/lib/src/from-idl/DtsPrinter.js +4 -2
  29. package/build/lib/src/from-idl/IDLLinter.d.ts +24 -0
  30. package/build/lib/src/from-idl/IDLLinter.js +81 -0
  31. package/build/lib/src/from-idl/deserialize.js +41 -4
  32. package/build/lib/src/from-idl/webidl2-utils.d.ts +1 -0
  33. package/build/lib/src/from-idl/webidl2-utils.js +3 -0
  34. package/build/lib/src/idl.d.ts +23 -26
  35. package/build/lib/src/idl.js +31 -29
  36. package/build/lib/src/idlize.d.ts +10 -1
  37. package/build/lib/src/idlize.js +54 -26
  38. package/build/lib/src/index.d.ts +2 -0
  39. package/build/lib/src/index.js +2 -0
  40. package/build/lib/src/options.d.ts +1 -0
  41. package/build/lib/src/peer-generation/Materialized.d.ts +2 -1
  42. package/build/lib/src/peer-generation/Materialized.js +3 -2
  43. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  44. package/build/lib/src/peer-generation/PeerFile.js +1 -2
  45. package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -1
  46. package/build/lib/src/peer-generation/PeerLibrary.js +16 -3
  47. package/build/lib/src/peer-generation/PeerMethod.js +2 -16
  48. package/build/lib/src/peer-generation/idl/common.js +2 -2
  49. package/build/lib/src/peer-generation/isMaterialized.d.ts +1 -0
  50. package/build/lib/src/peer-generation/isMaterialized.js +21 -0
  51. package/build/lib/src/util.d.ts +1 -0
  52. package/build/lib/src/util.js +9 -0
  53. package/package.json +2 -2
@@ -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;
@@ -22,6 +23,8 @@ export interface ArgConvertor {
22
23
  getMembers(): string[];
23
24
  getObjectAccessor(languge: Language, value: string, args?: Record<string, string>, writer?: LanguageWriter): string;
24
25
  }
26
+ export declare function isVMContextMethod(method: Method): boolean;
27
+ export declare function isDirectMethod(method: Method, library: PeerLibrary): boolean;
25
28
  export declare abstract class BaseArgConvertor implements ArgConvertor {
26
29
  idlType: idl.IDLType;
27
30
  runtimeTypes: RuntimeType[];
@@ -14,15 +14,65 @@
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
+ function isDirectConvertedType(originalType, library) {
27
+ if (originalType == undefined)
28
+ return true; // TODO: is it correct?
29
+ if (originalType == idl.IDLInteropReturnBufferType)
30
+ return false;
31
+ if (originalType == idl.IDLThisType)
32
+ return true;
33
+ let convertor = library.typeConvertor("x", originalType, false);
34
+ // Resolve aliases.
35
+ while (convertor instanceof TypeAliasConvertor) {
36
+ convertor = convertor.convertor;
37
+ }
38
+ // Temporary!
39
+ if (convertor instanceof ArrayConvertor ||
40
+ convertor instanceof MapConvertor ||
41
+ convertor instanceof CustomTypeConvertor ||
42
+ convertor instanceof CallbackConvertor ||
43
+ convertor instanceof AggregateConvertor ||
44
+ convertor instanceof UnionConvertor) {
45
+ // try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
46
+ return false;
47
+ }
48
+ let type = convertor.interopType();
49
+ // TODO: make 'number' be direct!
50
+ let result = type == idl.IDLI8Type || type == idl.IDLU8Type
51
+ || type == idl.IDLI16Type || type == idl.IDLU16Type
52
+ || type == idl.IDLI32Type || type == idl.IDLU32Type
53
+ || type == idl.IDLF32Type
54
+ || type == idl.IDLI64Type || type == idl.IDLU64Type
55
+ || type == idl.IDLPointerType
56
+ || type == idl.IDLBooleanType
57
+ || type == idl.IDLVoidType
58
+ || type == idl.IDLUndefinedType;
59
+ // try { if (!result) console.log(`type ${JSON.stringify(type)} is not direct`) } catch (e) {}
60
+ return result;
61
+ }
62
+ export function isVMContextMethod(method) {
63
+ var _a, _b;
64
+ return !!idl.asPromise(method.signature.returnType) ||
65
+ !!((_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));
67
+ }
68
+ export function isDirectMethod(method, library) {
69
+ if (isVMContextMethod(method))
70
+ return false;
71
+ let result = isDirectConvertedType(method.signature.returnType, library) &&
72
+ method.signature.args.every((arg) => isDirectConvertedType(arg, library));
73
+ //if (!result) console.log(`method ${method.name} is not direct`)
74
+ return result;
75
+ }
26
76
  export class BaseArgConvertor {
27
77
  constructor(idlType, runtimeTypes, isScoped, useArray, param) {
28
78
  this.idlType = idlType;
@@ -158,14 +208,10 @@ export class EnumConvertor extends BaseArgConvertor {
158
208
  this.enumEntry = enumEntry;
159
209
  }
160
210
  convertorArg(param, writer) {
161
- return writer.makeEnumCast(writer.escapeKeyword(param), false, this);
211
+ return writer.makeEnumCast(this.enumEntry, writer.escapeKeyword(param));
162
212
  }
163
213
  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]);
214
+ writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.makeEnumCast(this.enumEntry, value)]);
169
215
  }
170
216
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
171
217
  const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
@@ -456,7 +502,9 @@ export class InterfaceConvertor extends BaseArgConvertor {
456
502
  return this.idlType;
457
503
  }
458
504
  interopType() {
459
- throw new Error("Must never be used");
505
+ // Actually shouldn't be used!
506
+ // throw new Error("Must never be used")
507
+ return idl.IDLObjectType;
460
508
  }
461
509
  isPointerType() {
462
510
  return true;
@@ -889,7 +937,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
889
937
  convertorArg(param, writer) {
890
938
  switch (writer.language) {
891
939
  case Language.CPP:
892
- return `static_cast<${generatorTypePrefix()}${this.declaration.name}>(${param})`;
940
+ return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_")}>(${param})`;
893
941
  case Language.JAVA:
894
942
  case Language.CJ:
895
943
  return `MaterializedBase.toPeerPtr(${param})`;
@@ -898,12 +946,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
898
946
  }
899
947
  }
900
948
  convertorSerialize(param, value, printer) {
901
- printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${this.declaration.name}`, [
949
+ printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_")}`, [
902
950
  printer.makeString(value)
903
951
  ])));
904
952
  }
905
953
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
906
- const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${this.declaration.name}`, []), idl.createReferenceType(this.declaration));
954
+ const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_")}`, []), idl.createReferenceType(this.declaration));
907
955
  return assigneer(readStatement);
908
956
  }
909
957
  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 {
@@ -227,7 +229,7 @@ export declare abstract class LanguageWriter {
227
229
  stringId: string | undefined;
228
230
  numberId: number;
229
231
  }[], op?: (writer: this) => void): void;
230
- abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], isDeclared?: boolean): void;
232
+ abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
231
233
  abstract writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
232
234
  abstract writeFunctionDeclaration(name: string, signature: MethodSignature): void;
233
235
  abstract writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
@@ -263,7 +265,7 @@ export declare abstract class LanguageWriter {
263
265
  abstract get supportedFieldModifiers(): FieldModifier[];
264
266
  abstract enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
265
267
  abstract ordinalFromEnum(value: LanguageExpression, enumReference: idl.IDLType): LanguageExpression;
266
- abstract makeEnumCast(enumName: string, unsafe: boolean, convertor: ArgConvertor | undefined): string;
268
+ abstract makeEnumCast(enumEntry: idl.IDLEnum, enumName: string): string;
267
269
  abstract getNodeName(type: idl.IDLNode): string;
268
270
  abstract fork(options?: {
269
271
  resolver?: ReferenceResolver;
@@ -315,7 +317,7 @@ export declare abstract class LanguageWriter {
315
317
  makeString(value: string): LanguageExpression;
316
318
  makeNaryOp(op: string, args: LanguageExpression[]): LanguageExpression;
317
319
  makeStatement(expr: LanguageExpression): LanguageStatement;
318
- writeNativeMethodDeclaration(name: string, signature: MethodSignature, isNative?: boolean): void;
320
+ writeNativeMethodDeclaration(method: Method): void;
319
321
  writeUnsafeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
320
322
  pushIndent(): void;
321
323
  popIndent(): void;
@@ -330,7 +332,7 @@ export declare abstract class LanguageWriter {
330
332
  /**
331
333
  * TODO: replace me with {@link makeUnsafeCast_}
332
334
  */
333
- makeUnsafeCast(convertor: ArgConvertor, param: string): string;
335
+ makeUnsafeCast(param: string): string;
334
336
  makeUnsafeCast_(value: LanguageExpression, type: idl.IDLType, typeOptions?: PrintHint): string;
335
337
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
336
338
  makeDiscriminatorFromFields(convertor: {
@@ -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,8 +570,8 @@ export class LanguageWriter {
565
570
  makeStatement(expr) {
566
571
  return new ExpressionStatement(expr);
567
572
  }
568
- writeNativeMethodDeclaration(name, signature, isNative) {
569
- this.writeMethodDeclaration(name, signature);
573
+ writeNativeMethodDeclaration(method) {
574
+ this.writeMethodDeclaration(method.name, method.signature);
570
575
  }
571
576
  writeUnsafeNativeMethodDeclaration(name, signature) {
572
577
  return;
@@ -607,7 +612,7 @@ export class LanguageWriter {
607
612
  /**
608
613
  * TODO: replace me with {@link makeUnsafeCast_}
609
614
  */
610
- makeUnsafeCast(convertor, param) {
615
+ makeUnsafeCast(param) {
611
616
  return `unsafeCast<int32>(${param})`;
612
617
  }
613
618
  makeUnsafeCast_(value, type, typeOptions) {
@@ -25,11 +25,12 @@ 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 {
32
32
  private unwrap;
33
+ private isPrimitiveOrPrimitiveAlias;
33
34
  convert(node: idl.IDLNode): string;
34
35
  }
35
36
  export declare class CppNameConvertor implements IdlNameConvertor {
@@ -21,6 +21,7 @@ import { maybeTransformManagedCallback } from '../ArgConvertors';
21
21
  import { qualifiedName } from '../../peer-generation/idl/common';
22
22
  import { capitalize } from '../../util';
23
23
  import { isMaterialized } from '../../peer-generation/isMaterialized';
24
+ import { isInIdlizeInternal } from '../../idlize';
24
25
  export class GenericCppConvertor {
25
26
  constructor(resolver) {
26
27
  this.resolver = resolver;
@@ -38,34 +39,34 @@ export class GenericCppConvertor {
38
39
  switch (node.subkind) {
39
40
  case idl.IDLInterfaceSubkind.AnonymousInterface:
40
41
  return node.name
41
- ? this.make(node.name)
42
+ ? this.make(this.qualifiedName(node))
42
43
  : this.make(this.computeTargetTypeLiteralName(node), true);
43
44
  case idl.IDLInterfaceSubkind.Interface:
44
45
  case idl.IDLInterfaceSubkind.Class:
45
- if (idl.hasExtAttribute(node, idl.IDLExtendedAttributes.Predefined)) {
46
- return this.make(node.name, true);
46
+ if (isInIdlizeInternal(node)) {
47
+ return this.make(this.qualifiedName(node), true);
47
48
  }
48
- return this.make(node.name);
49
+ return this.make(this.qualifiedName(node));
49
50
  case idl.IDLInterfaceSubkind.Tuple:
50
51
  return node.name
51
- ? this.make(node.name)
52
+ ? this.make(this.qualifiedName(node))
52
53
  : this.make(`Tuple_${node.properties.map(it => this.convertNode(idl.maybeOptional(it.type, it.isOptional)).text).join("_")}`, true);
53
54
  }
54
55
  }
55
56
  convertEnum(node) {
56
- return this.make(this.enumName(node));
57
+ return this.make(this.qualifiedName(node));
57
58
  }
58
59
  convertTypedef(node) {
59
- return this.make(node.name);
60
+ return this.make(this.qualifiedName(node));
60
61
  }
61
62
  convertCallback(node) {
62
- return this.make(generatorConfiguration().LibraryPrefix + node.name, true);
63
+ return this.make(generatorConfiguration().LibraryPrefix + this.qualifiedName(node), true);
63
64
  }
64
65
  convertMethod(node) {
65
66
  return this.make(node.name);
66
67
  }
67
68
  convertConstant(node) {
68
- return this.make(node.name);
69
+ return this.make(this.qualifiedName(node));
69
70
  }
70
71
  /////////////////////////////////////////////////////////////////////////////////////////
71
72
  convertOptional(type) {
@@ -151,7 +152,7 @@ export class GenericCppConvertor {
151
152
  }
152
153
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
153
154
  }
154
- enumName(target) {
155
+ qualifiedName(target) {
155
156
  return qualifiedName(target, "_");
156
157
  }
157
158
  computeTargetTypeLiteralName(decl) {
@@ -178,9 +179,23 @@ export class CppConvertor extends GenericCppConvertor {
178
179
  const typePrefix = conf.TypePrefix;
179
180
  // TODO remove this ugly hack for CustomObject's
180
181
  const convertedToCustomObject = result.text === idl.IDLCustomObjectType.name;
181
- const libPrefix = idl.isPrimitiveType(type) || convertedToCustomObject ? "" : conf.LibraryPrefix;
182
+ const libPrefix = this.isPrimitiveOrPrimitiveAlias(type) || convertedToCustomObject ? "" : conf.LibraryPrefix;
182
183
  return `${typePrefix}${libPrefix}${result.text}`;
183
184
  }
185
+ isPrimitiveOrPrimitiveAlias(type) {
186
+ if (!idl.isType(type))
187
+ return false;
188
+ const { resolver } = this;
189
+ while (type && idl.isReferenceType(type)) {
190
+ const resolved = resolver.resolveTypeReference(type);
191
+ if (!resolved)
192
+ return false;
193
+ if (!idl.isTypedef(resolved))
194
+ break;
195
+ type = resolved.type;
196
+ }
197
+ return idl.isPrimitiveType(type);
198
+ }
184
199
  convert(node) {
185
200
  return this.unwrap(node, this.convertNode(node));
186
201
  }
@@ -247,7 +262,7 @@ export class CppReturnTypeConvertor {
247
262
  convertTypeReference(type) {
248
263
  const decl = this.resolver.resolveTypeReference(type);
249
264
  if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
250
- return generatorTypePrefix() + decl.name;
265
+ return generatorTypePrefix() + qualifiedName(decl, "_");
251
266
  }
252
267
  return this.convertor.convert(type);
253
268
  }
@@ -1,5 +1,5 @@
1
1
  import * as idl from "../../idl";
2
- import { TSTypeNameConvertor } from "./TSConvertors";
2
+ import { TSInteropArgConvertor, TSTypeNameConvertor } from "./TSConvertors";
3
3
  export declare class ETSTypeNameConvertor extends TSTypeNameConvertor {
4
4
  convertTypeReference(type: idl.IDLReferenceType): string;
5
5
  convertContainer(type: idl.IDLContainerType): string;
@@ -9,4 +9,6 @@ export declare class ETSTypeNameConvertor extends TSTypeNameConvertor {
9
9
  protected mapCallback(decl: idl.IDLCallback): string;
10
10
  protected mapFunctionType(typeArgs: string[]): string;
11
11
  }
12
+ export declare class ETSInteropArgConvertor extends TSInteropArgConvertor {
13
+ }
12
14
  //# sourceMappingURL=ETSConvertors.d.ts.map
@@ -16,7 +16,7 @@ import * as idl from "../../idl";
16
16
  import { Language } from "../../Language";
17
17
  import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
18
18
  import { convertDeclaration } from "../nameConvertor";
19
- import { TSTypeNameConvertor } from "./TSConvertors";
19
+ import { TSInteropArgConvertor, TSTypeNameConvertor } from "./TSConvertors";
20
20
  export class ETSTypeNameConvertor extends TSTypeNameConvertor {
21
21
  convertTypeReference(type) {
22
22
  // Only to deal with namespaces. TODO: remove later
@@ -109,4 +109,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
109
109
  return `Function${typeArgs.length - 1}<${typeArgs.join(",")}>`;
110
110
  }
111
111
  }
112
+ export class ETSInteropArgConvertor extends TSInteropArgConvertor {
113
+ }
112
114
  //# sourceMappingURL=ETSConvertors.js.map
@@ -114,16 +114,16 @@ export class InteropArgConvertor {
114
114
  case idl.IDLU64Type: return "KLong";
115
115
  case idl.IDLI32Type: return "KInt";
116
116
  case idl.IDLF32Type: return "KFloat";
117
- case idl.IDLNumberType: return 'number'; // should be removed! It is KInteropNumber or smth
118
- case idl.IDLBigintType: return 'bigint'; // should be removed! It is KLong or smth
117
+ case idl.IDLNumberType: return 'KInteropNumber';
118
+ case idl.IDLBigintType: return 'KLong';
119
119
  case idl.IDLBooleanType:
120
120
  case idl.IDLFunctionType: return 'KInt';
121
121
  case idl.IDLStringType: return 'KStringPtr';
122
- case idl.IDLBufferType: return `ArrayBuffer`;
122
+ case idl.IDLBufferType: return `KInteropBuffer`;
123
123
  case idl.IDLLengthType: return 'Length';
124
124
  case idl.IDLDate: return 'KLong';
125
125
  case idl.IDLUndefinedType:
126
- case idl.IDLVoidType: return PrimitiveTypesInstance.NativePointer.getText();
126
+ case idl.IDLVoidType:
127
127
  case idl.IDLPointerType: return 'KPointer'; // return PrimitiveTypesInstance.NativePointer.getText()
128
128
  }
129
129
  throw new Error(`Cannot pass primitive type ${type.name} through interop`);
@@ -1,6 +1,6 @@
1
1
  import * as idl from '../../idl';
2
2
  import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
- import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
3
+ import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
4
  export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
5
  protected resolver: ReferenceResolver;
6
6
  constructor(resolver: ReferenceResolver);
@@ -24,4 +24,14 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
24
24
  protected productType(decl: idl.IDLInterface, isTuple: boolean, includeFieldNames: boolean): string;
25
25
  protected mapFunctionType(typeArgs: string[]): string;
26
26
  }
27
+ export declare class TSInteropArgConvertor implements TypeConvertor<string> {
28
+ convert(type: idl.IDLType): string;
29
+ convertContainer(type: idl.IDLContainerType): string;
30
+ convertImport(type: idl.IDLReferenceType, importClause: string): string;
31
+ convertOptional(type: idl.IDLOptionalType): string;
32
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
33
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
34
+ convertTypeReference(type: idl.IDLReferenceType): string;
35
+ convertUnion(type: idl.IDLUnionType): string;
36
+ }
27
37
  //# sourceMappingURL=TSConvertors.d.ts.map
@@ -13,7 +13,7 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
- import { convertNode } from '../nameConvertor';
16
+ import { convertNode, convertType } from '../nameConvertor';
17
17
  export class TSTypeNameConvertor {
18
18
  constructor(resolver) {
19
19
  this.resolver = resolver;
@@ -173,4 +173,47 @@ export class TSTypeNameConvertor {
173
173
  return `Function${typeArgs.length ? `<${typeArgs.join(",")}>` : ''}`;
174
174
  }
175
175
  }
176
+ export class TSInteropArgConvertor {
177
+ convert(type) {
178
+ return convertType(this, type);
179
+ }
180
+ convertContainer(type) {
181
+ throw new Error(`Cannot pass container types through interop`);
182
+ }
183
+ convertImport(type, importClause) {
184
+ throw new Error(`Cannot pass import types through interop`);
185
+ }
186
+ convertOptional(type) {
187
+ return "KNativePointer";
188
+ }
189
+ convertPrimitiveType(type) {
190
+ switch (type) {
191
+ case idl.IDLI64Type: return "KLong";
192
+ case idl.IDLU64Type: return "KLong";
193
+ case idl.IDLI32Type: return "KInt";
194
+ case idl.IDLF32Type: return "KFloat";
195
+ case idl.IDLNumberType: return 'number';
196
+ case idl.IDLBigintType: return 'bigint';
197
+ case idl.IDLBooleanType:
198
+ case idl.IDLFunctionType: return 'KInt';
199
+ case idl.IDLStringType: return 'KStringPtr';
200
+ case idl.IDLBufferType: return `ArrayBuffer`;
201
+ case idl.IDLLengthType: return 'Length';
202
+ case idl.IDLDate: return 'number';
203
+ case idl.IDLUndefinedType:
204
+ case idl.IDLVoidType:
205
+ case idl.IDLPointerType: return 'KPointer';
206
+ }
207
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
208
+ }
209
+ convertTypeParameter(type) {
210
+ throw new Error("Cannot pass type parameters through interop");
211
+ }
212
+ convertTypeReference(type) {
213
+ throw new Error(`Cannot pass type references through interop`);
214
+ }
215
+ convertUnion(type) {
216
+ throw new Error("Cannot pass union types through interop");
217
+ }
218
+ }
176
219
  //# sourceMappingURL=TSConvertors.js.map
@@ -1,8 +1,8 @@
1
1
  import { Language } from "../Language";
2
2
  import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
3
- import { InteropArgConvertor } from "./convertors/InteropConvertors";
4
3
  import { LanguageWriter } from "./LanguageWriter";
4
+ import { TypeConvertor } from "./nameConvertor";
5
5
  export * from "./nameConvertor";
6
6
  export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
7
- export declare function createInteropArgConvertor(language: Language): InteropArgConvertor;
7
+ export declare function createInteropArgConvertor(language: Language): TypeConvertor<string>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -4,10 +4,9 @@ import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
4
4
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
5
5
  import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
6
6
  import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
7
- import { ETSTypeNameConvertor } from "./convertors/ETSConvertors";
8
- import { InteropArgConvertor } from "./convertors/InteropConvertors";
7
+ import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
9
8
  import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
10
- import { TSTypeNameConvertor } from "./convertors/TSConvertors";
9
+ import { TSInteropArgConvertor, TSTypeNameConvertor } from "./convertors/TSConvertors";
11
10
  import { CJLanguageWriter } from "./writers/CJLanguageWriter";
12
11
  import { CppLanguageWriter } from "./writers/CppLanguageWriter";
13
12
  import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
@@ -28,8 +27,8 @@ export function createLanguageWriter(language, resolver) {
28
27
  }
29
28
  export function createInteropArgConvertor(language) {
30
29
  switch (language) {
31
- case Language.TS:
32
- case Language.ARKTS: return new InteropArgConvertor();
30
+ case Language.TS: return new TSInteropArgConvertor();
31
+ case Language.ARKTS: return new ETSInteropArgConvertor();
33
32
  case Language.CPP: return CppInteropArgConvertor.INSTANCE;
34
33
  case Language.JAVA: return new JavaInteropArgConvertor();
35
34
  case Language.CJ: return new CJInteropArgConvertor();
@@ -2,7 +2,7 @@ import * as idl from "../../idl";
2
2
  import { IndentedPrinter } from "../../IndentedPrinter";
3
3
  import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
4
4
  import { RuntimeType } from "../common";
5
- import { AssignStatement, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs } from "../LanguageWriter";
5
+ import { AssignStatement, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { Language } from "../../Language";
8
8
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
@@ -81,7 +81,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
81
81
  stringId: string | undefined;
82
82
  numberId: number;
83
83
  }[], op: (writer: LanguageWriter) => void): void;
84
- writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[]): void;
84
+ writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
85
85
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
86
86
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
87
87
  private generateFunctionDeclaration;
@@ -96,8 +96,8 @@ export declare class CJLanguageWriter extends LanguageWriter {
96
96
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
97
97
  private writeDeclaration;
98
98
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
99
- writeNativeMethodDeclaration(name: string, signature: NamedMethodSignature): void;
100
- makeEnumCast(enumName: string, _unsafe: boolean, _convertor: ArgConvertor | undefined): string;
99
+ writeNativeMethodDeclaration(method: Method): void;
100
+ makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
101
101
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
102
102
  makeClassInit(type: idl.IDLType, parameters: LanguageExpression[]): LanguageExpression;
103
103
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
@@ -293,7 +293,7 @@ export class CJLanguageWriter extends LanguageWriter {
293
293
  this.popIndent();
294
294
  this.printer.print(`}`);
295
295
  }
296
- writeInterface(name, op, superInterfaces) {
296
+ writeInterface(name, op, superInterfaces, generics) {
297
297
  let extendsClause = superInterfaces ? ` <: ${superInterfaces.join(" & ")}` : '';
298
298
  this.printer.print(`public interface ${name}${extendsClause} {`);
299
299
  this.pushIndent();
@@ -404,12 +404,13 @@ export class CJLanguageWriter extends LanguageWriter {
404
404
  writeNativeFunctionCall(printer, name, signature) {
405
405
  printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
406
406
  }
407
- writeNativeMethodDeclaration(name, signature) {
408
- let signture = `${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.typeForeignConvertor.convert(it)}`).join(", ")}`;
407
+ writeNativeMethodDeclaration(method) {
408
+ let name = method.name;
409
+ let signture = `${method.signature.args.map((it, index) => `${this.escapeKeyword(method.signature.argName(index))}: ${this.typeForeignConvertor.convert(it)}`).join(", ")}`;
409
410
  name = name.startsWith('_') ? name.slice(1) : name;
410
- this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(signature.returnType)}`);
411
+ this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(method.signature.returnType)}`);
411
412
  }
412
- makeEnumCast(enumName, _unsafe, _convertor) {
413
+ makeEnumCast(_enumEntry, enumName) {
413
414
  return `${enumName}.value`;
414
415
  }
415
416
  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;
@@ -41,7 +42,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
41
42
  resolver?: ReferenceResolver;
42
43
  }): LanguageWriter;
43
44
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[]): void;
44
- writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[]): void;
45
+ writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
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;
@@ -102,9 +103,9 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
102
103
  get supportedFieldModifiers(): FieldModifier[];
103
104
  enumFromOrdinal(value: LanguageExpression, type: IDLType): LanguageExpression;
104
105
  ordinalFromEnum(value: LanguageExpression, _: IDLType): LanguageExpression;
105
- makeUnsafeCast(convertor: ArgConvertor, param: string): string;
106
+ makeUnsafeCast(param: string): string;
106
107
  makeUnsafeCast_(value: LanguageExpression, type: IDLType, typeOptions?: PrintHint): string;
107
- makeEnumCast(value: string, _unsafe: boolean, convertor: ArgConvertor | undefined): string;
108
+ makeEnumCast(enumEntry: idl.IDLEnum, value: string): string;
108
109
  escapeKeyword(name: string): string;
109
110
  makeEnumEntity(enumEntity: IDLEnum, isExport: boolean): LanguageStatement;
110
111
  private decayTypeName;
@@ -19,8 +19,8 @@ import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifi
19
19
  import { CDefinedExpression, CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
20
20
  import { RuntimeType } from "../common";
21
21
  import { IndentedPrinter } from "../../IndentedPrinter";
22
- import { throwException } from "../../util";
23
22
  import { cppKeywords } from "../../languageSpecificKeywords";
23
+ import * as idl from "../../idl";
24
24
  ////////////////////////////////////////////////////////////////
25
25
  // EXPRESSIONS //
26
26
  ////////////////////////////////////////////////////////////////
@@ -180,7 +180,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
180
180
  this.popIndent();
181
181
  this.printer.print(`};`);
182
182
  }
183
- writeInterface(name, op, superInterfaces) {
183
+ writeInterface(name, op, superInterfaces, generics) {
184
184
  throw new Error("Method not implemented.");
185
185
  }
186
186
  writeMethodCall(receiver, method, params, nullable = false) {
@@ -376,7 +376,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
376
376
  ordinalFromEnum(value, _) {
377
377
  return value;
378
378
  }
379
- makeUnsafeCast(convertor, param) {
379
+ makeUnsafeCast(param) {
380
380
  return param;
381
381
  }
382
382
  makeUnsafeCast_(value, type, typeOptions) {
@@ -396,11 +396,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
396
396
  }
397
397
  return `(${typeName}) (${value.asString()})`;
398
398
  }
399
- makeEnumCast(value, _unsafe, convertor) {
400
- if (convertor !== undefined) {
401
- return `static_cast<${this.typeConvertor.convert(convertor.nativeType())}>(${value})`;
402
- }
403
- throwException("Need pass EnumConvertor");
399
+ makeEnumCast(enumEntry, value) {
400
+ return `static_cast<${this.typeConvertor.convert(idl.createReferenceType(enumEntry))}>(${value})`;
404
401
  }
405
402
  escapeKeyword(name) {
406
403
  return cppKeywords.has(name) ? name + "_" : name;