@idlizer/core 2.1.10-arktscgen-3a → 2.1.10-arktscgen-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/src/Language.d.ts +0 -1
- package/build/lib/src/Language.js +0 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +15 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.js +75 -19
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +14 -2
- package/build/lib/src/LanguageWriters/LanguageWriter.js +12 -4
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +2 -4
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -7
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +37 -23
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +9 -5
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -4
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +73 -30
- package/build/lib/src/LanguageWriters/index.d.ts +2 -2
- package/build/lib/src/LanguageWriters/index.js +8 -13
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +4 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +24 -16
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +7 -1
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +1 -2
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -6
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -0
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +8 -0
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +75 -27
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +38 -12
- package/build/lib/src/LibraryInterface.d.ts +0 -1
- package/build/lib/src/config.d.ts +760 -0
- package/build/lib/src/config.js +7 -0
- package/build/lib/src/formatter.js +5 -2
- package/build/lib/src/from-idl/DtsPrinter.js +3 -3
- package/build/lib/src/from-idl/common.js +2 -2
- package/build/lib/src/from-idl/deserialize.d.ts +3 -7
- package/build/lib/src/from-idl/deserialize.js +65 -39
- package/build/lib/src/from-idl/parser.d.ts +1 -1
- package/build/lib/src/from-idl/parser.js +29 -20
- package/build/lib/src/idl.d.ts +12 -1
- package/build/lib/src/idl.js +73 -11
- package/build/lib/src/index.d.ts +3 -5
- package/build/lib/src/index.js +3 -5
- package/build/lib/src/inheritance.d.ts +0 -2
- package/build/lib/src/inheritance.js +0 -17
- package/build/lib/src/languageSpecificKeywords.js +1 -1
- package/build/lib/src/peer-generation/ConflictingDeclarations.d.ts +6 -0
- package/build/lib/src/peer-generation/ConflictingDeclarations.js +43 -0
- package/build/lib/src/peer-generation/LayoutManager.d.ts +2 -0
- package/build/lib/src/peer-generation/LayoutManager.js +15 -0
- package/build/lib/src/peer-generation/Materialized.d.ts +2 -0
- package/build/lib/src/peer-generation/Materialized.js +14 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -3
- package/build/lib/src/peer-generation/PeerLibrary.js +63 -38
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +6 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +15 -3
- package/build/lib/src/peer-generation/isMaterialized.js +1 -1
- package/build/lib/src/peer-generation/modules.d.ts +2 -0
- package/build/lib/src/peer-generation/modules.js +14 -1
- package/build/lib/src/transformers/GenericTransformer.js +70 -5
- package/build/lib/src/transformers/NullTransformer.d.ts +0 -1
- package/build/lib/src/transformers/NullTransformer.js +1 -2
- package/build/lib/src/transformers/OnSerializeTransformer.d.ts +3 -0
- package/build/lib/src/transformers/OnSerializeTransformer.js +19 -0
- package/build/lib/src/util.d.ts +10 -39
- package/build/lib/src/util.js +56 -371
- package/package.json +45 -49
|
@@ -13,11 +13,26 @@
|
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
|
+
import { Language } from '../../Language';
|
|
17
|
+
import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
|
|
18
|
+
import { isDeclaredInCurrentFile, LayoutNodeRole } from '../../peer-generation/LayoutManager';
|
|
16
19
|
import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
|
|
17
20
|
import { convertNode, convertType } from '../nameConvertor';
|
|
18
21
|
export class TSTypeNameConvertor {
|
|
19
|
-
constructor(
|
|
20
|
-
this.
|
|
22
|
+
constructor(library) {
|
|
23
|
+
this.library = library;
|
|
24
|
+
}
|
|
25
|
+
mangleTopLevel(decl) {
|
|
26
|
+
if (!isDeclaredInCurrentFile(this.library.layout, { node: decl, role: LayoutNodeRole.INTERFACE }) && isTopLevelConflicted(this.library, Language.TS, decl)) {
|
|
27
|
+
const namespaces = idl.getNamespacesPathFor(decl);
|
|
28
|
+
if (namespaces.length === 0) {
|
|
29
|
+
return idl.getQualifiedName(decl, "package.namespace.name").replaceAll('.', '_');
|
|
30
|
+
}
|
|
31
|
+
const [rootNamespace, ...otherNamespaces] = idl.getNamespacesPathFor(decl);
|
|
32
|
+
const mangledRoot = idl.getQualifiedName(rootNamespace, "package.namespace.name").replaceAll('.', '_');
|
|
33
|
+
return [mangledRoot, ...otherNamespaces, decl.name].join(".");
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
21
36
|
}
|
|
22
37
|
convert(node) {
|
|
23
38
|
return convertNode(this, node);
|
|
@@ -26,18 +41,22 @@ export class TSTypeNameConvertor {
|
|
|
26
41
|
return node.name;
|
|
27
42
|
}
|
|
28
43
|
convertInterface(node) {
|
|
29
|
-
|
|
44
|
+
var _a;
|
|
45
|
+
return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
|
|
30
46
|
}
|
|
31
47
|
convertEnum(node) {
|
|
32
|
-
|
|
48
|
+
var _a;
|
|
49
|
+
return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
|
|
33
50
|
}
|
|
34
51
|
convertTypedef(node) {
|
|
35
|
-
|
|
52
|
+
var _a;
|
|
53
|
+
return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
|
|
36
54
|
}
|
|
37
55
|
convertCallback(node) {
|
|
56
|
+
var _a;
|
|
38
57
|
return idl.isSyntheticEntry(node)
|
|
39
58
|
? this.mapCallback(node)
|
|
40
|
-
: node.name;
|
|
59
|
+
: (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : node.name;
|
|
41
60
|
}
|
|
42
61
|
convertMethod(node) {
|
|
43
62
|
return node.name;
|
|
@@ -90,14 +109,14 @@ export class TSTypeNameConvertor {
|
|
|
90
109
|
convertTypeReferenceAsImport(type, importClause) {
|
|
91
110
|
var _a;
|
|
92
111
|
const maybeTypeArguments = ((_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.length) ? `<${type.typeArguments.join(', ')}>` : "";
|
|
93
|
-
let decl = this.
|
|
112
|
+
let decl = this.library.resolveTypeReference(type);
|
|
94
113
|
if (decl)
|
|
95
114
|
return `${decl.name}${maybeTypeArguments}`;
|
|
96
115
|
return `${type.name}${maybeTypeArguments}`;
|
|
97
116
|
}
|
|
98
117
|
convertTypeReference(type) {
|
|
99
|
-
var _a, _b;
|
|
100
|
-
let decl = this.
|
|
118
|
+
var _a, _b, _c;
|
|
119
|
+
let decl = this.library.resolveTypeReference(type);
|
|
101
120
|
if (decl) {
|
|
102
121
|
if (idl.isSyntheticEntry(decl)) {
|
|
103
122
|
if (idl.isCallback(decl)) {
|
|
@@ -116,10 +135,10 @@ export class TSTypeNameConvertor {
|
|
|
116
135
|
// (can not cast MyEnum to exact MyEnum.Value1)
|
|
117
136
|
decl = decl.parent;
|
|
118
137
|
}
|
|
119
|
-
let maybeRestoredGeneric = maybeRestoreGenerics(type, this.
|
|
138
|
+
let maybeRestoredGeneric = maybeRestoreGenerics(type, this.library);
|
|
120
139
|
if (maybeRestoredGeneric) {
|
|
121
140
|
type = maybeRestoredGeneric;
|
|
122
|
-
decl = this.
|
|
141
|
+
decl = this.library.resolveTypeReference(maybeRestoredGeneric);
|
|
123
142
|
}
|
|
124
143
|
let typeSpec = type.name;
|
|
125
144
|
let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
|
|
@@ -131,7 +150,7 @@ export class TSTypeNameConvertor {
|
|
|
131
150
|
if (decl) {
|
|
132
151
|
const path = idl.getNamespacesPathFor(decl).map(it => it.name);
|
|
133
152
|
path.push(decl.name);
|
|
134
|
-
return `${path.join(".")}${maybeTypeArguments}`;
|
|
153
|
+
return `${(_c = this.mangleTopLevel(decl)) !== null && _c !== void 0 ? _c : path.join(".")}${maybeTypeArguments}`;
|
|
135
154
|
}
|
|
136
155
|
return `${type.name}${maybeTypeArguments}`;
|
|
137
156
|
}
|
|
@@ -192,27 +211,16 @@ export class TSTypeNameConvertor {
|
|
|
192
211
|
}
|
|
193
212
|
return subst;
|
|
194
213
|
}
|
|
195
|
-
applySubstitution(subst, type) {
|
|
196
|
-
var _a;
|
|
197
|
-
if (idl.isContainerType(type)) {
|
|
198
|
-
return idl.createContainerType(type.containerKind, type.elementType.map(it => this.applySubstitution(subst, it)));
|
|
199
|
-
}
|
|
200
|
-
if (idl.isReferenceType(type)) {
|
|
201
|
-
return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.applySubstitution(subst, it)));
|
|
202
|
-
}
|
|
203
|
-
if (idl.isTypeParameterType(type)) {
|
|
204
|
-
const record = subst.get(type.name);
|
|
205
|
-
if (record) {
|
|
206
|
-
return record;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
return type;
|
|
210
|
-
}
|
|
211
214
|
mapCallback(decl, args) {
|
|
212
215
|
const subst = this.createTypeSubstitution(decl.typeParameters, args);
|
|
213
216
|
const parameters = decl.parameters.map(it => {
|
|
217
|
+
if (subst.size == 0)
|
|
218
|
+
return it;
|
|
214
219
|
const param = idl.clone(it);
|
|
215
|
-
param.
|
|
220
|
+
param.parent = it.parent;
|
|
221
|
+
const type = applySubstitution(subst, param.type);
|
|
222
|
+
updateParent(param, type);
|
|
223
|
+
param.type = type;
|
|
216
224
|
return param;
|
|
217
225
|
});
|
|
218
226
|
const params = parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}${it.isVariadic ? "[]" : ""}`);
|
|
@@ -223,8 +231,13 @@ export class TSTypeNameConvertor {
|
|
|
223
231
|
const name = `${isTuple ? "[" : "{"} ${decl.properties
|
|
224
232
|
.map(it => isTuple ? this.processTupleType(it) : it)
|
|
225
233
|
.map(it => {
|
|
234
|
+
if (subst.size == 0)
|
|
235
|
+
return it;
|
|
226
236
|
const prop = idl.clone(it);
|
|
227
|
-
prop.
|
|
237
|
+
prop.parent = it.parent;
|
|
238
|
+
const type = applySubstitution(subst, prop.type);
|
|
239
|
+
updateParent(prop, type);
|
|
240
|
+
prop.type = type;
|
|
228
241
|
return prop;
|
|
229
242
|
})
|
|
230
243
|
.map(it => {
|
|
@@ -287,4 +300,34 @@ export class TSInteropArgConvertor {
|
|
|
287
300
|
throw new Error("Cannot pass union types through interop");
|
|
288
301
|
}
|
|
289
302
|
}
|
|
303
|
+
function applySubstitution(subst, type) {
|
|
304
|
+
var _a;
|
|
305
|
+
if (idl.isContainerType(type)) {
|
|
306
|
+
return idl.createContainerType(type.containerKind, type.elementType.map(it => applySubstitution(subst, it)));
|
|
307
|
+
}
|
|
308
|
+
if (idl.isReferenceType(type)) {
|
|
309
|
+
return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => applySubstitution(subst, it)));
|
|
310
|
+
}
|
|
311
|
+
if (idl.isTypeParameterType(type)) {
|
|
312
|
+
const record = subst.get(type.name);
|
|
313
|
+
if (record) {
|
|
314
|
+
return record;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return type;
|
|
318
|
+
}
|
|
319
|
+
// Update parents to properly find a file for conflicted types
|
|
320
|
+
function updateParent(parent, type) {
|
|
321
|
+
type.parent = parent;
|
|
322
|
+
if (idl.isOptionalType(type))
|
|
323
|
+
updateParent(type, type.type);
|
|
324
|
+
if (idl.isUnionType(type))
|
|
325
|
+
updateParents(type, type.types);
|
|
326
|
+
if (idl.isContainerType(type))
|
|
327
|
+
updateParents(type, type.elementType);
|
|
328
|
+
}
|
|
329
|
+
function updateParents(parent, types) {
|
|
330
|
+
for (const type of types)
|
|
331
|
+
updateParent(parent, type);
|
|
332
|
+
}
|
|
290
333
|
//# sourceMappingURL=TSConvertors.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Language } from "../Language";
|
|
2
|
-
import {
|
|
2
|
+
import { LibraryInterface } from "../LibraryInterface";
|
|
3
3
|
import { LanguageWriter } from "./LanguageWriter";
|
|
4
4
|
import { TypeConvertor } from "./nameConvertor";
|
|
5
5
|
export * from "./nameConvertor";
|
|
6
|
-
export declare function createLanguageWriter(language: Language,
|
|
6
|
+
export declare function createLanguageWriter(language: Language, library: LibraryInterface): LanguageWriter;
|
|
7
7
|
export declare function createInteropArgConvertor(language: Language): TypeConvertor<string>;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -5,26 +5,22 @@ import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolv
|
|
|
5
5
|
import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
|
|
6
6
|
import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
|
|
7
7
|
import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
|
|
8
|
-
import {
|
|
9
|
-
import { KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
|
|
8
|
+
import { KotlinCInteropArgConvertor, KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
|
|
10
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";
|
|
14
|
-
import { JavaLanguageWriter } from "./writers/JavaLanguageWriter";
|
|
15
13
|
import { KotlinLanguageWriter } from "./writers/KotlinLanguageWriter";
|
|
16
14
|
import { TSLanguageWriter } from "./writers/TsLanguageWriter";
|
|
17
15
|
export * from "./nameConvertor";
|
|
18
|
-
export function createLanguageWriter(language,
|
|
19
|
-
resolver !== null && resolver !== void 0 ? resolver : (resolver = EmptyReferenceResolver);
|
|
16
|
+
export function createLanguageWriter(language, library) {
|
|
20
17
|
const printer = new IndentedPrinter();
|
|
21
18
|
switch (language) {
|
|
22
|
-
case Language.TS: return new TSLanguageWriter(printer,
|
|
23
|
-
case Language.ARKTS: return new ETSLanguageWriter(printer,
|
|
24
|
-
case Language.
|
|
25
|
-
case Language.
|
|
26
|
-
case Language.
|
|
27
|
-
case Language.KOTLIN: return new KotlinLanguageWriter(printer, resolver, new KotlinTypeNameConvertor(resolver));
|
|
19
|
+
case Language.TS: return new TSLanguageWriter(printer, library, new TSTypeNameConvertor(library));
|
|
20
|
+
case Language.ARKTS: return new ETSLanguageWriter(printer, library, new ETSTypeNameConvertor(library), new CppConvertor(library));
|
|
21
|
+
case Language.CPP: return new CppLanguageWriter(printer, library, new CppConvertor(library), PrimitiveTypesInstance);
|
|
22
|
+
case Language.CJ: return new CJLanguageWriter(printer, library, new CJTypeNameConvertor(library), new CJIDLTypeToForeignStringConvertor(library));
|
|
23
|
+
case Language.KOTLIN: return new KotlinLanguageWriter(printer, library, new KotlinTypeNameConvertor(library));
|
|
28
24
|
default: throw new Error(`Language ${language.toString()} is not supported`);
|
|
29
25
|
}
|
|
30
26
|
}
|
|
@@ -33,9 +29,8 @@ export function createInteropArgConvertor(language) {
|
|
|
33
29
|
case Language.TS: return new TSInteropArgConvertor();
|
|
34
30
|
case Language.ARKTS: return new ETSInteropArgConvertor();
|
|
35
31
|
case Language.CPP: return CppInteropArgConvertor.INSTANCE;
|
|
36
|
-
case Language.JAVA: return new JavaInteropArgConvertor();
|
|
37
32
|
case Language.CJ: return new CJInteropArgConvertor();
|
|
38
|
-
case Language.KOTLIN: return new
|
|
33
|
+
case Language.KOTLIN: return new KotlinCInteropArgConvertor();
|
|
39
34
|
}
|
|
40
35
|
throw new Error(`InteropArgConvertor for language ${language} not implemented`);
|
|
41
36
|
}
|
|
@@ -75,6 +75,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
75
75
|
resolver?: ReferenceResolver;
|
|
76
76
|
}): LanguageWriter;
|
|
77
77
|
getNodeName(type: idl.IDLNode): string;
|
|
78
|
+
get interopModule(): string;
|
|
78
79
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[]): void;
|
|
79
80
|
writeEnum(name: string, members: {
|
|
80
81
|
name: string;
|
|
@@ -105,6 +106,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
105
106
|
writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
|
|
106
107
|
writeSetterImplementation(method: Method, op: (writer: this) => void): void;
|
|
107
108
|
writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
|
|
109
|
+
writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
108
110
|
private writeDeclaration;
|
|
109
111
|
writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
|
|
110
112
|
writeNativeMethodDeclaration(method: Method): void;
|
|
@@ -158,6 +160,8 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
158
160
|
popNamespace(options: {
|
|
159
161
|
ident: boolean;
|
|
160
162
|
}): void;
|
|
163
|
+
instanceOf(value: string, type: idl.IDLType): LanguageExpression;
|
|
164
|
+
discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
|
|
161
165
|
castToInt(value: string, bitness: 8 | 32): string;
|
|
162
166
|
castToBoolean(value: string): string;
|
|
163
167
|
}
|
|
@@ -16,7 +16,7 @@ import * as idl from "../../idl";
|
|
|
16
16
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
17
17
|
import { CJKeywords } from "../../languageSpecificKeywords";
|
|
18
18
|
import { RuntimeType } from "../common";
|
|
19
|
-
import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, MethodModifier, MethodSignature, ReturnStatement } from "../LanguageWriter";
|
|
19
|
+
import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, MethodModifier, MethodSignature, ReturnStatement, } from "../LanguageWriter";
|
|
20
20
|
import { Language } from "../../Language";
|
|
21
21
|
import { indentedBy, isDefined } from "../../util";
|
|
22
22
|
////////////////////////////////////////////////////////////////
|
|
@@ -255,6 +255,9 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
255
255
|
// rework for proper namespace logic
|
|
256
256
|
return this.typeConvertor.convert(type);
|
|
257
257
|
}
|
|
258
|
+
get interopModule() {
|
|
259
|
+
return "Interop";
|
|
260
|
+
}
|
|
258
261
|
writeClass(name, op, superClass, interfaces, generics) {
|
|
259
262
|
let extendsClause = superClass ? `${superClass}` : undefined;
|
|
260
263
|
let implementsClause = interfaces ? `${interfaces.join(' & ')}` : undefined;
|
|
@@ -324,21 +327,6 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
324
327
|
this.writeDeclaration(name, signature, modifiers);
|
|
325
328
|
}
|
|
326
329
|
writeConstructorImplementation(className, signature, op, delegationCall, modifiers) {
|
|
327
|
-
var _a;
|
|
328
|
-
let i = 1;
|
|
329
|
-
while (signature.isArgOptional(signature.args.length - i)) {
|
|
330
|
-
let smallerSignature = signature.args.slice(0, -i);
|
|
331
|
-
this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${smallerSignature.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}) {`);
|
|
332
|
-
this.pushIndent();
|
|
333
|
-
let lessArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => this.escapeKeyword(signature.argName(i))).join(', ');
|
|
334
|
-
for (let idx = 0; idx < i; idx++) {
|
|
335
|
-
lessArgs = lessArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
|
|
336
|
-
}
|
|
337
|
-
this.print(`this(${lessArgs})`);
|
|
338
|
-
this.popIndent();
|
|
339
|
-
this.printer.print(`}`);
|
|
340
|
-
i += 1;
|
|
341
|
-
}
|
|
342
330
|
this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
|
|
343
331
|
this.pushIndent();
|
|
344
332
|
if (delegationCall) {
|
|
@@ -416,6 +404,15 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
416
404
|
this.popIndent();
|
|
417
405
|
this.print('}');
|
|
418
406
|
}
|
|
407
|
+
writeImports(moduleName, importedFeatures, aliases) {
|
|
408
|
+
if (importedFeatures.length !== aliases.length) {
|
|
409
|
+
throw new Error(`Inconsistent imports from ${moduleName}`);
|
|
410
|
+
}
|
|
411
|
+
for (let i = 0; i < importedFeatures.length; i++) {
|
|
412
|
+
const alias = aliases[i] ? ` as ${aliases[i]}` : ``;
|
|
413
|
+
this.writeExpressionStatement(this.makeString(`import ${moduleName}.${importedFeatures[i]}` + alias));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
419
416
|
writeDeclaration(name, signature, modifiers, postfix, generics) {
|
|
420
417
|
let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
|
|
421
418
|
prefix = prefix ? prefix + " " : "public ";
|
|
@@ -574,6 +571,17 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
574
571
|
}
|
|
575
572
|
pushNamespace(namespace, options) { }
|
|
576
573
|
popNamespace(options) { }
|
|
574
|
+
instanceOf(value, type) {
|
|
575
|
+
return this.makeString(`${value} is ${this.getNodeName(type)}`);
|
|
576
|
+
}
|
|
577
|
+
discriminate(value, index, type, runtimeTypes) {
|
|
578
|
+
if (runtimeTypes.includes(RuntimeType.UNDEFINED)) {
|
|
579
|
+
return `${value}.isNone()`;
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
return `${value}.getSelector() == ${index}`;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
577
585
|
castToInt(value, bitness) {
|
|
578
586
|
return `Int${bitness}(${this.escapeKeyword(value)})`;
|
|
579
587
|
}
|
|
@@ -47,6 +47,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
47
47
|
fork(options?: {
|
|
48
48
|
resolver?: ReferenceResolver;
|
|
49
49
|
}): LanguageWriter;
|
|
50
|
+
get interopModule(): string;
|
|
50
51
|
protected writeDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[], postfix?: string): void;
|
|
51
52
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[]): void;
|
|
52
53
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
|
|
@@ -63,6 +64,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
63
64
|
}): void;
|
|
64
65
|
writeTypeDeclaration(decl: IDLTypedef): void;
|
|
65
66
|
writeConstant(constName: string, constType: IDLType, constVal?: string): void;
|
|
67
|
+
writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
66
68
|
/**
|
|
67
69
|
* Writes multiline comments decorated with stars
|
|
68
70
|
*/
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* See the License for the specific language governing permissions and
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
|
-
import { createReferenceType, forceAsNamedNode } from '../../idl';
|
|
15
|
+
import { createReferenceType, forceAsNamedNode, } from '../../idl';
|
|
16
16
|
import { Language } from '../../Language';
|
|
17
17
|
import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
|
|
18
18
|
import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, StringExpression, MethodStaticCallExpression } from "../LanguageWriter";
|
|
@@ -181,6 +181,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
181
181
|
var _a;
|
|
182
182
|
return new CppLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.primitivesTypes);
|
|
183
183
|
}
|
|
184
|
+
get interopModule() {
|
|
185
|
+
throw new Error(`Modules are not supported in C++`);
|
|
186
|
+
}
|
|
184
187
|
writeDeclaration(name, signature, modifiers, postfix) {
|
|
185
188
|
const realName = this.classMode === 'normal' ? name : `${this.currentClass.at(0)}::${name}`;
|
|
186
189
|
const newModifiers = this.classMode === 'normal'
|
|
@@ -253,6 +256,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
253
256
|
writeConstant(constName, constType, constVal) {
|
|
254
257
|
this.print(`${this.getNodeName(constType)} ${constName}${constVal ? ' = ' + constVal : ''};`);
|
|
255
258
|
}
|
|
259
|
+
writeImports(moduleName, importedFeatures, aliases) {
|
|
260
|
+
throw new Error(`Imports are not supported in C++`);
|
|
261
|
+
}
|
|
256
262
|
/**
|
|
257
263
|
* Writes multiline comments decorated with stars
|
|
258
264
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
2
|
-
import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature
|
|
2
|
+
import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature } from "../LanguageWriter";
|
|
3
3
|
import { TSLanguageWriter } from "./TsLanguageWriter";
|
|
4
4
|
import { IDLEnum, IDLType } from '../../idl';
|
|
5
5
|
import { ArgConvertor } from "../ArgConvertors";
|
|
@@ -45,7 +45,6 @@ export declare function makeArrayTypeCheckCall(valueAccessor: string, typeName:
|
|
|
45
45
|
export declare class ETSLanguageWriter extends TSLanguageWriter {
|
|
46
46
|
private arrayConvertor;
|
|
47
47
|
constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, arrayConvertor: IdlNameConvertor);
|
|
48
|
-
pushNamespace(namespace: string, options: NamespaceOptions): void;
|
|
49
48
|
fork(options?: {
|
|
50
49
|
resolver?: ReferenceResolver;
|
|
51
50
|
}): LanguageWriter;
|
|
@@ -175,12 +175,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
175
175
|
super(printer, resolver, typeConvertor, Language.ARKTS);
|
|
176
176
|
this.arrayConvertor = arrayConvertor;
|
|
177
177
|
}
|
|
178
|
-
pushNamespace(namespace, options) {
|
|
179
|
-
if (options.isDefault) {
|
|
180
|
-
this.print(`export default ${namespace}`);
|
|
181
|
-
}
|
|
182
|
-
super.pushNamespace(namespace, options);
|
|
183
|
-
}
|
|
184
178
|
fork(options) {
|
|
185
179
|
var _a;
|
|
186
180
|
return new ETSLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.arrayConvertor);
|
|
@@ -29,6 +29,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
29
29
|
fork(options?: {
|
|
30
30
|
resolver?: ReferenceResolver;
|
|
31
31
|
}): LanguageWriter;
|
|
32
|
+
get interopModule(): string;
|
|
32
33
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
|
|
33
34
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
|
|
34
35
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
@@ -44,6 +45,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
44
45
|
}, initExpr?: LanguageExpression): void;
|
|
45
46
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
46
47
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
48
|
+
writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
47
49
|
makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
|
|
48
50
|
makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
49
51
|
makeReturn(expr: LanguageExpression): LanguageStatement;
|
|
@@ -105,6 +105,9 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
105
105
|
var _a;
|
|
106
106
|
return new JavaLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor);
|
|
107
107
|
}
|
|
108
|
+
get interopModule() {
|
|
109
|
+
return "org.koalaui.interop";
|
|
110
|
+
}
|
|
108
111
|
writeClass(name, op, superClass, interfaces, generics, isDeclared, isExport = true) {
|
|
109
112
|
let genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(', ')}> ` : ``;
|
|
110
113
|
let extendsClause = superClass ? ` extends ${superClass}` : '';
|
|
@@ -179,6 +182,14 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
179
182
|
writeConstant(constName, constType, constVal) {
|
|
180
183
|
throw new Error("writeConstant for Java is not implemented yet.");
|
|
181
184
|
}
|
|
185
|
+
writeImports(moduleName, importedFeatures, aliases) {
|
|
186
|
+
if (importedFeatures.length !== aliases.length) {
|
|
187
|
+
throw new Error(`Inconsistent imports from ${moduleName}`);
|
|
188
|
+
}
|
|
189
|
+
for (let i = 0; i < importedFeatures.length; i++) {
|
|
190
|
+
this.writeExpressionStatement(this.makeString(`import ${moduleName}.${importedFeatures[i]}`));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
182
193
|
makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
|
|
183
194
|
return new JavaAssignStatement(variableName, type, expr, isDeclared, isConst);
|
|
184
195
|
}
|
|
@@ -61,6 +61,8 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
|
|
|
61
61
|
resolver?: ReferenceResolver;
|
|
62
62
|
}): LanguageWriter;
|
|
63
63
|
getNodeName(type: idl.IDLNode): string;
|
|
64
|
+
get interopModule(): string;
|
|
65
|
+
maybeSemicolon(): string;
|
|
64
66
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
|
|
65
67
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
|
|
66
68
|
writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
|
|
@@ -78,6 +80,11 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
|
|
|
78
80
|
private writeDeclaration;
|
|
79
81
|
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
80
82
|
writeNativeMethodDeclaration(method: Method): void;
|
|
83
|
+
private printForeignApiOptIn;
|
|
84
|
+
private get foreignApiOptIn();
|
|
85
|
+
private isPrimitiveArray;
|
|
86
|
+
private pinArrayArgument;
|
|
87
|
+
private unpinArrayArgument;
|
|
81
88
|
private convertInteropArgument;
|
|
82
89
|
private convertInteropReturnValue;
|
|
83
90
|
writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
@@ -94,6 +101,7 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
|
|
|
94
101
|
writeSetterImplementation(method: Method, op: (writer: this) => void): void;
|
|
95
102
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
96
103
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
104
|
+
writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
97
105
|
makeNull(): LanguageExpression;
|
|
98
106
|
makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
99
107
|
makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|