@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.
- package/build/lib/src/IndentedPrinter.js +2 -2
- package/build/lib/src/Language.d.ts +1 -0
- package/build/lib/src/Language.js +8 -0
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +47 -3
- package/build/lib/src/LanguageWriters/ArgConvertors.js +216 -19
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +12 -4
- package/build/lib/src/LanguageWriters/LanguageWriter.js +28 -3
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +6 -2
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +7 -1
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -0
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +10 -5
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +138 -51
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +5 -1
- package/build/lib/src/LanguageWriters/index.d.ts +1 -2
- package/build/lib/src/LanguageWriters/index.js +17 -3
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +5 -3
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +5 -3
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +8 -3
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +4 -10
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +6 -4
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +59 -42
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +5 -3
- package/build/lib/src/LibraryInterface.d.ts +6 -0
- package/build/lib/src/LibraryInterface.js +22 -1
- package/build/lib/src/from-idl/DtsPrinter.d.ts +3 -2
- package/build/lib/src/from-idl/DtsPrinter.js +9 -6
- package/build/lib/src/from-idl/parser.d.ts +1 -1
- package/build/lib/src/from-idl/parser.js +3 -3
- package/build/lib/src/idl/builders.d.ts +36 -1
- package/build/lib/src/idl/builders.js +62 -2
- package/build/lib/src/idl/dump.d.ts +3 -0
- package/build/lib/src/idl/dump.js +22 -4
- package/build/lib/src/idl/index.d.ts +0 -1
- package/build/lib/src/idl/index.js +0 -1
- package/build/lib/src/idl/node.d.ts +1 -0
- package/build/lib/src/idl/node.js +1 -0
- package/build/lib/src/idl/stdlib.d.ts +1 -0
- package/build/lib/src/idl/stdlib.js +1 -0
- package/build/lib/src/idl/utils.d.ts +4 -3
- package/build/lib/src/idl/utils.js +26 -13
- package/build/lib/src/idl/visitors.js +24 -104
- package/build/lib/src/index.d.ts +4 -1
- package/build/lib/src/index.js +4 -1
- package/build/lib/src/peer-generation/Extractors.d.ts +7 -0
- package/build/lib/src/peer-generation/Extractors.js +40 -0
- package/build/lib/src/peer-generation/Initializers.d.ts +5 -0
- package/build/lib/src/peer-generation/Initializers.js +28 -0
- package/build/lib/src/peer-generation/Materialized.d.ts +0 -4
- package/build/lib/src/peer-generation/Materialized.js +13 -24
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -0
- package/build/lib/src/peer-generation/PeerLibrary.js +54 -3
- package/build/lib/src/peer-generation/PeerMethod.d.ts +1 -0
- package/build/lib/src/peer-generation/PeerMethod.js +1 -0
- package/build/lib/src/peer-generation/idl/common.d.ts +0 -2
- package/build/lib/src/peer-generation/idl/common.js +3 -25
- package/build/lib/src/peer-generation/isMaterialized.d.ts +4 -0
- package/build/lib/src/peer-generation/isMaterialized.js +12 -0
- package/build/lib/src/peer-generation/unions.d.ts +1 -27
- package/build/lib/src/peer-generation/unions.js +1 -99
- package/build/lib/src/transformers/FqnTransformer.js +26 -2
- package/build/lib/src/transformers/GenericTransformer.d.ts +0 -2
- package/build/lib/src/transformers/GenericTransformer.js +20 -20
- package/build/lib/src/transformers/IdlTransformer.js +14 -0
- package/build/lib/src/transformers/NullTransformer.js +16 -3
- package/build/lib/src/transformers/OnSerializeTransformer.js +14 -0
- package/build/lib/src/transformers/ThrowsTransformer.d.ts +3 -0
- package/build/lib/src/transformers/ThrowsTransformer.js +51 -0
- package/build/lib/src/transformers/transformUtils.d.ts +7 -0
- package/build/lib/src/transformers/transformUtils.js +55 -0
- package/build/lib/src/util.d.ts +0 -15
- package/build/lib/src/util.js +2 -73
- 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
|
|
7
|
-
constructor(
|
|
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
|
|
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(
|
|
23
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
42
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
168
|
+
return KInteropReturnBuffer;
|
|
129
169
|
}
|
|
130
170
|
throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
|
|
131
171
|
}
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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.
|
|
159
|
-
case idl.
|
|
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
|
|
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.
|
|
220
|
-
case idl.
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
224
|
-
this.
|
|
223
|
+
constructor(exception) {
|
|
224
|
+
this.exception = exception;
|
|
225
225
|
}
|
|
226
226
|
write(writer) {
|
|
227
|
-
writer.print(`throw
|
|
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(
|
|
58
|
-
this.
|
|
57
|
+
constructor(exception) {
|
|
58
|
+
this.exception = exception;
|
|
59
59
|
}
|
|
60
60
|
write(writer) {
|
|
61
|
-
writer.print(`throw
|
|
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(
|
|
157
|
-
this.
|
|
156
|
+
constructor(exception) {
|
|
157
|
+
this.exception = exception;
|
|
158
158
|
}
|
|
159
159
|
write(writer) {
|
|
160
|
-
writer.print(
|
|
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 {
|
|
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
|
-
|
|
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}).
|
|
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
|
-
|
|
32
|
-
constructor(
|
|
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
|
-
|
|
153
|
+
writeStaticEntitiesBlock(op: (writer: LanguageWriter) => void): void;
|
|
152
154
|
pushNamespace(namespace: string, options: NamespaceOptions): void;
|
|
153
155
|
popNamespace(options: {
|
|
154
156
|
ident: boolean;
|