@idlizer/core 2.1.10-arktscgen-4 → 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 +3 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.js +20 -16
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +5 -1
- package/build/lib/src/LanguageWriters/LanguageWriter.js +2 -0
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +1 -3
- 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 +2 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +13 -1
- 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 -3
- 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 +35 -12
- package/build/lib/src/LibraryInterface.d.ts +0 -1
- package/build/lib/src/from-idl/DtsPrinter.js +1 -1
- package/build/lib/src/from-idl/deserialize.js +1 -1
- package/build/lib/src/idl.d.ts +5 -0
- package/build/lib/src/idl.js +19 -1
- package/build/lib/src/index.d.ts +1 -4
- package/build/lib/src/index.js +1 -4
- package/build/lib/src/inheritance.d.ts +0 -2
- package/build/lib/src/inheritance.js +0 -17
- 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 +53 -37
- 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/util.d.ts +5 -39
- package/build/lib/src/util.js +43 -369
- package/package.json +45 -49
|
@@ -26,7 +26,6 @@ export class Language {
|
|
|
26
26
|
static fromString(name) {
|
|
27
27
|
switch (name) {
|
|
28
28
|
case "arkts": return Language.ARKTS;
|
|
29
|
-
case "java": return Language.JAVA;
|
|
30
29
|
case "ts": return Language.TS;
|
|
31
30
|
case "cangjie": return Language.CJ;
|
|
32
31
|
case "cpp": return Language.CPP;
|
|
@@ -37,7 +36,6 @@ export class Language {
|
|
|
37
36
|
}
|
|
38
37
|
Language.TS = new Language("TS", ".ts");
|
|
39
38
|
Language.ARKTS = new Language("ArkTS", ".ts"); // using .ts for ArkTS until we get rit of tsc preprocessing
|
|
40
|
-
Language.JAVA = new Language("Java", ".java");
|
|
41
39
|
Language.CPP = new Language("C++", ".cc");
|
|
42
40
|
Language.CJ = new Language("CangJie", ".cj");
|
|
43
41
|
Language.KOTLIN = new Language("Kotlin", ".kt");
|
|
@@ -6,7 +6,7 @@ import { LibraryInterface } from "../LibraryInterface";
|
|
|
6
6
|
import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
7
7
|
import { PeerLibrary } from "../peer-generation/PeerLibrary";
|
|
8
8
|
import { PeerMethodSignature } from "../peer-generation/PeerMethod";
|
|
9
|
-
export declare function getSerializerName(declaration: idl.IDLEntry): string;
|
|
9
|
+
export declare function getSerializerName(library: LibraryInterface, language: Language, declaration: idl.IDLEntry): string;
|
|
10
10
|
export interface ArgConvertor {
|
|
11
11
|
param: string;
|
|
12
12
|
idlType: idl.IDLType;
|
|
@@ -106,8 +106,9 @@ export declare class NumberConvertor extends BaseArgConvertor {
|
|
|
106
106
|
isPointerType(): boolean;
|
|
107
107
|
}
|
|
108
108
|
export declare class NumericConvertor extends BaseArgConvertor {
|
|
109
|
+
protected library: LibraryInterface;
|
|
109
110
|
private readonly interopNameConvertor;
|
|
110
|
-
constructor(param: string, type: idl.IDLPrimitiveType);
|
|
111
|
+
constructor(library: LibraryInterface, param: string, type: idl.IDLPrimitiveType);
|
|
111
112
|
convertorArg(param: string, writer: LanguageWriter): string;
|
|
112
113
|
convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
|
|
113
114
|
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
@@ -20,14 +20,15 @@ import { generatorConfiguration, generatorTypePrefix } from "../config";
|
|
|
20
20
|
import { capitalize, getExtractor, getTransformer, hashCodeFromString, throwException, warn } from "../util";
|
|
21
21
|
import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
|
|
22
22
|
import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
|
|
23
|
-
import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
24
23
|
import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
|
|
25
|
-
import { qualifiedName } from "../peer-generation/idl/common";
|
|
26
24
|
import { LayoutNodeRole } from "../peer-generation/LayoutManager";
|
|
27
25
|
import { PeerMethodSignature } from "../peer-generation/PeerMethod";
|
|
28
26
|
import { isInExternalModule } from "../peer-generation/modules";
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
import { isTopLevelConflicted } from "../peer-generation/ConflictingDeclarations";
|
|
28
|
+
export function getSerializerName(library, language, declaration) {
|
|
29
|
+
const qualifier = isTopLevelConflicted(library, language, declaration)
|
|
30
|
+
? "package.namespace.name" : "namespace.name";
|
|
31
|
+
return `${idl.getQualifiedName(declaration, qualifier).split('.').join('_')}_serializer`;
|
|
31
32
|
}
|
|
32
33
|
export function isDirectConvertedType(originalType, library) {
|
|
33
34
|
const debug = false;
|
|
@@ -298,10 +299,11 @@ export class NumberConvertor extends BaseArgConvertor {
|
|
|
298
299
|
}
|
|
299
300
|
}
|
|
300
301
|
export class NumericConvertor extends BaseArgConvertor {
|
|
301
|
-
constructor(param, type) {
|
|
302
|
+
constructor(library, param, type) {
|
|
302
303
|
// check numericPrimitiveTypes.include(type)
|
|
303
304
|
super(type, [RuntimeType.NUMBER], false, false, param);
|
|
304
|
-
this.
|
|
305
|
+
this.library = library;
|
|
306
|
+
this.interopNameConvertor = new CppNameConvertor(this.library);
|
|
305
307
|
}
|
|
306
308
|
convertorArg(param, writer) {
|
|
307
309
|
return param;
|
|
@@ -577,12 +579,12 @@ export class InterfaceConvertor extends BaseArgConvertor {
|
|
|
577
579
|
throw new Error("Must never be used");
|
|
578
580
|
}
|
|
579
581
|
convertorSerialize(param, value, writer) {
|
|
580
|
-
const accessor = getSerializerName(this.declaration);
|
|
582
|
+
const accessor = getSerializerName(this.library, writer.language, this.declaration);
|
|
581
583
|
writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
582
584
|
return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(writer.escapeKeyword(value))]));
|
|
583
585
|
}
|
|
584
586
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
585
|
-
const accessor = getSerializerName(this.declaration);
|
|
587
|
+
const accessor = getSerializerName(this.library, writer.language, this.declaration);
|
|
586
588
|
writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
587
589
|
return assigneer(writer.makeStaticMethodCall(accessor, 'read', [writer.makeString(deserializerName)]));
|
|
588
590
|
}
|
|
@@ -888,7 +890,7 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
888
890
|
const bufferType = this.nativeType();
|
|
889
891
|
statements.push(writer.makeAssign(bufferName, bufferType, writer.language === Language.CPP ? undefined : writer.makeNull(this.type), true, false)); // maybe change to generic None
|
|
890
892
|
const thenStatement = new BlockStatement([
|
|
891
|
-
this.typeConvertor.convertorDeserialize(`${bufferName}
|
|
893
|
+
this.typeConvertor.convertorDeserialize(`${bufferName}Opt`, deserializerName, (expr) => {
|
|
892
894
|
const receiver = writer.language === Language.CPP
|
|
893
895
|
? `${bufferName}.value` : bufferName;
|
|
894
896
|
return writer.makeAssign(receiver, undefined, expr, false);
|
|
@@ -1018,10 +1020,10 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
1018
1020
|
this.declaration = declaration;
|
|
1019
1021
|
}
|
|
1020
1022
|
convertorArg(param, writer) {
|
|
1023
|
+
const nameConvertor = this.library.createTypeNameConvertor(Language.CPP);
|
|
1021
1024
|
switch (writer.language) {
|
|
1022
1025
|
case Language.CPP:
|
|
1023
|
-
return `static_cast<${
|
|
1024
|
-
case Language.JAVA:
|
|
1026
|
+
return `static_cast<${nameConvertor.convert(this.declaration)}>(${param})`;
|
|
1025
1027
|
case Language.CJ:
|
|
1026
1028
|
return `MaterializedBase.toPeerPtr(${writer.escapeKeyword(param)})`;
|
|
1027
1029
|
default:
|
|
@@ -1033,12 +1035,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
1033
1035
|
}
|
|
1034
1036
|
}
|
|
1035
1037
|
convertorSerialize(param, value, printer) {
|
|
1036
|
-
const accessorRoot = getSerializerName(this.declaration);
|
|
1038
|
+
const accessorRoot = getSerializerName(this.library, printer.language, this.declaration);
|
|
1037
1039
|
printer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
1038
1040
|
return printer.makeStatement(printer.makeStaticMethodCall(accessorRoot, 'write', [printer.makeString(`${param}Serializer`), printer.makeString(value)]));
|
|
1039
1041
|
}
|
|
1040
1042
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1041
|
-
const accessorRoot = getSerializerName(this.declaration);
|
|
1043
|
+
const accessorRoot = getSerializerName(this.library, writer.language, this.declaration);
|
|
1042
1044
|
writer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
1043
1045
|
const readStatement = writer.makeCast(writer.makeStaticMethodCall(accessorRoot, "read", [writer.makeString(deserializerName)]), this.declaration);
|
|
1044
1046
|
return assigneer(readStatement);
|
|
@@ -1115,8 +1117,10 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1115
1117
|
writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.callSync`), idl.IDLPointerType, { unsafe: true })]))
|
|
1116
1118
|
], false);
|
|
1117
1119
|
}
|
|
1118
|
-
if (this.isTransformed)
|
|
1119
|
-
|
|
1120
|
+
if (this.isTransformed) {
|
|
1121
|
+
const convertor = this.library.createTypeNameConvertor(Language.CPP);
|
|
1122
|
+
value = `CallbackTransformer.transformFrom${convertor.convert(this.decl)}(${value})`;
|
|
1123
|
+
}
|
|
1120
1124
|
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallback`, [writer.makeString(`${value}`)]));
|
|
1121
1125
|
}
|
|
1122
1126
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion = true) {
|
|
@@ -1221,7 +1225,7 @@ function warnCustomObject(type, msg) {
|
|
|
1221
1225
|
}
|
|
1222
1226
|
export const CallbackKind = "CallbackKind";
|
|
1223
1227
|
export function generateCallbackKindName(callback) {
|
|
1224
|
-
return `
|
|
1228
|
+
return `KIND_${callback.name.toUpperCase()}`;
|
|
1225
1229
|
}
|
|
1226
1230
|
export function generateCallbackKindAccess(callback, language) {
|
|
1227
1231
|
const name = generateCallbackKindName(callback);
|
|
@@ -146,7 +146,9 @@ export declare enum FieldModifier {
|
|
|
146
146
|
FINAL = 5,
|
|
147
147
|
VOLATILE = 6,
|
|
148
148
|
INTERNAL = 7,
|
|
149
|
-
OVERRIDE = 8
|
|
149
|
+
OVERRIDE = 8,
|
|
150
|
+
GET = 9,
|
|
151
|
+
SET = 10
|
|
150
152
|
}
|
|
151
153
|
export declare enum MethodModifier {
|
|
152
154
|
PUBLIC = 0,
|
|
@@ -254,6 +256,7 @@ export declare abstract class LanguageWriter {
|
|
|
254
256
|
})[];
|
|
255
257
|
addFeature(node: idl.IDLEntry | idl.IDLReferenceType): void;
|
|
256
258
|
addFeature(feature: string, module: string): void;
|
|
259
|
+
abstract get interopModule(): string;
|
|
257
260
|
abstract writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
|
|
258
261
|
abstract writeEnum(name: string, members: {
|
|
259
262
|
name: string;
|
|
@@ -280,6 +283,7 @@ export declare abstract class LanguageWriter {
|
|
|
280
283
|
}, initExpr?: LanguageExpression): void;
|
|
281
284
|
abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
282
285
|
abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
286
|
+
abstract writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
283
287
|
abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
284
288
|
abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
285
289
|
abstract makeThrowError(message: string): LanguageStatement;
|
|
@@ -307,6 +307,8 @@ export var FieldModifier;
|
|
|
307
307
|
FieldModifier[FieldModifier["VOLATILE"] = 6] = "VOLATILE";
|
|
308
308
|
FieldModifier[FieldModifier["INTERNAL"] = 7] = "INTERNAL";
|
|
309
309
|
FieldModifier[FieldModifier["OVERRIDE"] = 8] = "OVERRIDE";
|
|
310
|
+
FieldModifier[FieldModifier["GET"] = 9] = "GET";
|
|
311
|
+
FieldModifier[FieldModifier["SET"] = 10] = "SET";
|
|
310
312
|
})(FieldModifier || (FieldModifier = {}));
|
|
311
313
|
export var MethodModifier;
|
|
312
314
|
(function (MethodModifier) {
|
|
@@ -32,5 +32,4 @@ export declare class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvert
|
|
|
32
32
|
export declare class CJInteropArgConvertor extends InteropArgConvertor {
|
|
33
33
|
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
34
34
|
}
|
|
35
|
-
export declare function removePoints(s: string): string;
|
|
36
35
|
//# sourceMappingURL=CJConvertors.d.ts.map
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
16
|
import { CJKeywords } from '../../languageSpecificKeywords';
|
|
17
17
|
import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
|
|
18
|
+
import { removePoints } from '../../util';
|
|
18
19
|
import { convertNode, convertType } from '../nameConvertor';
|
|
19
20
|
import { InteropArgConvertor } from './InteropConvertors';
|
|
20
21
|
export class CJTypeNameConvertor {
|
|
@@ -199,7 +200,4 @@ export class CJInteropArgConvertor extends InteropArgConvertor {
|
|
|
199
200
|
return super.convertPrimitiveType(type);
|
|
200
201
|
}
|
|
201
202
|
}
|
|
202
|
-
export function removePoints(s) {
|
|
203
|
-
return s.split(/[\.\-]/g).join('_');
|
|
204
|
-
}
|
|
205
203
|
//# sourceMappingURL=CJConvertors.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as idl from '../../idl';
|
|
2
2
|
import { IdlNameConvertor, NodeConvertor, TypeConvertor } from "../nameConvertor";
|
|
3
3
|
import { InteropArgConvertor } from './InteropConvertors';
|
|
4
|
-
import {
|
|
4
|
+
import { LibraryInterface } from '../../LibraryInterface';
|
|
5
5
|
export interface ConvertResult {
|
|
6
6
|
text: string;
|
|
7
7
|
noPrefix: boolean;
|
|
8
8
|
resolvedType: idl.IDLType;
|
|
9
9
|
}
|
|
10
10
|
export declare class GenericCppConvertor implements NodeConvertor<ConvertResult> {
|
|
11
|
-
protected
|
|
12
|
-
constructor(
|
|
11
|
+
protected library: LibraryInterface;
|
|
12
|
+
constructor(library: LibraryInterface);
|
|
13
13
|
private make;
|
|
14
14
|
convertNode(node: idl.IDLNode): ConvertResult;
|
|
15
15
|
convertNamespace(node: idl.IDLNamespace): ConvertResult;
|
|
@@ -36,9 +36,9 @@ export declare class CppConvertor extends GenericCppConvertor implements IdlName
|
|
|
36
36
|
convert(node: idl.IDLNode): string;
|
|
37
37
|
}
|
|
38
38
|
export declare class CppNameConvertor implements IdlNameConvertor {
|
|
39
|
-
protected
|
|
39
|
+
protected library: LibraryInterface;
|
|
40
40
|
private readonly cppConvertor;
|
|
41
|
-
constructor(
|
|
41
|
+
constructor(library: LibraryInterface);
|
|
42
42
|
convert(node: idl.IDLNode): string;
|
|
43
43
|
}
|
|
44
44
|
export declare class CppInteropArgConvertor extends InteropArgConvertor {
|
|
@@ -47,9 +47,9 @@ export declare class CppInteropArgConvertor extends InteropArgConvertor {
|
|
|
47
47
|
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
48
48
|
}
|
|
49
49
|
export declare class CppReturnTypeConvertor implements TypeConvertor<string> {
|
|
50
|
-
private
|
|
50
|
+
private library;
|
|
51
51
|
private convertor;
|
|
52
|
-
constructor(
|
|
52
|
+
constructor(library: LibraryInterface);
|
|
53
53
|
isVoid(returnType: idl.IDLType): boolean;
|
|
54
54
|
convert(type: idl.IDLType): string;
|
|
55
55
|
convertContainer(type: idl.IDLContainerType): string;
|
|
@@ -13,18 +13,30 @@
|
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
|
-
import { generatorConfiguration
|
|
16
|
+
import { generatorConfiguration } from "../../config";
|
|
17
17
|
import { convertNode, convertType } from "../nameConvertor";
|
|
18
18
|
import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
|
|
19
19
|
import { InteropArgConvertor } from './InteropConvertors';
|
|
20
20
|
import { maybeTransformManagedCallback } from '../ArgConvertors';
|
|
21
21
|
import { qualifiedName } from '../../peer-generation/idl/common';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
22
|
+
import { isInIdlizeInternal } from '../../idl';
|
|
23
|
+
import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
|
|
24
|
+
import { Language } from '../../Language';
|
|
25
|
+
function isSubtypeTopLevelConflicted(library, node) {
|
|
26
|
+
let hasConflicts = false;
|
|
27
|
+
idl.forEachChild(node, (child) => {
|
|
28
|
+
if (idl.isReferenceType(child)) {
|
|
29
|
+
const decl = library.resolveTypeReference(child);
|
|
30
|
+
if (decl) {
|
|
31
|
+
hasConflicts || (hasConflicts = isTopLevelConflicted(library, Language.CPP, decl));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return hasConflicts;
|
|
36
|
+
}
|
|
25
37
|
export class GenericCppConvertor {
|
|
26
|
-
constructor(
|
|
27
|
-
this.
|
|
38
|
+
constructor(library) {
|
|
39
|
+
this.library = library;
|
|
28
40
|
}
|
|
29
41
|
make(text, resolvedType, noPrefix = false) {
|
|
30
42
|
return { text, noPrefix, resolvedType };
|
|
@@ -78,6 +90,12 @@ export class GenericCppConvertor {
|
|
|
78
90
|
return this.make(prefix + converted.text, type, true);
|
|
79
91
|
}
|
|
80
92
|
convertUnion(type) {
|
|
93
|
+
if (isSubtypeTopLevelConflicted(this.library, type)) {
|
|
94
|
+
if (type.parent && idl.isTypedef(type.parent)) {
|
|
95
|
+
return this.make(type.parent.name, type, false);
|
|
96
|
+
}
|
|
97
|
+
return this.make('Union_' + type.types.map(it => convertType(this, it).text).join("_"), type, false);
|
|
98
|
+
}
|
|
81
99
|
return this.make(type.name, type, false);
|
|
82
100
|
}
|
|
83
101
|
convertContainer(type) {
|
|
@@ -108,14 +126,11 @@ export class GenericCppConvertor {
|
|
|
108
126
|
if (generatorConfiguration().parameterized.includes(refName)) {
|
|
109
127
|
return this.make('CustomObject', idl.IDLCustomObjectType);
|
|
110
128
|
}
|
|
111
|
-
let decl = this.
|
|
129
|
+
let decl = this.library.toDeclaration(type);
|
|
112
130
|
if (idl.isCallback(decl)) {
|
|
113
|
-
decl = (_a = maybeTransformManagedCallback(decl, this.
|
|
131
|
+
decl = (_a = maybeTransformManagedCallback(decl, this.library)) !== null && _a !== void 0 ? _a : decl;
|
|
114
132
|
}
|
|
115
133
|
if (idl.isType(decl)) {
|
|
116
|
-
if (idl.isReferenceType(decl)) {
|
|
117
|
-
return this.make(`${capitalize(decl.name)}`, decl);
|
|
118
|
-
}
|
|
119
134
|
return this.convertNode(decl);
|
|
120
135
|
}
|
|
121
136
|
let res = this.convertNode(decl);
|
|
@@ -159,6 +174,9 @@ export class GenericCppConvertor {
|
|
|
159
174
|
throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
|
|
160
175
|
}
|
|
161
176
|
qualifiedName(target) {
|
|
177
|
+
if (idl.isEntry(target) && isTopLevelConflicted(this.library, Language.CPP, target)) {
|
|
178
|
+
return qualifiedName(target, "_", "package.namespace.name");
|
|
179
|
+
}
|
|
162
180
|
return qualifiedName(target, "_", "namespace.name");
|
|
163
181
|
}
|
|
164
182
|
computeTargetTypeLiteralName(decl) {
|
|
@@ -188,10 +206,10 @@ export class CppConvertor extends GenericCppConvertor {
|
|
|
188
206
|
isPrimitiveOrPrimitiveAlias(type) {
|
|
189
207
|
if (!idl.isType(type))
|
|
190
208
|
return false;
|
|
191
|
-
const {
|
|
209
|
+
const { library } = this;
|
|
192
210
|
const seen = new Set;
|
|
193
211
|
while (type && idl.isReferenceType(type)) {
|
|
194
|
-
const resolved =
|
|
212
|
+
const resolved = library.resolveTypeReference(type);
|
|
195
213
|
if (!resolved)
|
|
196
214
|
return false;
|
|
197
215
|
if (!idl.isTypedef(resolved))
|
|
@@ -208,9 +226,9 @@ export class CppConvertor extends GenericCppConvertor {
|
|
|
208
226
|
}
|
|
209
227
|
}
|
|
210
228
|
export class CppNameConvertor {
|
|
211
|
-
constructor(
|
|
212
|
-
this.
|
|
213
|
-
this.cppConvertor = new GenericCppConvertor(
|
|
229
|
+
constructor(library) {
|
|
230
|
+
this.library = library;
|
|
231
|
+
this.cppConvertor = new GenericCppConvertor(library);
|
|
214
232
|
}
|
|
215
233
|
convert(node) {
|
|
216
234
|
return this.cppConvertor.convertNode(node).text;
|
|
@@ -236,9 +254,9 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
|
|
|
236
254
|
}
|
|
237
255
|
CppInteropArgConvertor.INSTANCE = new CppInteropArgConvertor();
|
|
238
256
|
export class CppReturnTypeConvertor {
|
|
239
|
-
constructor(
|
|
240
|
-
this.
|
|
241
|
-
this.convertor = new CppConvertor(
|
|
257
|
+
constructor(library) {
|
|
258
|
+
this.library = library;
|
|
259
|
+
this.convertor = new CppConvertor(library);
|
|
242
260
|
}
|
|
243
261
|
isVoid(returnType) {
|
|
244
262
|
return this.convert(returnType) == 'void';
|
|
@@ -271,10 +289,6 @@ export class CppReturnTypeConvertor {
|
|
|
271
289
|
return this.convertor.convert(type);
|
|
272
290
|
}
|
|
273
291
|
convertTypeReference(type) {
|
|
274
|
-
const decl = this.resolver.resolveTypeReference(type);
|
|
275
|
-
if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
|
|
276
|
-
return generatorTypePrefix() + qualifiedName(decl, "_", "namespace.name");
|
|
277
|
-
}
|
|
278
292
|
return this.convertor.convert(type);
|
|
279
293
|
}
|
|
280
294
|
convertUnion(type) {
|
|
@@ -16,7 +16,7 @@ import * as idl from '../../idl';
|
|
|
16
16
|
import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
|
|
17
17
|
import { isMaterialized } from '../../peer-generation/isMaterialized';
|
|
18
18
|
import { convertNode, convertType } from '../nameConvertor';
|
|
19
|
-
import { removePoints } from '
|
|
19
|
+
import { removePoints } from '../../util';
|
|
20
20
|
import { InteropReturnTypeConvertor } from './InteropConvertors';
|
|
21
21
|
export class KotlinTypeNameConvertor {
|
|
22
22
|
constructor(resolver) {
|
|
@@ -55,6 +55,11 @@ export class KotlinTypeNameConvertor {
|
|
|
55
55
|
}
|
|
56
56
|
convertContainer(type) {
|
|
57
57
|
if (idl.IDLContainerUtils.isSequence(type)) {
|
|
58
|
+
switch (type.elementType[0]) {
|
|
59
|
+
case idl.IDLU8Type: return "UByteArray";
|
|
60
|
+
case idl.IDLI32Type: return "IntArray";
|
|
61
|
+
case idl.IDLF32Type: return "FloatArray";
|
|
62
|
+
}
|
|
58
63
|
return `ArrayList<${convertType(this, type.elementType[0])}>`;
|
|
59
64
|
}
|
|
60
65
|
if (idl.IDLContainerUtils.isRecord(type)) {
|
|
@@ -93,7 +98,7 @@ export class KotlinTypeNameConvertor {
|
|
|
93
98
|
case idl.IDLUnknownType:
|
|
94
99
|
case idl.IDLCustomObjectType: return 'Any';
|
|
95
100
|
case idl.IDLThisType: return 'this';
|
|
96
|
-
case idl.IDLObjectType: return '
|
|
101
|
+
case idl.IDLObjectType: return 'Any';
|
|
97
102
|
case idl.IDLAnyType: return 'Any';
|
|
98
103
|
case idl.IDLUndefinedType: return 'Nothing?';
|
|
99
104
|
case idl.IDLPointerType: return 'KPointer';
|
|
@@ -135,7 +140,6 @@ const KLong = "KLong";
|
|
|
135
140
|
const KFloat = "KFloat";
|
|
136
141
|
const KDouble = "KDouble";
|
|
137
142
|
const KNativePointer = "KNativePointer";
|
|
138
|
-
const KInteropNumber = "KInteropNumber";
|
|
139
143
|
const KStringPtr = "KStringPtr";
|
|
140
144
|
const KInteropReturnBuffer = "KInteropReturnBuffer";
|
|
141
145
|
const KInteropBuffer = "KInteropBuffer";
|
|
@@ -154,7 +158,7 @@ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConverto
|
|
|
154
158
|
case idl.IDLF16Type:
|
|
155
159
|
case idl.IDLF32Type:
|
|
156
160
|
case idl.IDLF64Type: return KInt;
|
|
157
|
-
case idl.IDLNumberType: return
|
|
161
|
+
case idl.IDLNumberType: return KDouble;
|
|
158
162
|
case idl.IDLBooleanType: return KBoolean;
|
|
159
163
|
case idl.IDLBigintType: return KLong;
|
|
160
164
|
case idl.IDLAnyType:
|
|
@@ -218,7 +222,7 @@ export class KotlinCInteropArgConvertor {
|
|
|
218
222
|
case idl.IDLU32Type: return KInt;
|
|
219
223
|
case idl.IDLF32Type: return KFloat;
|
|
220
224
|
case idl.IDLF64Type: return KDouble;
|
|
221
|
-
case idl.IDLNumberType: return
|
|
225
|
+
case idl.IDLNumberType: return KDouble;
|
|
222
226
|
case idl.IDLBigintType: return KLong;
|
|
223
227
|
case idl.IDLSerializerBuffer: return KSerializerBuffer;
|
|
224
228
|
case idl.IDLBooleanType:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as idl from '../../idl';
|
|
2
|
-
import {
|
|
2
|
+
import { LibraryInterface } from '../../LibraryInterface';
|
|
3
3
|
import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
|
|
4
4
|
export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
|
|
5
|
-
protected
|
|
6
|
-
constructor(
|
|
5
|
+
protected library: LibraryInterface;
|
|
6
|
+
constructor(library: LibraryInterface);
|
|
7
|
+
protected mangleTopLevel(decl: idl.IDLEntry): string | undefined;
|
|
7
8
|
convert(node: idl.IDLNode): string;
|
|
8
9
|
convertNamespace(node: idl.IDLNamespace): string;
|
|
9
10
|
convertInterface(node: idl.IDLInterface): string;
|
|
@@ -22,7 +23,6 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
|
|
|
22
23
|
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
23
24
|
protected processTupleType(idlProperty: idl.IDLProperty): idl.IDLProperty;
|
|
24
25
|
protected createTypeSubstitution(parameters: string[] | undefined, args: idl.IDLType[] | undefined): Map<string, idl.IDLType>;
|
|
25
|
-
protected applySubstitution(subst: Map<string, idl.IDLType>, type: idl.IDLType): idl.IDLType;
|
|
26
26
|
protected mapCallback(decl: idl.IDLCallback, args?: idl.IDLType[]): string;
|
|
27
27
|
protected productType(decl: idl.IDLInterface, args: idl.IDLType[] | undefined, isTuple: boolean, includeFieldNames: boolean): string;
|
|
28
28
|
protected mapFunctionType(typeArgs: string[]): string;
|
|
@@ -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
|