@idlizer/core 2.1.10-arktscgen-7 → 2.1.10-arktscgen-10

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 (77) hide show
  1. package/build/lib/src/IndentedPrinter.js +2 -2
  2. package/build/lib/src/Language.d.ts +1 -0
  3. package/build/lib/src/Language.js +8 -0
  4. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +47 -3
  5. package/build/lib/src/LanguageWriters/ArgConvertors.js +216 -19
  6. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +12 -4
  7. package/build/lib/src/LanguageWriters/LanguageWriter.js +28 -3
  8. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +6 -2
  9. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +7 -1
  10. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -0
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
  12. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +10 -5
  13. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +138 -51
  14. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +5 -1
  15. package/build/lib/src/LanguageWriters/index.d.ts +1 -2
  16. package/build/lib/src/LanguageWriters/index.js +17 -3
  17. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -1
  18. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +5 -3
  19. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +1 -1
  20. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +5 -3
  21. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -1
  22. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +8 -3
  23. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +4 -10
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +6 -4
  25. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +59 -42
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
  27. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +5 -3
  28. package/build/lib/src/LibraryInterface.d.ts +6 -0
  29. package/build/lib/src/LibraryInterface.js +22 -1
  30. package/build/lib/src/from-idl/DtsPrinter.d.ts +3 -2
  31. package/build/lib/src/from-idl/DtsPrinter.js +9 -6
  32. package/build/lib/src/from-idl/parser.d.ts +1 -1
  33. package/build/lib/src/from-idl/parser.js +3 -3
  34. package/build/lib/src/idl/builders.d.ts +36 -1
  35. package/build/lib/src/idl/builders.js +62 -2
  36. package/build/lib/src/idl/dump.d.ts +3 -0
  37. package/build/lib/src/idl/dump.js +22 -4
  38. package/build/lib/src/idl/index.d.ts +0 -1
  39. package/build/lib/src/idl/index.js +0 -1
  40. package/build/lib/src/idl/node.d.ts +1 -0
  41. package/build/lib/src/idl/node.js +1 -0
  42. package/build/lib/src/idl/stdlib.d.ts +1 -0
  43. package/build/lib/src/idl/stdlib.js +1 -0
  44. package/build/lib/src/idl/utils.d.ts +4 -3
  45. package/build/lib/src/idl/utils.js +26 -13
  46. package/build/lib/src/idl/visitors.js +24 -104
  47. package/build/lib/src/index.d.ts +4 -1
  48. package/build/lib/src/index.js +4 -1
  49. package/build/lib/src/peer-generation/Extractors.d.ts +7 -0
  50. package/build/lib/src/peer-generation/Extractors.js +40 -0
  51. package/build/lib/src/peer-generation/Initializers.d.ts +5 -0
  52. package/build/lib/src/peer-generation/Initializers.js +28 -0
  53. package/build/lib/src/peer-generation/Materialized.d.ts +0 -4
  54. package/build/lib/src/peer-generation/Materialized.js +13 -24
  55. package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -0
  56. package/build/lib/src/peer-generation/PeerLibrary.js +54 -3
  57. package/build/lib/src/peer-generation/PeerMethod.d.ts +1 -0
  58. package/build/lib/src/peer-generation/PeerMethod.js +1 -0
  59. package/build/lib/src/peer-generation/idl/common.d.ts +0 -2
  60. package/build/lib/src/peer-generation/idl/common.js +3 -25
  61. package/build/lib/src/peer-generation/isMaterialized.d.ts +4 -0
  62. package/build/lib/src/peer-generation/isMaterialized.js +12 -0
  63. package/build/lib/src/peer-generation/unions.d.ts +1 -27
  64. package/build/lib/src/peer-generation/unions.js +1 -99
  65. package/build/lib/src/transformers/FqnTransformer.js +26 -2
  66. package/build/lib/src/transformers/GenericTransformer.d.ts +0 -2
  67. package/build/lib/src/transformers/GenericTransformer.js +20 -20
  68. package/build/lib/src/transformers/IdlTransformer.js +14 -0
  69. package/build/lib/src/transformers/NullTransformer.js +16 -3
  70. package/build/lib/src/transformers/OnSerializeTransformer.js +14 -0
  71. package/build/lib/src/transformers/ThrowsTransformer.d.ts +3 -0
  72. package/build/lib/src/transformers/ThrowsTransformer.js +51 -0
  73. package/build/lib/src/transformers/transformUtils.d.ts +7 -0
  74. package/build/lib/src/transformers/transformUtils.js +55 -0
  75. package/build/lib/src/util.d.ts +0 -15
  76. package/build/lib/src/util.js +2 -73
  77. package/package.json +11 -5
@@ -15,6 +15,7 @@
15
15
  import * as idl from '../../idl';
16
16
  import { isMaterialized } from '../../peer-generation/isMaterialized';
17
17
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
18
+ import { maybeRestoreThrows } from '../../transformers/transformUtils';
18
19
  import { convertType } from '../nameConvertor';
19
20
  const KInteropReturnBuffer = 'KInteropReturnBuffer';
20
21
  export class InteropReturnTypeConvertor {
@@ -86,6 +87,9 @@ export class InteropReturnTypeConvertor {
86
87
  if (idl.isCallback(this.resolver.toDeclaration(type))) {
87
88
  return KInteropReturnBuffer;
88
89
  }
90
+ if (maybeRestoreThrows(decl, this.resolver)) {
91
+ return KInteropReturnBuffer;
92
+ }
89
93
  if (idl.isInterface(decl)) {
90
94
  if (isMaterialized(decl, this.resolver)) {
91
95
  return PrimitiveTypesInstance.NativePointer.getText();
@@ -1,10 +1,10 @@
1
1
  import * as idl from '../../idl';
2
- import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
2
  import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
- import { InteropReturnTypeConvertor } from './InteropConvertors';
3
+ import { InteropArgConvertor, InteropReturnTypeConvertor } from './InteropConvertors';
4
+ import { LibraryInterface } from '../../LibraryInterface';
5
5
  export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
6
- protected resolver: ReferenceResolver;
7
- constructor(resolver: ReferenceResolver);
6
+ protected library: LibraryInterface;
7
+ constructor(library: LibraryInterface);
8
8
  convert(node: idl.IDLNode): string;
9
9
  convertNamespace(node: idl.IDLNamespace): string;
10
10
  convertInterface(node: idl.IDLInterface): string;
@@ -21,7 +21,12 @@ export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, I
21
21
  convertTypeReference(type: idl.IDLReferenceType): string;
22
22
  convertTypeParameter(type: idl.IDLTypeParameterType): string;
23
23
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
24
- private callbackType;
24
+ private mangleTopLevel;
25
+ private mapCallback;
26
+ }
27
+ export declare class KotlinInteropArgConvertor extends InteropArgConvertor {
28
+ convertContainer(type: idl.IDLContainerType): string;
29
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
25
30
  }
26
31
  export declare class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
27
32
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
@@ -13,14 +13,37 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
- import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
17
16
  import { isMaterialized } from '../../peer-generation/isMaterialized';
18
17
  import { convertNode, convertType } from '../nameConvertor';
19
18
  import { removePoints } from '../../util';
20
- import { InteropReturnTypeConvertor } from './InteropConvertors';
19
+ import { InteropArgConvertor, InteropReturnTypeConvertor } from './InteropConvertors';
20
+ import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
21
+ import { isDeclaredInCurrentFile, LayoutNodeRole } from '../../peer-generation/LayoutManager';
22
+ import { Language } from '../../Language';
23
+ import { maybeRestoreThrows } from '../../transformers/transformUtils';
24
+ const KBoolean = "KBoolean";
25
+ const KByte = "KByte";
26
+ const KShort = "KShort";
27
+ const KUShort = "KUShort";
28
+ const KInt = "KInt";
29
+ const KUInt = "KUInt";
30
+ const KLong = "KLong";
31
+ const KULong = "KULong";
32
+ const KFloat = "KFloat";
33
+ const KDouble = "KDouble";
34
+ const KNativePointer = "KNativePointer";
35
+ const KStringPtr = "KStringPtr";
36
+ const KInteropReturnBuffer = "KInteropReturnBuffer";
37
+ const KInteropBuffer = "KInteropBuffer";
38
+ const KSerializerBuffer = "KSerializerBuffer";
39
+ const KUint8ArrayPtr = "KUint8ArrayPtr";
40
+ const KInt32ArrayPtr = "KInt32ArrayPtr";
41
+ const KFloat32ArrayPtr = "KFloat32ArrayPtr";
42
+ const Unit = "Unit";
43
+ // used for Kotlin code
21
44
  export class KotlinTypeNameConvertor {
22
- constructor(resolver) {
23
- this.resolver = resolver;
45
+ constructor(library) {
46
+ this.library = library;
24
47
  }
25
48
  convert(node) {
26
49
  return convertNode(this, node);
@@ -29,17 +52,26 @@ export class KotlinTypeNameConvertor {
29
52
  return node.name;
30
53
  }
31
54
  convertInterface(node) {
32
- return removePoints(idl.getQualifiedName(node, 'namespace.name'));
55
+ var _a;
56
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : removePoints(idl.getQualifiedName(node, 'namespace.name'));
33
57
  }
34
58
  convertEnum(node) {
35
- return removePoints(idl.getQualifiedName(node, 'namespace.name'));
59
+ var _a;
60
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : removePoints(idl.getQualifiedName(node, 'namespace.name'));
36
61
  }
37
62
  convertTypedef(node) {
38
- return node.name;
63
+ var _a;
64
+ if (idl.isSyntheticEntry(node)) {
65
+ return this.convert(node.type);
66
+ }
67
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : removePoints(idl.getQualifiedName(node, 'namespace.name'));
39
68
  }
40
69
  convertCallback(node) {
41
- const params = node.parameters.map(it => `${it.name}: ${this.convert(it.type)}${it.isOptional ? "?" : ""}`);
42
- return `(${params.join(", ")}) -> ${this.convert(node.returnType)}`;
70
+ var _a;
71
+ if (idl.isSyntheticEntry(node)) {
72
+ return this.mapCallback(node);
73
+ }
74
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : removePoints(idl.getQualifiedName(node, 'namespace.name'));
43
75
  }
44
76
  convertMethod(node) {
45
77
  return node.name;
@@ -51,7 +83,7 @@ export class KotlinTypeNameConvertor {
51
83
  return `${this.convert(type.type)}?`;
52
84
  }
53
85
  convertUnion(type) {
54
- return "Union_" + type.types.map(it => generateSyntheticIdlNodeName(it)).join("_");
86
+ return "Union_" + type.types.map(it => idl.generateSyntheticIdlNodeName(it)).join("_");
55
87
  }
56
88
  convertContainer(type) {
57
89
  if (idl.IDLContainerUtils.isSequence(type)) {
@@ -78,14 +110,22 @@ export class KotlinTypeNameConvertor {
78
110
  throw new Error("Not implemented");
79
111
  }
80
112
  convertTypeReference(type) {
81
- const decl = this.resolver.resolveTypeReference(type);
82
- if (decl && idl.isSyntheticEntry(decl)) {
83
- if (idl.isCallback(decl)) {
84
- return this.callbackType(decl);
85
- }
86
- }
113
+ var _a;
114
+ const decl = this.library.resolveTypeReference(type);
87
115
  if (decl) {
88
- return removePoints(idl.getQualifiedName(decl, 'namespace.name'));
116
+ if (idl.isSyntheticEntry(decl)) {
117
+ if (idl.isCallback(decl)) {
118
+ return this.mapCallback(decl);
119
+ }
120
+ if (idl.isTypedef(decl)) {
121
+ return this.convert(decl.type);
122
+ }
123
+ }
124
+ let restoredThrow;
125
+ if (restoredThrow = maybeRestoreThrows(decl, this.library)) {
126
+ return this.convert(restoredThrow);
127
+ }
128
+ return (_a = this.mangleTopLevel(decl)) !== null && _a !== void 0 ? _a : removePoints(idl.getQualifiedName(decl, 'namespace.name'));
89
129
  }
90
130
  return this.convert(idl.IDLCustomObjectType);
91
131
  }
@@ -103,7 +143,7 @@ export class KotlinTypeNameConvertor {
103
143
  case idl.IDLUndefinedType: return 'Nothing?';
104
144
  case idl.IDLPointerType: return 'KPointer';
105
145
  case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
106
- case idl.IDLVoidType: return 'Unit';
146
+ case idl.IDLVoidType: return Unit;
107
147
  case idl.IDLBooleanType: return 'Boolean';
108
148
  case idl.IDLI8Type: return 'Byte';
109
149
  case idl.IDLU8Type: return 'UByte';
@@ -125,39 +165,85 @@ export class KotlinTypeNameConvertor {
125
165
  case idl.IDLBufferType:
126
166
  return 'NativeBuffer';
127
167
  case idl.IDLInteropReturnBufferType:
128
- return `KInteropReturnBuffer`;
168
+ return KInteropReturnBuffer;
129
169
  }
130
170
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
131
171
  }
132
- callbackType(decl) {
133
- const params = decl.parameters.map(it => `${it.name}: ${this.convert(it.type)}`);
172
+ mangleTopLevel(decl) {
173
+ if (!isDeclaredInCurrentFile(this.library.layout, { node: decl, role: LayoutNodeRole.INTERFACE }) && isTopLevelConflicted(this.library, Language.KOTLIN, decl)) {
174
+ const namespaces = idl.getNamespacesPathFor(decl);
175
+ if (namespaces.length === 0) {
176
+ return idl.getQualifiedName(decl, "package.namespace.name").replaceAll('.', '_');
177
+ }
178
+ const [rootNamespace, ...otherNamespaces] = idl.getNamespacesPathFor(decl);
179
+ const mangledRoot = idl.getQualifiedName(rootNamespace, "package.namespace.name").replaceAll('.', '_');
180
+ return [mangledRoot, ...otherNamespaces, decl.name].join(".");
181
+ }
182
+ return undefined;
183
+ }
184
+ mapCallback(decl) {
185
+ const params = decl.parameters.map(it => `${it.name}: ${this.convert(it.type)}${it.isOptional ? "?" : ""}`);
134
186
  return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
135
187
  }
136
188
  }
137
- const KBoolean = "KBoolean";
138
- const KInt = "KInt";
139
- const KLong = "KLong";
140
- const KFloat = "KFloat";
141
- const KDouble = "KDouble";
142
- const KNativePointer = "KNativePointer";
143
- const KStringPtr = "KStringPtr";
144
- const KInteropReturnBuffer = "KInteropReturnBuffer";
145
- const KInteropBuffer = "KInteropBuffer";
146
- const KSerializerBuffer = "KSerializerBuffer";
189
+ // used for Kotlin code
190
+ export class KotlinInteropArgConvertor extends InteropArgConvertor {
191
+ convertContainer(type) {
192
+ switch (type.elementType[0]) {
193
+ case idl.IDLU8Type: return KUint8ArrayPtr;
194
+ case idl.IDLI32Type: return KInt32ArrayPtr;
195
+ case idl.IDLF32Type: return KFloat32ArrayPtr;
196
+ }
197
+ throw new Error(`Cannot pass container types through interop`);
198
+ }
199
+ convertPrimitiveType(type) {
200
+ switch (type) {
201
+ case idl.IDLI8Type: return KByte;
202
+ case idl.IDLU8Type: return KByte;
203
+ case idl.IDLI16Type: return KShort;
204
+ case idl.IDLU16Type: return KUShort;
205
+ case idl.IDLI32Type: return KInt;
206
+ case idl.IDLU32Type: return KUInt;
207
+ case idl.IDLI64Type: return KLong;
208
+ case idl.IDLU64Type: return KULong;
209
+ case idl.IDLF32Type: return KFloat;
210
+ case idl.IDLF64Type: return KDouble;
211
+ case idl.IDLNumberType: return KDouble;
212
+ case idl.IDLBooleanType: {
213
+ // small trick to hide all casts Boolean <=> KBoolean in a NativeModule
214
+ return "Boolean";
215
+ }
216
+ case idl.IDLObjectType: {
217
+ // unsupported case for now, implementation returns Unit (analogue of void) instead of a real object
218
+ return "Any";
219
+ }
220
+ case idl.IDLBigintType: return KLong;
221
+ case idl.IDLSerializerBuffer: return KSerializerBuffer;
222
+ case idl.IDLFunctionType: return KInt;
223
+ case idl.IDLStringType: return KStringPtr;
224
+ case idl.IDLBufferType: return KInteropBuffer;
225
+ case idl.IDLInteropReturnBufferType: return KInteropReturnBuffer;
226
+ case idl.IDLDate: return KLong;
227
+ case idl.IDLVoidType: return Unit;
228
+ case idl.IDLPointerType: return KNativePointer;
229
+ }
230
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
231
+ }
232
+ }
233
+ // used for C code
147
234
  export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
148
235
  convertPrimitiveType(type) {
149
236
  switch (type) {
150
- case idl.IDLI8Type:
151
- case idl.IDLU8Type:
152
- case idl.IDLI16Type:
153
- case idl.IDLU16Type:
154
- case idl.IDLI32Type:
155
- case idl.IDLU32Type:
156
- case idl.IDLI64Type:
157
- case idl.IDLU64Type:
158
- case idl.IDLF16Type:
159
- case idl.IDLF32Type:
160
- case idl.IDLF64Type: return KInt;
237
+ case idl.IDLI8Type: return KByte;
238
+ case idl.IDLU8Type: return KByte;
239
+ case idl.IDLI16Type: return KShort;
240
+ case idl.IDLU16Type: return KShort;
241
+ case idl.IDLI32Type: return KInt;
242
+ case idl.IDLU32Type: return KInt;
243
+ case idl.IDLI64Type: return KLong;
244
+ case idl.IDLU64Type: return KLong;
245
+ case idl.IDLF32Type: return KFloat;
246
+ case idl.IDLF64Type: return KDouble;
161
247
  case idl.IDLNumberType: return KDouble;
162
248
  case idl.IDLBooleanType: return KBoolean;
163
249
  case idl.IDLBigintType: return KLong;
@@ -168,22 +254,20 @@ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConverto
168
254
  case idl.IDLObjectType:
169
255
  case idl.IDLVoidType: return idl.IDLVoidType.name;
170
256
  case idl.IDLBufferType: return KInteropReturnBuffer;
257
+ case idl.IDLInteropReturnBufferType: return KInteropReturnBuffer;
171
258
  case idl.IDLStringType: return KStringPtr;
172
259
  case idl.IDLPointerType: return KNativePointer;
173
260
  }
174
261
  throw new Error(`Cannot pass primitive type ${type.name} through interop`);
175
262
  }
176
263
  convertTypeReference(type) {
177
- if (this.resolver != undefined && idl.isCallback(this.resolver.toDeclaration(type))) {
178
- return KNativePointer;
179
- }
180
264
  if (type.name.endsWith("Attribute"))
181
265
  return idl.IDLVoidType.name;
182
266
  const decl = this.resolver.resolveTypeReference(type);
183
267
  if (decl) {
184
268
  // Callbacks and array types return by value
185
269
  if (idl.isCallback(this.resolver.toDeclaration(type))) {
186
- return type.name;
270
+ return KInteropReturnBuffer;
187
271
  }
188
272
  if (idl.isInterface(decl)) {
189
273
  if (isMaterialized(decl, this.resolver)) {
@@ -198,6 +282,7 @@ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConverto
198
282
  return idl.IDLVoidType.name;
199
283
  }
200
284
  }
285
+ // used for C code
201
286
  export class KotlinCInteropArgConvertor {
202
287
  convert(type) {
203
288
  return convertType(this, type);
@@ -216,22 +301,24 @@ export class KotlinCInteropArgConvertor {
216
301
  }
217
302
  convertPrimitiveType(type) {
218
303
  switch (type) {
219
- case idl.IDLI64Type: return KLong;
220
- case idl.IDLU64Type: return KLong;
304
+ case idl.IDLI8Type: return KByte;
305
+ case idl.IDLU8Type: return KByte;
306
+ case idl.IDLI16Type: return KShort;
307
+ case idl.IDLU16Type: return KShort;
221
308
  case idl.IDLI32Type: return KInt;
222
309
  case idl.IDLU32Type: return KInt;
310
+ case idl.IDLI64Type: return KLong;
311
+ case idl.IDLU64Type: return KLong;
223
312
  case idl.IDLF32Type: return KFloat;
224
313
  case idl.IDLF64Type: return KDouble;
225
314
  case idl.IDLNumberType: return KDouble;
315
+ case idl.IDLBooleanType: return KBoolean;
226
316
  case idl.IDLBigintType: return KLong;
227
317
  case idl.IDLSerializerBuffer: return KSerializerBuffer;
228
- case idl.IDLBooleanType:
229
318
  case idl.IDLFunctionType: return KInt;
230
319
  case idl.IDLStringType: return KStringPtr;
231
320
  case idl.IDLBufferType: return KInteropBuffer;
232
321
  case idl.IDLDate: return KLong;
233
- case idl.IDLUndefinedType:
234
- case idl.IDLVoidType:
235
322
  case idl.IDLPointerType: return KNativePointer;
236
323
  }
237
324
  throw new Error(`Cannot pass primitive type ${type.name} through interop`);
@@ -16,7 +16,7 @@ import * as idl from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
18
18
  import { isDeclaredInCurrentFile, LayoutNodeRole } from '../../peer-generation/LayoutManager';
19
- import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
19
+ import { maybeRestoreGenerics, maybeRestoreThrows } from '../../transformers/transformUtils';
20
20
  import { convertNode, convertType, isInsideInstanceof, withInsideInstanceof } from '../nameConvertor';
21
21
  export class TSTypeNameConvertor {
22
22
  constructor(library) {
@@ -128,6 +128,10 @@ export class TSTypeNameConvertor {
128
128
  return this.productType(decl, type.typeArguments, isTuple, !isTuple);
129
129
  }
130
130
  }
131
+ let restoredThrow;
132
+ if (restoredThrow = maybeRestoreThrows(decl, this.library)) {
133
+ return this.convert(restoredThrow);
134
+ }
131
135
  // FIXME: isEnumMember is not TYPE!
132
136
  if (decl && idl.isEnumMember(decl) && decl.parent) {
133
137
  // when `interface A { field?: MyEnum.Value1 }` is generated, it is not possible
@@ -1,9 +1,8 @@
1
1
  import { Language } from "../Language";
2
2
  import { LibraryInterface } from "../LibraryInterface";
3
- import { PeerLibrary } from "../peer-generation/PeerLibrary";
4
3
  import { LanguageWriter } from "./LanguageWriter";
5
4
  import { IdlNameConvertor } from "./nameConvertor";
6
5
  export * from "./nameConvertor";
7
6
  export declare function createLanguageWriter(language: Language, library: LibraryInterface, nameConvertor?: IdlNameConvertor): LanguageWriter;
8
- export declare function createInteropArgConvertor(language: Language, library: PeerLibrary): IdlNameConvertor;
7
+ export declare function createInteropArgConvertor(language: Language): IdlNameConvertor;
9
8
  //# sourceMappingURL=index.d.ts.map
@@ -1,10 +1,24 @@
1
+ /*
2
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
1
15
  import { IndentedPrinter } from "../IndentedPrinter";
2
16
  import { Language } from "../Language";
3
17
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
4
18
  import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
5
19
  import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
6
20
  import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
7
- import { KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
21
+ import { KotlinInteropArgConvertor, KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
8
22
  import { TSInteropArgConvertor, TSTypeNameConvertor } from "./convertors/TSConvertors";
9
23
  import { CJLanguageWriter } from "./writers/CJLanguageWriter";
10
24
  import { CppLanguageWriter } from "./writers/CppLanguageWriter";
@@ -23,13 +37,13 @@ export function createLanguageWriter(language, library, nameConvertor) {
23
37
  default: throw new Error(`Language ${language.toString()} is not supported`);
24
38
  }
25
39
  }
26
- export function createInteropArgConvertor(language, library) {
40
+ export function createInteropArgConvertor(language) {
27
41
  switch (language) {
28
42
  case Language.TS: return new TSInteropArgConvertor();
29
43
  case Language.ARKTS: return new ETSInteropArgConvertor();
30
44
  case Language.CPP: return CppInteropArgConvertor.INSTANCE;
31
45
  case Language.CJ: return new CJInteropArgConvertor();
32
- case Language.KOTLIN: return new KotlinTypeNameConvertor(library);
46
+ case Language.KOTLIN: return new KotlinInteropArgConvertor();
33
47
  }
34
48
  throw new Error(`InteropArgConvertor for language ${language} not implemented`);
35
49
  }
@@ -120,7 +120,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
120
120
  makeArrayAccess(value: string, indexVar: string): LanguageExpression;
121
121
  makeRuntimeTypeCondition(typeVarName: string, equals: boolean, type: RuntimeType, varName: string): LanguageExpression;
122
122
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
123
- makeThrowError(message: string): LanguageStatement;
123
+ makeThrowError(message: string | LanguageExpression): LanguageStatement;
124
124
  makeTernary(condition: LanguageExpression, trueExpression: LanguageExpression, falseExpression: LanguageExpression): LanguageExpression;
125
125
  makeReturn(expr: LanguageExpression): LanguageStatement;
126
126
  makeStatement(expr: LanguageExpression): LanguageStatement;
@@ -220,11 +220,11 @@ export class CJEnumEntityStatement {
220
220
  }
221
221
  }
222
222
  class CJThrowErrorStatement {
223
- constructor(message) {
224
- this.message = message;
223
+ constructor(exception) {
224
+ this.exception = exception;
225
225
  }
226
226
  write(writer) {
227
- writer.print(`throw Exception("${this.message}")`);
227
+ writer.print(`throw ${this.exception.asString()}`);
228
228
  }
229
229
  }
230
230
  class CJArrayResizeStatement {
@@ -466,6 +466,8 @@ export class CJLanguageWriter extends LanguageWriter {
466
466
  return new CJLambdaExpression(this, signature, this.resolver, body);
467
467
  }
468
468
  makeThrowError(message) {
469
+ if (typeof message === 'string')
470
+ message = this.makeString(`Exception("${message}")`);
469
471
  return new CJThrowErrorStatement(message);
470
472
  }
471
473
  makeTernary(condition, trueExpression, falseExpression) {
@@ -24,7 +24,7 @@ export declare abstract class CLikeLanguageWriter extends LanguageWriter {
24
24
  protected constructor(printer: IndentedPrinter, resolver: ReferenceResolver, language: Language);
25
25
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
26
26
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
27
- makeThrowError(message: string): LanguageStatement;
27
+ makeThrowError(message: string | LanguageExpression): LanguageStatement;
28
28
  makeEquals(args: LanguageExpression[]): LanguageExpression;
29
29
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
30
30
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
@@ -54,11 +54,11 @@ export class CLikeExpressionStatement extends ExpressionStatement {
54
54
  }
55
55
  }
56
56
  class CLikeThrowErrorStatement {
57
- constructor(message) {
58
- this.message = message;
57
+ constructor(exception) {
58
+ this.exception = exception;
59
59
  }
60
60
  write(writer) {
61
- writer.print(`throw new Error("${this.message}");`);
61
+ writer.print(`throw ${this.exception.asString()};`);
62
62
  }
63
63
  }
64
64
  ////////////////////////////////////////////////////////////////
@@ -75,6 +75,8 @@ export class CLikeLanguageWriter extends LanguageWriter {
75
75
  this.writeMethodImplementation(new Method(name, signature), op);
76
76
  }
77
77
  makeThrowError(message) {
78
+ if (typeof message === 'string')
79
+ message = this.makeString(`new Error("${message}")`);
78
80
  return new CLikeThrowErrorStatement(message);
79
81
  }
80
82
  makeEquals(args) {
@@ -83,7 +83,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
83
83
  makeThis(): LanguageExpression;
84
84
  makeNull(): LanguageExpression;
85
85
  makeValueFromOption(value: string): LanguageExpression;
86
- makeThrowError(message: string): LanguageStatement;
86
+ makeThrowError(message: string | LanguageExpression): LanguageStatement;
87
87
  makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
88
88
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
89
89
  makeReturn(expr: LanguageExpression): LanguageStatement;
@@ -129,6 +129,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
129
129
  stringifyMethodReturnType(type: IDLType, hint?: PrintHint): string;
130
130
  stringifyMethodArgType(type: IDLType, hint?: PrintHint): string;
131
131
  stringifyTypeWithReceiver(type: IDLType, receiver?: string): string;
132
+ makeMethodReference(receiver: string, method: string): LanguageExpression;
132
133
  discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
133
134
  }
134
135
  //# sourceMappingURL=CppLanguageWriter.d.ts.map
@@ -153,11 +153,11 @@ class CppEnumEntityStatement {
153
153
  }
154
154
  }
155
155
  class CPPThrowErrorStatement {
156
- constructor(message) {
157
- this.message = message;
156
+ constructor(exception) {
157
+ this.exception = exception;
158
158
  }
159
159
  write(writer) {
160
- writer.print(`INTEROP_FATAL("${this.message}");`);
160
+ writer.print(`${this.exception.asString()};`);
161
161
  }
162
162
  }
163
163
  ////////////////////////////////////////////////////////////////
@@ -294,6 +294,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
294
294
  return this.makeString(`${value}.value`);
295
295
  }
296
296
  makeThrowError(message) {
297
+ if (typeof message === 'string')
298
+ message = this.makeString(`INTEROP_FATAL("${message}")`);
297
299
  return new CPPThrowErrorStatement(message);
298
300
  }
299
301
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true, options) {
@@ -489,6 +491,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
489
491
  }
490
492
  return this.getNodeName(type);
491
493
  }
494
+ makeMethodReference(receiver, method) {
495
+ return this.makeString(`${receiver}::${method}`);
496
+ }
492
497
  discriminate(value, index, type, runtimeTypes) {
493
498
  return `${value}.selector == ${index}`;
494
499
  }
@@ -13,10 +13,10 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import { IndentedPrinter } from "../../IndentedPrinter";
16
- import { BlockStatement, LambdaExpression, MethodModifier } from "../LanguageWriter";
16
+ import { BlockStatement, LambdaExpression, MethodModifier, } from "../LanguageWriter";
17
17
  import { TSCastExpression, TSLanguageWriter } from "./TsLanguageWriter";
18
18
  import { IDLThisType } from '../../idl';
19
- import { AggregateConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor } from "../ArgConvertors";
19
+ import { makeETSDiscriminatorFromFields, } from "../ArgConvertors";
20
20
  import * as idl from '../../idl';
21
21
  import { withInsideInstanceof } from "../nameConvertor";
22
22
  import { Language } from "../../Language";
@@ -174,13 +174,7 @@ export class ETSLanguageWriter extends TSLanguageWriter {
174
174
  : this.makeMethodCall(enumName, 'fromValue', [value]);
175
175
  }
176
176
  makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
177
- if (convertor instanceof AggregateConvertor
178
- || convertor instanceof InterfaceConvertor
179
- || convertor instanceof MaterializedClassConvertor
180
- || convertor instanceof CustomTypeConvertor) {
181
- return this.instanceOf(value, convertor.idlType);
182
- }
183
- return this.makeString(`${value} instanceof ${withInsideInstanceof(true, () => convertor.targetType(this))}`);
177
+ return makeETSDiscriminatorFromFields(this, convertor, value, accessors, duplicates);
184
178
  }
185
179
  makeValueFromOption(value, destinationConvertor) {
186
180
  if (idl.isEnum(this.resolver.toDeclaration(destinationConvertor.nativeType()))) {
@@ -229,7 +223,7 @@ export class ETSLanguageWriter extends TSLanguageWriter {
229
223
  // The explicit cast forces ui2abc to call valueOf on an int, which fails the compilation
230
224
  // TODO Fix this cast
231
225
  if (bitness === 8)
232
- return `(${value}).toChar()`;
226
+ return `(${value}).toByte()`;
233
227
  return `(${value}).toInt()`; // FIXME: is there int8 in ARKTS?
234
228
  }
235
229
  castToBoolean(value) { return `${value} ? true : false`; }
@@ -28,8 +28,8 @@ export declare class KotlinEnumWithGetter implements LanguageStatement {
28
28
  write(writer: LanguageWriter): void;
29
29
  }
30
30
  export declare class KotlinThrowErrorStatement implements LanguageStatement {
31
- message: string;
32
- constructor(message: string);
31
+ exception: LanguageExpression;
32
+ constructor(exception: LanguageExpression);
33
33
  write(writer: LanguageWriter): void;
34
34
  }
35
35
  export declare class KotlinLoopStatement implements LanguageStatement {
@@ -105,7 +105,7 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
105
105
  makeNull(): LanguageExpression;
106
106
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
107
107
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
108
- makeThrowError(message: string): LanguageStatement;
108
+ makeThrowError(message: string | LanguageExpression): LanguageStatement;
109
109
  makeReturn(expr: LanguageExpression): LanguageStatement;
110
110
  makeLambdaReturn(expr: LanguageExpression): LanguageStatement;
111
111
  makeStatement(expr: LanguageExpression): LanguageStatement;
@@ -147,8 +147,10 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
147
147
  castToInt(value: string, bitness: 8 | 32): string;
148
148
  makeCallIsObject(value: string): LanguageExpression;
149
149
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
150
+ makeFunctionReference(name: string): LanguageExpression;
151
+ makeMethodReference(receiver: string, method: string): LanguageExpression;
150
152
  escapeKeyword(keyword: string): string;
151
- makeStaticBlock(op: (writer: LanguageWriter) => void): void;
153
+ writeStaticEntitiesBlock(op: (writer: LanguageWriter) => void): void;
152
154
  pushNamespace(namespace: string, options: NamespaceOptions): void;
153
155
  popNamespace(options: {
154
156
  ident: boolean;