@idlizer/core 2.1.5 → 2.1.9-arktscgen-4
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 -0
- package/build/lib/src/Language.d.ts +1 -0
- package/build/lib/src/Language.js +3 -0
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +18 -4
- package/build/lib/src/LanguageWriters/ArgConvertors.js +162 -26
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +38 -8
- package/build/lib/src/LanguageWriters/LanguageWriter.js +46 -4
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +1 -0
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +37 -14
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +1 -0
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +55 -54
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +1 -1
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +1 -0
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.d.ts +24 -0
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.js +69 -0
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +25 -0
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +128 -0
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +44 -9
- package/build/lib/src/LanguageWriters/index.js +4 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +12 -7
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +43 -27
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +11 -2
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +43 -10
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +5 -2
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +45 -11
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -2
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +3 -3
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +149 -0
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +495 -0
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +8 -5
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +17 -13
- package/build/lib/src/LibraryInterface.d.ts +2 -0
- package/build/lib/src/config.d.ts +673 -44
- package/build/lib/src/config.js +20 -0
- package/build/lib/src/configDescriber.d.ts +2 -2
- package/build/lib/src/configDescriber.js +3 -3
- package/build/lib/src/from-idl/DtsPrinter.js +12 -8
- package/build/lib/src/from-idl/IDLLinter.d.ts +0 -1
- package/build/lib/src/from-idl/IDLLinter.js +1 -7
- package/build/lib/src/from-idl/deserialize.d.ts +7 -1
- package/build/lib/src/from-idl/deserialize.js +72 -40
- package/build/lib/src/idl.d.ts +8 -15
- package/build/lib/src/idl.js +69 -72
- package/build/lib/src/idlize.js +2 -0
- package/build/lib/src/index.d.ts +2 -0
- package/build/lib/src/index.js +2 -0
- package/build/lib/src/peer-generation/LayoutManager.d.ts +4 -1
- package/build/lib/src/peer-generation/LayoutManager.js +5 -1
- package/build/lib/src/peer-generation/Materialized.d.ts +7 -3
- package/build/lib/src/peer-generation/Materialized.js +18 -4
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +5 -2
- package/build/lib/src/peer-generation/PeerLibrary.js +30 -10
- package/build/lib/src/peer-generation/PeerMethod.d.ts +1 -1
- package/build/lib/src/peer-generation/getSuperType.d.ts +5 -0
- package/build/lib/src/peer-generation/getSuperType.js +55 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +4 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +7 -0
- package/build/lib/src/peer-generation/idl/common.d.ts +1 -0
- package/build/lib/src/peer-generation/idl/common.js +9 -3
- package/build/lib/src/peer-generation/isExternalType.d.ts +4 -0
- package/build/lib/src/peer-generation/isExternalType.js +15 -0
- package/build/lib/src/peer-generation/isMaterialized.js +18 -6
- package/build/lib/src/peer-generation/unions.js +1 -1
- package/build/lib/src/util.d.ts +4 -1
- package/build/lib/src/util.js +25 -10
- package/build/lib/src/visitor.d.ts +2 -0
- package/build/lib/src/visitor.js +108 -1
- package/package.json +2 -2
- package/webidl2.js/dist/webidl2.js +62 -16
- package/webidl2.js/LICENSE +0 -21
- package/webidl2.js/README.md +0 -827
- package/webidl2.js/dist/package.json +0 -3
|
@@ -0,0 +1,128 @@
|
|
|
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
|
+
*/
|
|
15
|
+
import * as idl from '../../idl';
|
|
16
|
+
import { convertNode, convertType } from '../nameConvertor';
|
|
17
|
+
export class KotlinTypeNameConvertor {
|
|
18
|
+
constructor(resolver) {
|
|
19
|
+
this.resolver = resolver;
|
|
20
|
+
}
|
|
21
|
+
convert(node) {
|
|
22
|
+
return convertNode(this, node);
|
|
23
|
+
}
|
|
24
|
+
convertNamespace(node) {
|
|
25
|
+
return node.name;
|
|
26
|
+
}
|
|
27
|
+
convertInterface(node) {
|
|
28
|
+
return node.name;
|
|
29
|
+
}
|
|
30
|
+
convertEnum(node) {
|
|
31
|
+
return node.name;
|
|
32
|
+
}
|
|
33
|
+
convertTypedef(node) {
|
|
34
|
+
return node.name;
|
|
35
|
+
}
|
|
36
|
+
convertCallback(node) {
|
|
37
|
+
const params = node.parameters.map(it => `${it.name}: ${this.convert(it.type)}${it.isOptional ? "?" : ""}`);
|
|
38
|
+
return `(${params.join(", ")}) -> ${this.convert(node.returnType)}`;
|
|
39
|
+
}
|
|
40
|
+
convertMethod(node) {
|
|
41
|
+
return node.name;
|
|
42
|
+
}
|
|
43
|
+
convertConstant(node) {
|
|
44
|
+
return node.name;
|
|
45
|
+
}
|
|
46
|
+
convertOptional(type) {
|
|
47
|
+
return `${this.convert(type.type)}?`;
|
|
48
|
+
}
|
|
49
|
+
convertUnion(type) {
|
|
50
|
+
return type.name;
|
|
51
|
+
}
|
|
52
|
+
convertContainer(type) {
|
|
53
|
+
if (idl.IDLContainerUtils.isSequence(type)) {
|
|
54
|
+
return `Array<${convertType(this, type.elementType[0])}>`;
|
|
55
|
+
}
|
|
56
|
+
if (idl.IDLContainerUtils.isRecord(type)) {
|
|
57
|
+
const stringes = type.elementType.slice(0, 2).map(it => convertType(this, it));
|
|
58
|
+
return `Map<${stringes[0]}, ${stringes[1]}>`;
|
|
59
|
+
}
|
|
60
|
+
if (idl.IDLContainerUtils.isPromise(type)) {
|
|
61
|
+
return `Any`;
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`IDL type ${idl.DebugUtils.debugPrintType(type)} not supported`);
|
|
64
|
+
}
|
|
65
|
+
convertImport(type) {
|
|
66
|
+
throw new Error("Not implemented");
|
|
67
|
+
}
|
|
68
|
+
convertTypeReferenceAsImport(type, importClause) {
|
|
69
|
+
throw new Error("Not implemented");
|
|
70
|
+
}
|
|
71
|
+
convertTypeReference(type) {
|
|
72
|
+
const decl = this.resolver.resolveTypeReference(type);
|
|
73
|
+
if (decl && idl.isSyntheticEntry(decl)) {
|
|
74
|
+
if (idl.isCallback(decl)) {
|
|
75
|
+
return this.callbackType(decl);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (decl) {
|
|
79
|
+
return decl.name;
|
|
80
|
+
}
|
|
81
|
+
return this.convert(idl.IDLCustomObjectType);
|
|
82
|
+
}
|
|
83
|
+
convertTypeParameter(type) {
|
|
84
|
+
return type.name;
|
|
85
|
+
}
|
|
86
|
+
convertPrimitiveType(type) {
|
|
87
|
+
switch (type) {
|
|
88
|
+
case idl.IDLFunctionType: return 'Function';
|
|
89
|
+
case idl.IDLUnknownType:
|
|
90
|
+
case idl.IDLCustomObjectType: return 'Any';
|
|
91
|
+
case idl.IDLThisType: return 'this';
|
|
92
|
+
case idl.IDLObjectType: return 'Object';
|
|
93
|
+
case idl.IDLAnyType: return 'Any';
|
|
94
|
+
case idl.IDLUndefinedType: return 'Nothing?';
|
|
95
|
+
case idl.IDLPointerType: return 'KPointer';
|
|
96
|
+
case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
|
|
97
|
+
case idl.IDLVoidType: return 'Unit';
|
|
98
|
+
case idl.IDLBooleanType: return 'Boolean';
|
|
99
|
+
case idl.IDLI8Type: return 'Byte';
|
|
100
|
+
case idl.IDLU8Type: return 'UByte';
|
|
101
|
+
case idl.IDLI16Type: return 'Short';
|
|
102
|
+
case idl.IDLU16Type: return 'UShort';
|
|
103
|
+
case idl.IDLI32Type: return 'Int';
|
|
104
|
+
case idl.IDLU32Type: return 'UInt';
|
|
105
|
+
case idl.IDLI64Type: return 'Long';
|
|
106
|
+
case idl.IDLU64Type: return 'ULong';
|
|
107
|
+
case idl.IDLF32Type: return 'Float';
|
|
108
|
+
case idl.IDLF64Type: return 'Double';
|
|
109
|
+
case idl.IDLNumberType: return 'Double';
|
|
110
|
+
case idl.IDLBigintType:
|
|
111
|
+
return 'BigInteger'; // relies on import java.math.BigInteger
|
|
112
|
+
case idl.IDLStringType:
|
|
113
|
+
return 'String';
|
|
114
|
+
case idl.IDLDate:
|
|
115
|
+
return 'Date';
|
|
116
|
+
case idl.IDLBufferType:
|
|
117
|
+
return 'NativeBuffer';
|
|
118
|
+
case idl.IDLInteropReturnBufferType:
|
|
119
|
+
return `KInteropReturnBuffer`;
|
|
120
|
+
}
|
|
121
|
+
throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
|
|
122
|
+
}
|
|
123
|
+
callbackType(decl) {
|
|
124
|
+
const params = decl.parameters.map(it => `${it.name}: ${this.convert(it.type)}`);
|
|
125
|
+
return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=KotlinConvertors.js.map
|
|
@@ -21,8 +21,10 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
|
|
|
21
21
|
convertTypeParameter(type: idl.IDLTypeParameterType): string;
|
|
22
22
|
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|
|
23
23
|
protected processTupleType(idlProperty: idl.IDLProperty): idl.IDLProperty;
|
|
24
|
-
protected
|
|
25
|
-
protected
|
|
24
|
+
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
|
+
protected mapCallback(decl: idl.IDLCallback, args?: idl.IDLType[]): string;
|
|
27
|
+
protected productType(decl: idl.IDLInterface, args: idl.IDLType[] | undefined, isTuple: boolean, includeFieldNames: boolean): string;
|
|
26
28
|
protected mapFunctionType(typeArgs: string[]): string;
|
|
27
29
|
}
|
|
28
30
|
export declare class TSInteropArgConvertor implements TypeConvertor<string> {
|
|
@@ -88,19 +88,16 @@ export class TSTypeNameConvertor {
|
|
|
88
88
|
}
|
|
89
89
|
convertTypeReference(type) {
|
|
90
90
|
var _a, _b;
|
|
91
|
-
if (type.name === idl.IDLObjectType.name) {
|
|
92
|
-
return type.name;
|
|
93
|
-
}
|
|
94
91
|
let decl = this.resolver.resolveTypeReference(type);
|
|
95
92
|
if (decl) {
|
|
96
93
|
if (idl.isSyntheticEntry(decl)) {
|
|
97
94
|
if (idl.isCallback(decl)) {
|
|
98
|
-
return this.mapCallback(decl);
|
|
95
|
+
return this.mapCallback(decl, type.typeArguments);
|
|
99
96
|
}
|
|
100
97
|
const entity = idl.getExtAttribute(decl, idl.IDLExtendedAttributes.Entity);
|
|
101
98
|
if (entity) {
|
|
102
99
|
const isTuple = entity === idl.IDLEntity.Tuple;
|
|
103
|
-
return this.productType(decl, isTuple, !isTuple);
|
|
100
|
+
return this.productType(decl, type.typeArguments, isTuple, !isTuple);
|
|
104
101
|
}
|
|
105
102
|
}
|
|
106
103
|
// FIXME: isEnumMember is not TYPE!
|
|
@@ -133,8 +130,9 @@ export class TSTypeNameConvertor {
|
|
|
133
130
|
switch (type) {
|
|
134
131
|
case idl.IDLFunctionType: return 'Function';
|
|
135
132
|
case idl.IDLUnknownType:
|
|
136
|
-
case idl.IDLCustomObjectType: return '
|
|
133
|
+
case idl.IDLCustomObjectType: return 'any';
|
|
137
134
|
case idl.IDLThisType: return 'this';
|
|
135
|
+
case idl.IDLObjectType: return 'Object';
|
|
138
136
|
case idl.IDLAnyType: return 'any';
|
|
139
137
|
case idl.IDLUndefinedType: return 'undefined';
|
|
140
138
|
case idl.IDLPointerType: return 'KPointer';
|
|
@@ -171,13 +169,50 @@ export class TSTypeNameConvertor {
|
|
|
171
169
|
processTupleType(idlProperty) {
|
|
172
170
|
return idlProperty;
|
|
173
171
|
}
|
|
174
|
-
|
|
175
|
-
const
|
|
172
|
+
createTypeSubstitution(parameters, args) {
|
|
173
|
+
const subst = new Map();
|
|
174
|
+
if (args && parameters) {
|
|
175
|
+
for (let i = 0; i < args.length && i < parameters.length; ++i) {
|
|
176
|
+
subst.set(parameters[i], args[i]);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return subst;
|
|
180
|
+
}
|
|
181
|
+
applySubstitution(subst, type) {
|
|
182
|
+
var _a;
|
|
183
|
+
if (idl.isContainerType(type)) {
|
|
184
|
+
return idl.createContainerType(type.containerKind, type.elementType.map(it => this.applySubstitution(subst, it)));
|
|
185
|
+
}
|
|
186
|
+
if (idl.isReferenceType(type)) {
|
|
187
|
+
return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.applySubstitution(subst, it)));
|
|
188
|
+
}
|
|
189
|
+
if (idl.isTypeParameterType(type)) {
|
|
190
|
+
const record = subst.get(type.name);
|
|
191
|
+
if (record) {
|
|
192
|
+
return record;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return type;
|
|
196
|
+
}
|
|
197
|
+
mapCallback(decl, args) {
|
|
198
|
+
const subst = this.createTypeSubstitution(decl.typeParameters, args);
|
|
199
|
+
const parameters = decl.parameters.map(it => {
|
|
200
|
+
const param = idl.clone(it);
|
|
201
|
+
param.type = this.applySubstitution(subst, param.type);
|
|
202
|
+
return param;
|
|
203
|
+
});
|
|
204
|
+
const params = parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}${it.isVariadic ? "[]" : ""}`);
|
|
176
205
|
return `((${params.join(", ")}) => ${this.convert(decl.returnType)})`;
|
|
177
206
|
}
|
|
178
|
-
productType(decl, isTuple, includeFieldNames) {
|
|
207
|
+
productType(decl, args, isTuple, includeFieldNames) {
|
|
208
|
+
const subst = this.createTypeSubstitution(decl.typeParameters, args);
|
|
179
209
|
const name = `${isTuple ? "[" : "{"} ${decl.properties
|
|
180
210
|
.map(it => isTuple ? this.processTupleType(it) : it)
|
|
211
|
+
.map(it => {
|
|
212
|
+
const prop = idl.clone(it);
|
|
213
|
+
prop.type = this.applySubstitution(subst, prop.type);
|
|
214
|
+
return prop;
|
|
215
|
+
})
|
|
181
216
|
.map(it => {
|
|
182
217
|
const type = this.convert(it.type);
|
|
183
218
|
return it.isOptional
|
|
@@ -6,11 +6,13 @@ import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameCon
|
|
|
6
6
|
import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
|
|
7
7
|
import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
|
|
8
8
|
import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
|
|
9
|
+
import { KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
|
|
9
10
|
import { TSInteropArgConvertor, TSTypeNameConvertor } from "./convertors/TSConvertors";
|
|
10
11
|
import { CJLanguageWriter } from "./writers/CJLanguageWriter";
|
|
11
12
|
import { CppLanguageWriter } from "./writers/CppLanguageWriter";
|
|
12
13
|
import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
|
|
13
14
|
import { JavaLanguageWriter } from "./writers/JavaLanguageWriter";
|
|
15
|
+
import { KotlinLanguageWriter } from "./writers/KotlinLanguageWriter";
|
|
14
16
|
import { TSLanguageWriter } from "./writers/TsLanguageWriter";
|
|
15
17
|
export * from "./nameConvertor";
|
|
16
18
|
export function createLanguageWriter(language, resolver) {
|
|
@@ -22,6 +24,7 @@ export function createLanguageWriter(language, resolver) {
|
|
|
22
24
|
case Language.JAVA: return new JavaLanguageWriter(printer, resolver, new JavaTypeNameConvertor(resolver));
|
|
23
25
|
case Language.CPP: return new CppLanguageWriter(printer, resolver, new CppConvertor(resolver), PrimitiveTypesInstance);
|
|
24
26
|
case Language.CJ: return new CJLanguageWriter(printer, resolver, new CJTypeNameConvertor(resolver), new CJIDLTypeToForeignStringConvertor(resolver));
|
|
27
|
+
case Language.KOTLIN: return new KotlinLanguageWriter(printer, resolver, new KotlinTypeNameConvertor(resolver));
|
|
25
28
|
default: throw new Error(`Language ${language.toString()} is not supported`);
|
|
26
29
|
}
|
|
27
30
|
}
|
|
@@ -32,6 +35,7 @@ export function createInteropArgConvertor(language) {
|
|
|
32
35
|
case Language.CPP: return CppInteropArgConvertor.INSTANCE;
|
|
33
36
|
case Language.JAVA: return new JavaInteropArgConvertor();
|
|
34
37
|
case Language.CJ: return new CJInteropArgConvertor();
|
|
38
|
+
case Language.KOTLIN: return new CJInteropArgConvertor();
|
|
35
39
|
}
|
|
36
40
|
throw new Error(`InteropArgConvertor for language ${language} not implemented`);
|
|
37
41
|
}
|
|
@@ -2,7 +2,7 @@ import * as idl from "../../idl";
|
|
|
2
2
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
3
3
|
import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
|
|
4
4
|
import { RuntimeType } from "../common";
|
|
5
|
-
import { AssignStatement,
|
|
5
|
+
import { AssignStatement, DelegationCall, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
|
|
6
6
|
import { IdlNameConvertor } from "../nameConvertor";
|
|
7
7
|
import { Language } from "../../Language";
|
|
8
8
|
import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
|
|
@@ -26,11 +26,11 @@ export declare class CJUnionCastExpression implements LanguageExpression {
|
|
|
26
26
|
asString(): string;
|
|
27
27
|
}
|
|
28
28
|
export declare class CJMatchExpression implements LanguageExpression {
|
|
29
|
-
matchValue:
|
|
29
|
+
matchValue: string;
|
|
30
30
|
matchCases: LanguageExpression[];
|
|
31
31
|
caseBlocks: LanguageExpression[];
|
|
32
32
|
indentDepth?: number | undefined;
|
|
33
|
-
constructor(matchValue:
|
|
33
|
+
constructor(matchValue: string, matchCases: LanguageExpression[], caseBlocks: LanguageExpression[], indentDepth?: number | undefined);
|
|
34
34
|
asString(): string;
|
|
35
35
|
}
|
|
36
36
|
export declare class CJTernaryExpression implements LanguageExpression {
|
|
@@ -91,7 +91,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
91
91
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
92
92
|
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
93
93
|
writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
94
|
-
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void,
|
|
94
|
+
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, delegationCall?: DelegationCall, modifiers?: MethodModifier[]): void;
|
|
95
95
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
96
96
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
97
97
|
writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
@@ -132,7 +132,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
132
132
|
typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
|
|
133
133
|
getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
|
|
134
134
|
makeUndefined(): LanguageExpression;
|
|
135
|
-
makeUnwrapOptional(expression:
|
|
135
|
+
makeUnwrapOptional(expression: LanguageExpression): LanguageExpression;
|
|
136
136
|
makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
|
|
137
137
|
makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
138
138
|
protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
|
|
@@ -155,8 +155,13 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
155
155
|
makeEquals(args: LanguageExpression[]): LanguageExpression;
|
|
156
156
|
runtimeType(param: ArgConvertor, valueType: string, value: string): void;
|
|
157
157
|
escapeKeyword(word: string): string;
|
|
158
|
-
pushNamespace(namespace: string,
|
|
159
|
-
|
|
158
|
+
pushNamespace(namespace: string, options: {
|
|
159
|
+
ident: boolean;
|
|
160
|
+
isDeclared?: boolean;
|
|
161
|
+
}): void;
|
|
162
|
+
popNamespace(options: {
|
|
163
|
+
ident: boolean;
|
|
164
|
+
}): void;
|
|
160
165
|
castToInt(value: string, bitness: 8 | 32): string;
|
|
161
166
|
castToBoolean(value: string): string;
|
|
162
167
|
}
|
|
@@ -31,7 +31,7 @@ class CJLambdaExpression extends LambdaExpression {
|
|
|
31
31
|
return false;
|
|
32
32
|
}
|
|
33
33
|
asString() {
|
|
34
|
-
const params = this.signature.args.map((it, i) => `${this.signature.argName(i)}: ${this.writer.getNodeName(it)}`);
|
|
34
|
+
const params = this.signature.args.map((it, i) => `${this.writer.escapeKeyword(this.signature.argName(i))}: ${this.writer.getNodeName(it)}`);
|
|
35
35
|
return `{${params.join(", ")} => ${this.bodyAsString()} }`;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -73,11 +73,11 @@ export class CJMatchExpression {
|
|
|
73
73
|
asString() {
|
|
74
74
|
var _a, _b, _c;
|
|
75
75
|
let output = [];
|
|
76
|
-
output.push(`match (${this.matchValue
|
|
76
|
+
output.push(`match (${this.matchValue}) {`);
|
|
77
77
|
for (let index in this.matchCases) {
|
|
78
78
|
output.push(indentedBy(`case ${this.matchCases[index].asString()} => ${this.caseBlocks[index].asString()}`, ((_a = this.indentDepth) !== null && _a !== void 0 ? _a : 0) + 1));
|
|
79
79
|
}
|
|
80
|
-
output.push(indentedBy(`case _ => throw Exception(\"Unmatched pattern ${this.matchValue
|
|
80
|
+
output.push(indentedBy(`case _ => throw Exception(\"Unmatched pattern ${this.matchValue}\")`, ((_b = this.indentDepth) !== null && _b !== void 0 ? _b : 1) + 1));
|
|
81
81
|
output.push(indentedBy(`}`, ((_c = this.indentDepth) !== null && _c !== void 0 ? _c : 1)));
|
|
82
82
|
return output.join('\n');
|
|
83
83
|
}
|
|
@@ -184,7 +184,7 @@ export class CJEnumWithGetter {
|
|
|
184
184
|
}
|
|
185
185
|
memberValue += 1;
|
|
186
186
|
}
|
|
187
|
-
let enumName = this.enumEntity.name;
|
|
187
|
+
let enumName = idl.getNamespaceName(this.enumEntity).concat(this.enumEntity.name);
|
|
188
188
|
writer.writeClass(enumName, () => {
|
|
189
189
|
const enumType = idl.createReferenceType(this.enumEntity);
|
|
190
190
|
members.forEach(it => {
|
|
@@ -267,8 +267,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
267
267
|
}
|
|
268
268
|
getNodeName(type) {
|
|
269
269
|
// rework for proper namespace logic
|
|
270
|
-
|
|
271
|
-
return name[name.length - 1];
|
|
270
|
+
return this.typeConvertor.convert(type);
|
|
272
271
|
}
|
|
273
272
|
writeClass(name, op, superClass, interfaces, generics) {
|
|
274
273
|
let extendsClause = superClass ? `${superClass}` : undefined;
|
|
@@ -320,13 +319,13 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
320
319
|
if (nullable) {
|
|
321
320
|
if (receiver == 'this') {
|
|
322
321
|
this.printer.print('let thisObj = this');
|
|
323
|
-
super.writeMethodCall('thisObj', method, params, false);
|
|
322
|
+
super.writeMethodCall('thisObj', this.escapeKeyword(method), params, false);
|
|
324
323
|
return;
|
|
325
324
|
}
|
|
326
|
-
this.printer.print(`if (let Some(${receiver}) <- ${receiver}) { ${receiver}.${method}(${params.join(", ")}) }`);
|
|
325
|
+
this.printer.print(`if (let Some(${receiver}) <- ${receiver}) { ${receiver}.${this.escapeKeyword(method)}(${params.join(", ")}) }`);
|
|
327
326
|
}
|
|
328
327
|
else {
|
|
329
|
-
super.writeMethodCall(receiver, method, params, nullable);
|
|
328
|
+
super.writeMethodCall(receiver, this.escapeKeyword(method), params, nullable);
|
|
330
329
|
}
|
|
331
330
|
}
|
|
332
331
|
writeFieldDeclaration(name, type, modifiers, optional, initExpr) {
|
|
@@ -338,11 +337,27 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
338
337
|
writeMethodDeclaration(name, signature, modifiers) {
|
|
339
338
|
this.writeDeclaration(name, signature, modifiers);
|
|
340
339
|
}
|
|
341
|
-
writeConstructorImplementation(className, signature, op,
|
|
342
|
-
|
|
340
|
+
writeConstructorImplementation(className, signature, op, delegationCall, modifiers) {
|
|
341
|
+
var _a;
|
|
342
|
+
let i = 1;
|
|
343
|
+
while (signature.isArgOptional(signature.args.length - i)) {
|
|
344
|
+
let smallerSignature = signature.args.slice(0, -i);
|
|
345
|
+
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(", ")}) {`);
|
|
346
|
+
this.pushIndent();
|
|
347
|
+
let lessArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => this.escapeKeyword(signature.argName(i))).join(', ');
|
|
348
|
+
for (let idx = 0; idx < i; idx++) {
|
|
349
|
+
lessArgs = lessArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
|
|
350
|
+
}
|
|
351
|
+
this.print(`${className}(${lessArgs})`);
|
|
352
|
+
this.popIndent();
|
|
353
|
+
this.printer.print(`}`);
|
|
354
|
+
i += 1;
|
|
355
|
+
}
|
|
356
|
+
this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}${className}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
|
|
343
357
|
this.pushIndent();
|
|
344
|
-
if (
|
|
345
|
-
|
|
358
|
+
if (delegationCall) {
|
|
359
|
+
// TBD: check delegationType to write "this" or "super"
|
|
360
|
+
this.print(`super(${delegationCall.delegationArgs.map(it => it.asString()).join(", ")})`);
|
|
346
361
|
}
|
|
347
362
|
op(this);
|
|
348
363
|
this.popIndent();
|
|
@@ -401,7 +416,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
401
416
|
this.print('}');
|
|
402
417
|
}
|
|
403
418
|
writeSetterImplementation(method, op) {
|
|
404
|
-
this.print(`set(${method.signature.argsNames.join(', ')}) {`);
|
|
419
|
+
this.print(`set(${method.signature.argsNames.map(arg => this.escapeKeyword(arg)).join(', ')}) {`);
|
|
405
420
|
this.pushIndent();
|
|
406
421
|
op(this);
|
|
407
422
|
this.popIndent();
|
|
@@ -414,13 +429,14 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
414
429
|
this.popIndent();
|
|
415
430
|
this.print('}');
|
|
416
431
|
}
|
|
417
|
-
writeDeclaration(name, signature, modifiers, postfix) {
|
|
432
|
+
writeDeclaration(name, signature, modifiers, postfix, generics) {
|
|
418
433
|
let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
|
|
419
|
-
prefix = prefix ? prefix + " " : "";
|
|
420
|
-
|
|
434
|
+
prefix = prefix ? prefix + " " : "public ";
|
|
435
|
+
const typeParams = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : "";
|
|
436
|
+
this.print(`${prefix}${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.GETTER))) ? '' : `${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.STATIC)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.PRIVATE))) ? '' : 'open '}func `}${this.escapeKeyword(name)}${typeParams}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")})${this.getNodeName(signature.returnType) == 'this' ? '' : `: ${this.getNodeName(signature.returnType)}`}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
|
|
421
437
|
}
|
|
422
438
|
writeNativeFunctionCall(printer, name, signature) {
|
|
423
|
-
printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
|
|
439
|
+
printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}`).join(", ")}) }`);
|
|
424
440
|
}
|
|
425
441
|
writeNativeMethodDeclaration(method) {
|
|
426
442
|
let name = method.name;
|
|
@@ -432,7 +448,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
432
448
|
return this.makeString(`${value.asString()}.value`);
|
|
433
449
|
}
|
|
434
450
|
makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
|
|
435
|
-
return new CJAssignStatement(variableName, type, expr, isDeclared, isConst);
|
|
451
|
+
return new CJAssignStatement(this.escapeKeyword(variableName), type, expr, isDeclared, isConst);
|
|
436
452
|
}
|
|
437
453
|
makeClassInit(type, parameters) {
|
|
438
454
|
throw new Error(`makeClassInit`);
|
|
@@ -487,13 +503,13 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
487
503
|
return new CJMapForEachStatement(map, key, value, op);
|
|
488
504
|
}
|
|
489
505
|
makeDefinedCheck(value) {
|
|
490
|
-
return new CJCheckDefinedExpression(value);
|
|
506
|
+
return new CJCheckDefinedExpression(this.escapeKeyword(value));
|
|
491
507
|
}
|
|
492
508
|
makeNewObject(objectName, params = []) {
|
|
493
509
|
return new CJNewObjectExpression(objectName, params);
|
|
494
510
|
}
|
|
495
511
|
writePrintLog(message) {
|
|
496
|
-
this.print(`println("${message}")`);
|
|
512
|
+
this.print(`println(\"${message}\")`);
|
|
497
513
|
}
|
|
498
514
|
makeCast(value, node, options) {
|
|
499
515
|
var _a;
|
|
@@ -512,10 +528,10 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
512
528
|
return this.makeString("Option.None");
|
|
513
529
|
}
|
|
514
530
|
makeUnwrapOptional(expression) {
|
|
515
|
-
return new CJMatchExpression(expression, [this.makeString(`Some(unwrap_value)`)], [this.makeString(`unwrap_value`)], this.indentDepth());
|
|
531
|
+
return new CJMatchExpression(this.escapeKeyword(expression.asString()), [this.makeString(`Some(unwrap_value)`)], [this.makeString(`unwrap_value`)], this.indentDepth());
|
|
516
532
|
}
|
|
517
533
|
makeValueFromOption(value, destinationConvertor) {
|
|
518
|
-
return this.makeString(
|
|
534
|
+
return this.makeString(this.escapeKeyword(value));
|
|
519
535
|
}
|
|
520
536
|
makeRuntimeType(rt) {
|
|
521
537
|
return this.makeString(`RuntimeType.${RuntimeType[rt]}.ordinal`);
|
|
@@ -570,12 +586,12 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
570
586
|
this.writeStatement(this.makeAssign(valueType, undefined, this.makeRuntimeTypeGetterCall(value), false));
|
|
571
587
|
}
|
|
572
588
|
escapeKeyword(word) {
|
|
573
|
-
return CJKeywords.has(word) ? word
|
|
589
|
+
return CJKeywords.has(word) ? word.concat("_") : word;
|
|
574
590
|
}
|
|
575
|
-
pushNamespace(namespace,
|
|
576
|
-
popNamespace(
|
|
591
|
+
pushNamespace(namespace, options) { }
|
|
592
|
+
popNamespace(options) { }
|
|
577
593
|
castToInt(value, bitness) {
|
|
578
|
-
return `Int${bitness}(${value})`;
|
|
594
|
+
return `Int${bitness}(${this.escapeKeyword(value)})`;
|
|
579
595
|
}
|
|
580
596
|
castToBoolean(value) {
|
|
581
597
|
return `if (${value}) { Int32(1) } else { Int32(0) }`;
|
|
@@ -42,7 +42,7 @@ export declare abstract class CLikeLanguageWriter extends LanguageWriter {
|
|
|
42
42
|
isDeclare?: boolean;
|
|
43
43
|
}, op: (writer: LanguageWriter) => void): void;
|
|
44
44
|
writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
45
|
-
|
|
45
|
+
protected writeDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[], postfix?: string): void;
|
|
46
46
|
protected stringifyMethodReturnType(type: idl.IDLType, _?: PrintHint): string;
|
|
47
47
|
protected stringifyMethodArgType(type: idl.IDLType, _?: PrintHint): string;
|
|
48
48
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IDLContainerType, IDLEnum, IDLNode, IDLType, IDLTypedef } from '../../idl';
|
|
2
2
|
import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
|
|
3
3
|
import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
|
|
4
|
-
import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs } from "../LanguageWriter";
|
|
4
|
+
import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs, DelegationCall, MethodStaticCallExpression } from "../LanguageWriter";
|
|
5
5
|
import { CLikeLanguageWriter } from "./CLikeLanguageWriter";
|
|
6
6
|
import { IdlNameConvertor } from "../nameConvertor";
|
|
7
7
|
import { RuntimeType } from "../common";
|
|
@@ -23,6 +23,9 @@ export declare class CppPointerPropertyAccessExpression implements LanguageExpre
|
|
|
23
23
|
constructor(expression: string, name: string);
|
|
24
24
|
asString(): string;
|
|
25
25
|
}
|
|
26
|
+
export declare class CPPMethodStaticCallExpression extends MethodStaticCallExpression {
|
|
27
|
+
asString(): string;
|
|
28
|
+
}
|
|
26
29
|
export declare class CppAssignStatement extends AssignStatement {
|
|
27
30
|
variableName: string;
|
|
28
31
|
type: IDLType | undefined;
|
|
@@ -36,16 +39,21 @@ export declare class CppAssignStatement extends AssignStatement {
|
|
|
36
39
|
export declare class CppLanguageWriter extends CLikeLanguageWriter {
|
|
37
40
|
private primitivesTypes;
|
|
38
41
|
protected typeConvertor: IdlNameConvertor;
|
|
42
|
+
protected classMode: 'normal' | 'detached';
|
|
43
|
+
protected currentClass: string[];
|
|
39
44
|
constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, primitivesTypes: PrimitiveTypeList);
|
|
45
|
+
changeModeTo(mode: typeof this.classMode): void;
|
|
40
46
|
getNodeName(type: IDLNode): string;
|
|
41
47
|
fork(options?: {
|
|
42
48
|
resolver?: ReferenceResolver;
|
|
43
49
|
}): LanguageWriter;
|
|
50
|
+
protected writeDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[], postfix?: string): void;
|
|
44
51
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[]): void;
|
|
45
52
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
|
|
46
53
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
54
|
+
writeStaticMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
47
55
|
writeFieldDeclaration(name: string, type: IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
48
|
-
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void,
|
|
56
|
+
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, delegationCall?: DelegationCall, modifiers?: MethodModifier[]): void;
|
|
49
57
|
writeProperty(propName: string, propType: IDLType, modifiers: FieldModifier[], getter?: {
|
|
50
58
|
method: Method;
|
|
51
59
|
op: () => void;
|
|
@@ -84,6 +92,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
84
92
|
makeUnionSelector(value: string, valueType: string): LanguageStatement;
|
|
85
93
|
makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, convertorIndex: number): LanguageExpression;
|
|
86
94
|
makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
|
|
95
|
+
makeStaticMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
|
|
87
96
|
makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
|
|
88
97
|
makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
|
|
89
98
|
makeArrayInit(type: IDLContainerType): LanguageExpression;
|