@idlizer/core 2.1.10-arktscgen-7 → 2.1.10-arktscgen-10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/src/IndentedPrinter.js +2 -2
- package/build/lib/src/Language.d.ts +1 -0
- package/build/lib/src/Language.js +8 -0
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +47 -3
- package/build/lib/src/LanguageWriters/ArgConvertors.js +216 -19
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +12 -4
- package/build/lib/src/LanguageWriters/LanguageWriter.js +28 -3
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +6 -2
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +7 -1
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -0
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +10 -5
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +138 -51
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +5 -1
- package/build/lib/src/LanguageWriters/index.d.ts +1 -2
- package/build/lib/src/LanguageWriters/index.js +17 -3
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +5 -3
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +5 -3
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +8 -3
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +4 -10
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +6 -4
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +59 -42
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +5 -3
- package/build/lib/src/LibraryInterface.d.ts +6 -0
- package/build/lib/src/LibraryInterface.js +22 -1
- package/build/lib/src/from-idl/DtsPrinter.d.ts +3 -2
- package/build/lib/src/from-idl/DtsPrinter.js +9 -6
- package/build/lib/src/from-idl/parser.d.ts +1 -1
- package/build/lib/src/from-idl/parser.js +3 -3
- package/build/lib/src/idl/builders.d.ts +36 -1
- package/build/lib/src/idl/builders.js +62 -2
- package/build/lib/src/idl/dump.d.ts +3 -0
- package/build/lib/src/idl/dump.js +22 -4
- package/build/lib/src/idl/index.d.ts +0 -1
- package/build/lib/src/idl/index.js +0 -1
- package/build/lib/src/idl/node.d.ts +1 -0
- package/build/lib/src/idl/node.js +1 -0
- package/build/lib/src/idl/stdlib.d.ts +1 -0
- package/build/lib/src/idl/stdlib.js +1 -0
- package/build/lib/src/idl/utils.d.ts +4 -3
- package/build/lib/src/idl/utils.js +26 -13
- package/build/lib/src/idl/visitors.js +24 -104
- package/build/lib/src/index.d.ts +4 -1
- package/build/lib/src/index.js +4 -1
- package/build/lib/src/peer-generation/Extractors.d.ts +7 -0
- package/build/lib/src/peer-generation/Extractors.js +40 -0
- package/build/lib/src/peer-generation/Initializers.d.ts +5 -0
- package/build/lib/src/peer-generation/Initializers.js +28 -0
- package/build/lib/src/peer-generation/Materialized.d.ts +0 -4
- package/build/lib/src/peer-generation/Materialized.js +13 -24
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -0
- package/build/lib/src/peer-generation/PeerLibrary.js +54 -3
- package/build/lib/src/peer-generation/PeerMethod.d.ts +1 -0
- package/build/lib/src/peer-generation/PeerMethod.js +1 -0
- package/build/lib/src/peer-generation/idl/common.d.ts +0 -2
- package/build/lib/src/peer-generation/idl/common.js +3 -25
- package/build/lib/src/peer-generation/isMaterialized.d.ts +4 -0
- package/build/lib/src/peer-generation/isMaterialized.js +12 -0
- package/build/lib/src/peer-generation/unions.d.ts +1 -27
- package/build/lib/src/peer-generation/unions.js +1 -99
- package/build/lib/src/transformers/FqnTransformer.js +26 -2
- package/build/lib/src/transformers/GenericTransformer.d.ts +0 -2
- package/build/lib/src/transformers/GenericTransformer.js +20 -20
- package/build/lib/src/transformers/IdlTransformer.js +14 -0
- package/build/lib/src/transformers/NullTransformer.js +16 -3
- package/build/lib/src/transformers/OnSerializeTransformer.js +14 -0
- package/build/lib/src/transformers/ThrowsTransformer.d.ts +3 -0
- package/build/lib/src/transformers/ThrowsTransformer.js +51 -0
- package/build/lib/src/transformers/transformUtils.d.ts +7 -0
- package/build/lib/src/transformers/transformUtils.js +55 -0
- package/build/lib/src/util.d.ts +0 -15
- package/build/lib/src/util.js +2 -73
- package/package.json +11 -5
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* See the License for the specific language governing permissions and
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
|
-
import * as fs from "fs";
|
|
15
|
+
import * as fs from "node:fs";
|
|
16
16
|
import { indentedBy } from "./util";
|
|
17
|
-
import path from "path";
|
|
17
|
+
import path from "node:path";
|
|
18
18
|
export class IndentedPrinter {
|
|
19
19
|
constructor(output = [], indent = 0) {
|
|
20
20
|
this.output = output;
|
|
@@ -33,6 +33,14 @@ export class Language {
|
|
|
33
33
|
default: throw new Error(`Unsupported language ${name}`);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
+
static supportNS(lang) {
|
|
37
|
+
switch (lang.name) {
|
|
38
|
+
case "ArkTS": return true;
|
|
39
|
+
case "TS": return true;
|
|
40
|
+
case "C++": return true;
|
|
41
|
+
default: return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
36
44
|
}
|
|
37
45
|
Language.TS = new Language("TS", ".ts");
|
|
38
46
|
Language.ARKTS = new Language("ArkTS", ".ts"); // using .ts for ArkTS until we get rit of tsc preprocessing
|
|
@@ -3,9 +3,13 @@ import { Language } from "../Language";
|
|
|
3
3
|
import { BranchStatement, ExpressionAssigner, LanguageExpression, LanguageStatement, LanguageWriter } from "./LanguageWriter";
|
|
4
4
|
import { NativeModuleType, RuntimeType } from "./common";
|
|
5
5
|
import { LibraryInterface } from "../LibraryInterface";
|
|
6
|
-
import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
7
6
|
import { PeerLibrary } from "../peer-generation/PeerLibrary";
|
|
7
|
+
import { TypeConvertor } from "./nameConvertor";
|
|
8
|
+
import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
8
9
|
export declare function getSerializerName(_library: LibraryInterface, _language: Language, declaration: idl.IDLEntry): string;
|
|
10
|
+
export declare function makeETSDiscriminatorFromFields(self: LanguageWriter, convertor: {
|
|
11
|
+
targetType: (writer: LanguageWriter) => string;
|
|
12
|
+
}, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
|
|
9
13
|
export interface ArgConvertor {
|
|
10
14
|
param: string;
|
|
11
15
|
idlType: idl.IDLType;
|
|
@@ -302,6 +306,18 @@ export declare class UnionConvertor extends BaseArgConvertor {
|
|
|
302
306
|
getObjectAccessor(language: Language, value: string, args?: Record<string, string>): string;
|
|
303
307
|
unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
|
|
304
308
|
}
|
|
309
|
+
export declare class ThrowsConvertor extends BaseArgConvertor {
|
|
310
|
+
private library;
|
|
311
|
+
private decl;
|
|
312
|
+
private convertor;
|
|
313
|
+
constructor(library: LibraryInterface, param: string, decl: idl.IDLInterface);
|
|
314
|
+
convertorArg(param: string, writer: LanguageWriter): string;
|
|
315
|
+
convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
|
|
316
|
+
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
317
|
+
nativeType(): idl.IDLType;
|
|
318
|
+
interopType(): idl.IDLType;
|
|
319
|
+
isPointerType(): boolean;
|
|
320
|
+
}
|
|
305
321
|
export declare class FunctionConvertor extends BaseArgConvertor {
|
|
306
322
|
private library;
|
|
307
323
|
constructor(library: LibraryInterface, param: string);
|
|
@@ -352,19 +368,47 @@ export declare function generateCallbackKindName(callback: idl.IDLCallback): str
|
|
|
352
368
|
export declare function generateCallbackKindAccess(callback: idl.IDLCallback, language: Language): string;
|
|
353
369
|
export declare function generateCallbackKindValue(callback: idl.IDLCallback): number;
|
|
354
370
|
export declare function generateCallbackAPIArguments(library: LibraryInterface, callback: idl.IDLCallback): string[];
|
|
355
|
-
export declare function maybeTransformManagedCallback(callback: idl.IDLCallback, library: ReferenceResolver): idl.IDLCallback | undefined;
|
|
356
371
|
export declare class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
357
372
|
protected library: PeerLibrary;
|
|
358
373
|
protected managedDeclaration: idl.IDLEntry;
|
|
374
|
+
protected source: idl.IDLType;
|
|
359
375
|
protected target: idl.IDLType;
|
|
360
376
|
private targetConvertor;
|
|
361
|
-
constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, target: idl.IDLType);
|
|
377
|
+
constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, source: idl.IDLType, target: idl.IDLType);
|
|
378
|
+
getSourceType(): idl.IDLType;
|
|
379
|
+
getTargetType(): idl.IDLType;
|
|
362
380
|
isPointerType(): boolean;
|
|
363
381
|
nativeType(): idl.IDLType;
|
|
364
382
|
convertorArg(param: string, writer: LanguageWriter): string;
|
|
383
|
+
addImport(transformerInfo: {
|
|
384
|
+
module: string;
|
|
385
|
+
ns?: string;
|
|
386
|
+
method: string;
|
|
387
|
+
}, writer: LanguageWriter): void;
|
|
365
388
|
convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
|
|
366
389
|
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
367
390
|
}
|
|
368
391
|
export declare function createOutArgConvertor(library: PeerLibrary, type: idl.IDLType | undefined, otherParams: string[]): ArgConvertor | undefined;
|
|
392
|
+
export declare class UnionFlattener implements TypeConvertor<idl.IDLType[]> {
|
|
393
|
+
private resolver;
|
|
394
|
+
constructor(resolver: ReferenceResolver);
|
|
395
|
+
convertImport(type: idl.IDLImport): idl.IDLType[];
|
|
396
|
+
convertUnion(type: idl.IDLUnionType): idl.IDLType[];
|
|
397
|
+
convertTypeReference(type: idl.IDLReferenceType): idl.IDLType[];
|
|
398
|
+
convertOptional(type: idl.IDLOptionalType): idl.IDLType[];
|
|
399
|
+
convertContainer(type: idl.IDLContainerType): idl.IDLType[];
|
|
400
|
+
convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): idl.IDLType[];
|
|
401
|
+
convertPrimitiveType(type: idl.IDLPrimitiveType): idl.IDLType[];
|
|
402
|
+
convertTypeParameter(type: idl.IDLTypeParameterType): idl.IDLType[];
|
|
403
|
+
}
|
|
404
|
+
export declare class UnionRuntimeTypeChecker {
|
|
405
|
+
private convertors;
|
|
406
|
+
private conflictingConvertors;
|
|
407
|
+
private duplicateMembers;
|
|
408
|
+
constructor(convertors: ArgConvertor[]);
|
|
409
|
+
private checkConflicts;
|
|
410
|
+
makeDiscriminator(value: string, convertorIndex: number, writer: LanguageWriter, library: LibraryInterface, type?: idl.IDLType): LanguageExpression;
|
|
411
|
+
}
|
|
412
|
+
export declare function flattenUnionType(library: LibraryInterface, type: idl.IDLType): idl.IDLType;
|
|
369
413
|
export {};
|
|
370
414
|
//# sourceMappingURL=ArgConvertors.d.ts.map
|
|
@@ -17,14 +17,27 @@ import { Language } from "../Language";
|
|
|
17
17
|
import { BlockStatement, PrintHint, StringExpression, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
|
|
18
18
|
import { RuntimeType } from "./common";
|
|
19
19
|
import { generatorConfiguration, generatorTypePrefix } from "../config";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { getTransformer } from "../LibraryInterface";
|
|
21
|
+
import { capitalize, hashCodeFromString, throwException, warn } from "../util";
|
|
22
22
|
import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
|
|
23
23
|
import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
|
|
24
24
|
import { LayoutNodeRole } from "../peer-generation/LayoutManager";
|
|
25
25
|
import { isInExternalModule } from "../peer-generation/modules";
|
|
26
|
+
import { getExtractor } from "../peer-generation/Extractors";
|
|
27
|
+
import { maybeRestoreGenerics, maybeRestoreThrows, maybeTransformManagedCallback } from "../transformers/transformUtils";
|
|
28
|
+
import { convertType, withInsideInstanceof } from "./nameConvertor";
|
|
29
|
+
import { collapseTypes } from "../peer-generation/idl/common";
|
|
26
30
|
export function getSerializerName(_library, _language, declaration) {
|
|
27
|
-
return
|
|
31
|
+
return idl.entryToFunctionName(_language, declaration, "", "SerializerImpl");
|
|
32
|
+
}
|
|
33
|
+
export function makeETSDiscriminatorFromFields(self, convertor, value, accessors, duplicates) {
|
|
34
|
+
if (convertor instanceof AggregateConvertor
|
|
35
|
+
|| convertor instanceof InterfaceConvertor
|
|
36
|
+
|| convertor instanceof MaterializedClassConvertor
|
|
37
|
+
|| convertor instanceof CustomTypeConvertor) {
|
|
38
|
+
return self.instanceOf(value, convertor.idlType);
|
|
39
|
+
}
|
|
40
|
+
return self.makeString(`${value} instanceof ${withInsideInstanceof(true, () => convertor.targetType(self))}`);
|
|
28
41
|
}
|
|
29
42
|
export class BaseArgConvertor {
|
|
30
43
|
constructor(idlType, runtimeTypes, isScoped, useArray, param) {
|
|
@@ -607,7 +620,7 @@ export class ArrayConvertor extends BaseArgConvertor {
|
|
|
607
620
|
}
|
|
608
621
|
export class MapConvertor extends BaseArgConvertor {
|
|
609
622
|
constructor(library, param, type, keyType, valueType) {
|
|
610
|
-
super(idl.createContainerType('record', [keyType, valueType]), [RuntimeType.OBJECT], false, true, param);
|
|
623
|
+
super(idl.createContainerType('record', [keyType, valueType], { extendedAttributes: type.extendedAttributes }), [RuntimeType.OBJECT], false, true, param);
|
|
611
624
|
this.library = library;
|
|
612
625
|
this.keyType = keyType;
|
|
613
626
|
this.valueType = valueType;
|
|
@@ -878,7 +891,7 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
878
891
|
return false;
|
|
879
892
|
}
|
|
880
893
|
convertorSerialize(param, value, printer) {
|
|
881
|
-
const convertorItems = this.memberConvertors.map((it, index) => new ConvertorItem(it, index, it
|
|
894
|
+
const convertorItems = this.memberConvertors.map((it, index) => new ConvertorItem(it, index, getSourceType(it)));
|
|
882
895
|
if (this.isIndexedDiscriminator(printer))
|
|
883
896
|
return printer.makeMultiBranchCondition(convertorItems.map(it => this.makeBranch(param, value, printer, it)));
|
|
884
897
|
// Make arrays type descrimination
|
|
@@ -897,11 +910,12 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
897
910
|
statements.push(this.makeStoreSelector(param, index, printer));
|
|
898
911
|
if (!(convertor instanceof UndefinedConvertor)) {
|
|
899
912
|
const varName = `${value}ForIdx${index}`;
|
|
900
|
-
statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(convertor.getObjectAccessor(printer.language, value), printer.getNodeName(convertor
|
|
913
|
+
statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(convertor.getObjectAccessor(printer.language, value), printer.getNodeName(getSourceType(convertor)), convertor, index), true));
|
|
901
914
|
statements.push(convertor.convertorSerialize(param, varName, printer));
|
|
902
915
|
}
|
|
916
|
+
const genericDiscriminator = withGenericDiscriminator(this.library, this.memberConvertors, value, discriminator, type, printer);
|
|
903
917
|
const stmt = new BlockStatement(statements, false);
|
|
904
|
-
return { expr:
|
|
918
|
+
return { expr: genericDiscriminator, stmt };
|
|
905
919
|
}
|
|
906
920
|
makeArrayBranch(param, value, printer, arrayConvertorItems) {
|
|
907
921
|
if (arrayConvertorItems.length == 0)
|
|
@@ -976,6 +990,55 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
976
990
|
return writer.makeNaryOp("||", this.memberConvertors.map((_, n) => this.unionChecker.makeDiscriminator(value, n, writer, this.library)));
|
|
977
991
|
}
|
|
978
992
|
}
|
|
993
|
+
export class ThrowsConvertor extends BaseArgConvertor {
|
|
994
|
+
constructor(library, param, decl) {
|
|
995
|
+
super(idl.createReferenceType(decl), [RuntimeType.OBJECT], false, true, param);
|
|
996
|
+
this.library = library;
|
|
997
|
+
this.decl = decl;
|
|
998
|
+
const restoredThrow = maybeRestoreThrows(decl, library);
|
|
999
|
+
this.convertor = restoredThrow !== idl.IDLVoidType && restoredThrow !== idl.IDLThisType ? library.typeConvertor(param, restoredThrow) : undefined;
|
|
1000
|
+
}
|
|
1001
|
+
convertorArg(param, writer) {
|
|
1002
|
+
throw new Error("Method not implemented.");
|
|
1003
|
+
}
|
|
1004
|
+
convertorSerialize(param, value, writer) {
|
|
1005
|
+
var _a;
|
|
1006
|
+
if (writer.language === Language.CPP) {
|
|
1007
|
+
return writer.makeBlock([
|
|
1008
|
+
writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, 'writeBoolean', [writer.makeString(`${value}.hasException`)])),
|
|
1009
|
+
writer.makeCondition(writer.makeString(`${value}.hasException`), writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, 'writeException', [writer.makeString(`${value}.exception`)])), !this.convertor ? undefined : writer.makeBlock([
|
|
1010
|
+
writer.makeAssign(`${value}Value`, undefined, writer.makeString(`${value}.value`), true),
|
|
1011
|
+
(_a = this.convertor) === null || _a === void 0 ? void 0 : _a.convertorSerialize(param, `${value}Value`, writer),
|
|
1012
|
+
]))
|
|
1013
|
+
]);
|
|
1014
|
+
}
|
|
1015
|
+
else {
|
|
1016
|
+
throw new Error("Not expected to serialize exceptions in managed, currently they're only one directional from native to managed");
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1020
|
+
var _a;
|
|
1021
|
+
if (writer.language === Language.CPP) {
|
|
1022
|
+
throw new Error("Not expected to deserialize exceptions in CPP, currently they're only one directional from native to managed");
|
|
1023
|
+
}
|
|
1024
|
+
else {
|
|
1025
|
+
return writer.makeCondition(writer.makeMethodCall(deserializerName, 'readBoolean', []), writer.makeBlock([
|
|
1026
|
+
writer.makeThrowError(writer.makeMethodCall(deserializerName, 'readException', [])),
|
|
1027
|
+
]), !this.convertor ? undefined : writer.makeBlock([
|
|
1028
|
+
(_a = this.convertor) === null || _a === void 0 ? void 0 : _a.convertorDeserialize(bufferName, deserializerName, assigneer, writer),
|
|
1029
|
+
]));
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
nativeType() {
|
|
1033
|
+
return idl.createReferenceType(this.decl);
|
|
1034
|
+
}
|
|
1035
|
+
interopType() {
|
|
1036
|
+
throw new Error("ThrowsConvertor");
|
|
1037
|
+
}
|
|
1038
|
+
isPointerType() {
|
|
1039
|
+
return true;
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
979
1042
|
export class FunctionConvertor extends BaseArgConvertor {
|
|
980
1043
|
constructor(library, param) {
|
|
981
1044
|
// TODO: pass functions as integers to native side.
|
|
@@ -1158,7 +1221,7 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1158
1221
|
}),
|
|
1159
1222
|
];
|
|
1160
1223
|
}
|
|
1161
|
-
const
|
|
1224
|
+
const closure = writer.makeLambda(callbackSignature, [
|
|
1162
1225
|
writer.makeAssign(`${argsSerializer}Serializer`, idl.createReferenceType('idlize.internal.SerializerBase'), writer.makeMethodCall('SerializerBase', 'hold', []), true),
|
|
1163
1226
|
new ExpressionStatement(writer.makeMethodCall(`${argsSerializer}Serializer`, `writeInt32`, [writer.makeString(`${resourceName}.resourceId`)])),
|
|
1164
1227
|
new ExpressionStatement(writer.makeMethodCall(`${argsSerializer}Serializer`, `writePointer`, [writer.makeString(callName)])),
|
|
@@ -1190,9 +1253,14 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1190
1253
|
writer.makeString(continuationValueName), this.decl.returnType)
|
|
1191
1254
|
: undefined),
|
|
1192
1255
|
]);
|
|
1256
|
+
writer.addFeature(idl.createReferenceType('idlize.internal.resourceFinalizerRegister'));
|
|
1257
|
+
statements.push(writer.makeAssign(`${bufferName}Closure`, undefined, closure, true), writer.makeStatement(writer.makeFunctionCall(`resourceFinalizerRegister`, [
|
|
1258
|
+
writer.makeString(`${bufferName}Closure`),
|
|
1259
|
+
writer.makeString(resourceName)
|
|
1260
|
+
])));
|
|
1193
1261
|
return writer.makeBlock([
|
|
1194
1262
|
...statements,
|
|
1195
|
-
assigneer(
|
|
1263
|
+
assigneer(writer.makeString(`${bufferName}Closure`))
|
|
1196
1264
|
], false);
|
|
1197
1265
|
}
|
|
1198
1266
|
nativeType() {
|
|
@@ -1240,11 +1308,6 @@ export function generateCallbackAPIArguments(library, callback) {
|
|
|
1240
1308
|
}
|
|
1241
1309
|
return args;
|
|
1242
1310
|
}
|
|
1243
|
-
export function maybeTransformManagedCallback(callback, library) {
|
|
1244
|
-
if (callback.name === "CustomBuilder")
|
|
1245
|
-
return library.resolveTypeReference(idl.createReferenceType("arkui.component.idlize.CustomNodeBuilder"));
|
|
1246
|
-
return undefined;
|
|
1247
|
-
}
|
|
1248
1311
|
class PromiseOutArgConvertor extends BaseArgConvertor {
|
|
1249
1312
|
constructor(library, param, promise) {
|
|
1250
1313
|
super(library.createContinuationCallbackReference(promise), [RuntimeType.FUNCTION], false, true, param);
|
|
@@ -1287,14 +1350,21 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
|
|
|
1287
1350
|
}
|
|
1288
1351
|
}
|
|
1289
1352
|
export class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
1290
|
-
constructor(param, library, managedDeclaration, target) {
|
|
1353
|
+
constructor(param, library, managedDeclaration, source, target) {
|
|
1291
1354
|
const targetConvertor = library.typeConvertor(param, target);
|
|
1292
1355
|
super(target, targetConvertor.runtimeTypes, false, targetConvertor.useArray, param);
|
|
1293
1356
|
this.library = library;
|
|
1294
1357
|
this.managedDeclaration = managedDeclaration;
|
|
1358
|
+
this.source = source;
|
|
1295
1359
|
this.target = target;
|
|
1296
1360
|
this.targetConvertor = targetConvertor;
|
|
1297
1361
|
}
|
|
1362
|
+
getSourceType() {
|
|
1363
|
+
return this.source;
|
|
1364
|
+
}
|
|
1365
|
+
getTargetType() {
|
|
1366
|
+
return this.target;
|
|
1367
|
+
}
|
|
1298
1368
|
isPointerType() {
|
|
1299
1369
|
return this.targetConvertor.isPointerType();
|
|
1300
1370
|
}
|
|
@@ -1304,6 +1374,11 @@ export class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
|
1304
1374
|
convertorArg(param, writer) {
|
|
1305
1375
|
throw new Error("Method not implemented.");
|
|
1306
1376
|
}
|
|
1377
|
+
addImport(transformerInfo, writer) {
|
|
1378
|
+
transformerInfo.ns
|
|
1379
|
+
? writer.addFeature(transformerInfo.ns, transformerInfo.module)
|
|
1380
|
+
: writer.addFeature(transformerInfo.method, transformerInfo.module);
|
|
1381
|
+
}
|
|
1307
1382
|
convertorSerialize(param, value, writer) {
|
|
1308
1383
|
if (writer.language === Language.CPP) {
|
|
1309
1384
|
return this.targetConvertor.convertorSerialize(param, value, writer);
|
|
@@ -1312,8 +1387,9 @@ export class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
|
1312
1387
|
writer.addFeature(this.target);
|
|
1313
1388
|
}
|
|
1314
1389
|
const transformerInfo = getTransformer(this.library, this.managedDeclaration, this.target);
|
|
1315
|
-
|
|
1316
|
-
|
|
1390
|
+
this.addImport(transformerInfo, writer);
|
|
1391
|
+
const transformCallExpression = transformerInfo.ns
|
|
1392
|
+
? writer.makeMethodCall(transformerInfo.ns, transformerInfo.method, [writer.makeString(value)])
|
|
1317
1393
|
: writer.makeFunctionCall(transformerInfo.method, [writer.makeString(value)]);
|
|
1318
1394
|
const statements = [
|
|
1319
1395
|
writer.makeAssign(`${value}Transformed`, this.target, transformCallExpression, true),
|
|
@@ -1330,8 +1406,9 @@ export class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
|
1330
1406
|
}
|
|
1331
1407
|
const targetDeserialize = this.targetConvertor.convertorDeserialize(`${bufferName}D`, deserializerName, (expr) => writer.makeAssign(`${bufferName}Deserialized`, this.target, expr, true), writer);
|
|
1332
1408
|
const transformerInfo = getTransformer(this.library, this.target, this.managedDeclaration);
|
|
1333
|
-
|
|
1334
|
-
|
|
1409
|
+
this.addImport(transformerInfo, writer);
|
|
1410
|
+
const transformCallExpression = transformerInfo.ns
|
|
1411
|
+
? writer.makeMethodCall(transformerInfo.ns, transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)])
|
|
1335
1412
|
: writer.makeFunctionCall(transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)]);
|
|
1336
1413
|
return writer.makeBlock([
|
|
1337
1414
|
targetDeserialize,
|
|
@@ -1349,4 +1426,124 @@ export function createOutArgConvertor(library, type, otherParams) {
|
|
|
1349
1426
|
}
|
|
1350
1427
|
return undefined;
|
|
1351
1428
|
}
|
|
1429
|
+
function withGenericDiscriminator(library, convertors, value, discriminator, type, writer) {
|
|
1430
|
+
if (writer.language == Language.CPP)
|
|
1431
|
+
return discriminator;
|
|
1432
|
+
if (!idl.isReferenceType(type))
|
|
1433
|
+
return discriminator;
|
|
1434
|
+
const mayBeGeneric = maybeRestoreGenerics(type, writer.resolver);
|
|
1435
|
+
if (mayBeGeneric == undefined)
|
|
1436
|
+
return discriminator;
|
|
1437
|
+
const count = convertors
|
|
1438
|
+
.map(it => it.idlType)
|
|
1439
|
+
.filter(it => idl.isReferenceType(it))
|
|
1440
|
+
.map(it => idl.isReferenceType(it) ? maybeRestoreGenerics(it, writer.resolver) : undefined)
|
|
1441
|
+
.filter(it => it && idl.isReferenceType(it) && it.name == mayBeGeneric.name)
|
|
1442
|
+
.length;
|
|
1443
|
+
if (count < 2)
|
|
1444
|
+
return discriminator;
|
|
1445
|
+
writer.addFeature("typechecks", library.layout.handwrittenPackage());
|
|
1446
|
+
const decl = writer.resolver.resolveTypeReference(type);
|
|
1447
|
+
const checkGenericFunc = idl.entryToFunctionName(writer.language, decl, "isGeneric_", "");
|
|
1448
|
+
return writer.makeAnd(discriminator, writer.makeFunctionCall(`typechecks.${checkGenericFunc}`, [writer.makeString(value)]));
|
|
1449
|
+
}
|
|
1450
|
+
export class UnionFlattener {
|
|
1451
|
+
constructor(resolver) {
|
|
1452
|
+
this.resolver = resolver;
|
|
1453
|
+
}
|
|
1454
|
+
convertImport(type) {
|
|
1455
|
+
console.warn("Imports are not implemented yet");
|
|
1456
|
+
return [];
|
|
1457
|
+
}
|
|
1458
|
+
convertUnion(type) {
|
|
1459
|
+
return type.types.flatMap(it => convertType(this, it));
|
|
1460
|
+
}
|
|
1461
|
+
convertTypeReference(type) {
|
|
1462
|
+
const decl = this.resolver.toDeclaration(type);
|
|
1463
|
+
return idl.isType(decl) && decl !== idl.IDLCustomObjectType ? convertType(this, decl) : [type];
|
|
1464
|
+
}
|
|
1465
|
+
convertOptional(type) {
|
|
1466
|
+
return [type.type, idl.IDLUndefinedType];
|
|
1467
|
+
}
|
|
1468
|
+
convertContainer(type) {
|
|
1469
|
+
return [type];
|
|
1470
|
+
}
|
|
1471
|
+
convertTypeReferenceAsImport(type, importClause) {
|
|
1472
|
+
return [type];
|
|
1473
|
+
}
|
|
1474
|
+
convertPrimitiveType(type) {
|
|
1475
|
+
return [type];
|
|
1476
|
+
}
|
|
1477
|
+
convertTypeParameter(type) {
|
|
1478
|
+
return [type];
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
export class UnionRuntimeTypeChecker {
|
|
1482
|
+
constructor(convertors) {
|
|
1483
|
+
this.convertors = convertors;
|
|
1484
|
+
this.conflictingConvertors = new Set();
|
|
1485
|
+
this.duplicateMembers = new Set();
|
|
1486
|
+
this.checkConflicts();
|
|
1487
|
+
}
|
|
1488
|
+
checkConflicts() {
|
|
1489
|
+
const runtimeTypeConflicts = new Map();
|
|
1490
|
+
this.convertors.forEach(conv => {
|
|
1491
|
+
conv.runtimeTypes.forEach(rtType => {
|
|
1492
|
+
const convertors = runtimeTypeConflicts.get(rtType);
|
|
1493
|
+
if (convertors)
|
|
1494
|
+
convertors.push(conv);
|
|
1495
|
+
else
|
|
1496
|
+
runtimeTypeConflicts.set(rtType, [conv]);
|
|
1497
|
+
});
|
|
1498
|
+
});
|
|
1499
|
+
runtimeTypeConflicts.forEach((convertors, rtType) => {
|
|
1500
|
+
if (convertors.length > 1) {
|
|
1501
|
+
const allMembers = new Set();
|
|
1502
|
+
if (rtType === RuntimeType.OBJECT) {
|
|
1503
|
+
convertors.forEach(convertor => {
|
|
1504
|
+
convertor.getMembers().forEach(member => {
|
|
1505
|
+
if (allMembers.has(member))
|
|
1506
|
+
this.duplicateMembers.add(member);
|
|
1507
|
+
allMembers.add(member);
|
|
1508
|
+
});
|
|
1509
|
+
});
|
|
1510
|
+
}
|
|
1511
|
+
convertors.forEach(convertor => {
|
|
1512
|
+
this.conflictingConvertors.add(convertor);
|
|
1513
|
+
});
|
|
1514
|
+
}
|
|
1515
|
+
});
|
|
1516
|
+
}
|
|
1517
|
+
makeDiscriminator(value, convertorIndex, writer, library, type) {
|
|
1518
|
+
let convertor = this.convertors[convertorIndex];
|
|
1519
|
+
if (writer.language === Language.TS) {
|
|
1520
|
+
const isArray = idl.IDLContainerUtils.isSequence(convertor.idlType);
|
|
1521
|
+
if (isArray || this.conflictingConvertors.has(convertor)) {
|
|
1522
|
+
// Check elements inside array
|
|
1523
|
+
if (type && convertor.idlType != type) {
|
|
1524
|
+
convertor = library.typeConvertor("", type);
|
|
1525
|
+
}
|
|
1526
|
+
const discriminator = convertor.unionDiscriminator(value, convertorIndex, writer, this.duplicateMembers);
|
|
1527
|
+
if (discriminator)
|
|
1528
|
+
return discriminator;
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
return writer.makeString(writer.discriminate(value, convertorIndex, type !== null && type !== void 0 ? type : convertor.idlType, convertor.runtimeTypes));
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
export function flattenUnionType(library, type) {
|
|
1535
|
+
if (idl.isUnionType(type)) {
|
|
1536
|
+
const unionFlattener = new UnionFlattener(library);
|
|
1537
|
+
const allTypes = type.types.flatMap(it => convertType(unionFlattener, it));
|
|
1538
|
+
const uniqueTypes = new Set(allTypes);
|
|
1539
|
+
return uniqueTypes.size === allTypes.length ? type : collapseTypes(Array.from(uniqueTypes));
|
|
1540
|
+
}
|
|
1541
|
+
return type;
|
|
1542
|
+
}
|
|
1543
|
+
function getSourceType(convertor) {
|
|
1544
|
+
if (convertor instanceof TransformOnSerializeConvertor) {
|
|
1545
|
+
return convertor.getSourceType();
|
|
1546
|
+
}
|
|
1547
|
+
return convertor.idlType;
|
|
1548
|
+
}
|
|
1352
1549
|
//# sourceMappingURL=ArgConvertors.js.map
|
|
@@ -168,8 +168,10 @@ export declare enum MethodModifier {
|
|
|
168
168
|
THROWS = 8,
|
|
169
169
|
FREE = 9,
|
|
170
170
|
FORCE_CONTEXT = 10,
|
|
171
|
-
OVERRIDE = 11
|
|
171
|
+
OVERRIDE = 11,
|
|
172
|
+
OPEN = 12
|
|
172
173
|
}
|
|
174
|
+
export declare const METHOD_ACCESS_MODIFIERS: Set<MethodModifier>;
|
|
173
175
|
export declare enum ClassModifier {
|
|
174
176
|
PUBLIC = 0,
|
|
175
177
|
PRIVATE = 1,
|
|
@@ -287,7 +289,7 @@ export declare abstract class LanguageWriter {
|
|
|
287
289
|
abstract writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
|
|
288
290
|
abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
289
291
|
abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
290
|
-
abstract makeThrowError(message: string): LanguageStatement;
|
|
292
|
+
abstract makeThrowError(message: string | LanguageExpression): LanguageStatement;
|
|
291
293
|
abstract makeReturn(expr?: LanguageExpression): LanguageStatement;
|
|
292
294
|
abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
293
295
|
abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
@@ -326,7 +328,8 @@ export declare abstract class LanguageWriter {
|
|
|
326
328
|
writeStatements(...statements: LanguageStatement[]): void;
|
|
327
329
|
writeExpressionStatement(smth: LanguageExpression): void;
|
|
328
330
|
writeExpressionStatements(...statements: LanguageExpression[]): void;
|
|
329
|
-
|
|
331
|
+
writePrefixedBlock(prefix: string, op: (writer: this) => void): void;
|
|
332
|
+
writeStaticInitBlock(op: (writer: this) => void): void;
|
|
330
333
|
makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
|
|
331
334
|
makeThis(): LanguageExpression;
|
|
332
335
|
makeNull(type?: idl.IDLOptionalType): LanguageExpression;
|
|
@@ -337,6 +340,8 @@ export declare abstract class LanguageWriter {
|
|
|
337
340
|
makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
|
|
338
341
|
makeFunctionCall(name: string | LanguageExpression, params: LanguageExpression[]): LanguageExpression;
|
|
339
342
|
makeMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
|
|
343
|
+
makeFunctionReference(name: string): LanguageExpression;
|
|
344
|
+
makeMethodReference(receiver: string, method: string): LanguageExpression;
|
|
340
345
|
makeThisCall(params: LanguageExpression[]): LanguageExpression;
|
|
341
346
|
makeStaticMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
|
|
342
347
|
makeFieldAccess(receiver: string, method: string, nullable?: boolean): LanguageExpression;
|
|
@@ -387,12 +392,14 @@ export declare abstract class LanguageWriter {
|
|
|
387
392
|
makeHasOwnProperty(value: string, property: string, propertyTypeName?: string): LanguageExpression;
|
|
388
393
|
discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
|
|
389
394
|
makeNot(expr: LanguageExpression): LanguageExpression;
|
|
395
|
+
makeAnd(...args: LanguageExpression[]): LanguageExpression;
|
|
396
|
+
makeOr(...args: LanguageExpression[]): LanguageExpression;
|
|
390
397
|
makeSerializedBufferGetter(serializer: string): LanguageExpression;
|
|
391
398
|
makeEquals(args: LanguageExpression[]): LanguageExpression;
|
|
392
399
|
castToInt(value: string, bitness: 8 | 32): string;
|
|
393
400
|
castToBoolean(value: string): string;
|
|
394
401
|
makeCallIsObject(value: string): LanguageExpression;
|
|
395
|
-
|
|
402
|
+
writeStaticEntitiesBlock(op: (writer: LanguageWriter) => void): void;
|
|
396
403
|
instanceOf(value: string, type: idl.IDLType): LanguageExpression;
|
|
397
404
|
typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
|
|
398
405
|
/**
|
|
@@ -434,5 +441,6 @@ export type MakeAssignOptions = {
|
|
|
434
441
|
overrideTypeName?: string;
|
|
435
442
|
};
|
|
436
443
|
export type ExpressionAssigner = (expression: LanguageExpression) => LanguageStatement;
|
|
444
|
+
export declare function hasAccessModifier(modifiers: MethodModifier[] | undefined): boolean;
|
|
437
445
|
export {};
|
|
438
446
|
//# sourceMappingURL=LanguageWriter.d.ts.map
|
|
@@ -337,7 +337,13 @@ export var MethodModifier;
|
|
|
337
337
|
MethodModifier[MethodModifier["FREE"] = 9] = "FREE";
|
|
338
338
|
MethodModifier[MethodModifier["FORCE_CONTEXT"] = 10] = "FORCE_CONTEXT";
|
|
339
339
|
MethodModifier[MethodModifier["OVERRIDE"] = 11] = "OVERRIDE";
|
|
340
|
+
MethodModifier[MethodModifier["OPEN"] = 12] = "OPEN";
|
|
340
341
|
})(MethodModifier || (MethodModifier = {}));
|
|
342
|
+
export const METHOD_ACCESS_MODIFIERS = new Set([
|
|
343
|
+
MethodModifier.PUBLIC,
|
|
344
|
+
MethodModifier.PRIVATE,
|
|
345
|
+
MethodModifier.PROTECTED
|
|
346
|
+
]);
|
|
341
347
|
export var ClassModifier;
|
|
342
348
|
(function (ClassModifier) {
|
|
343
349
|
ClassModifier[ClassModifier["PUBLIC"] = 0] = "PUBLIC";
|
|
@@ -496,13 +502,16 @@ export class LanguageWriter {
|
|
|
496
502
|
writeExpressionStatements(...statements) {
|
|
497
503
|
statements.forEach(it => this.writeExpressionStatement(it));
|
|
498
504
|
}
|
|
499
|
-
|
|
500
|
-
this.print(
|
|
505
|
+
writePrefixedBlock(prefix, op) {
|
|
506
|
+
this.print(`${prefix} {`);
|
|
501
507
|
this.pushIndent();
|
|
502
508
|
op(this);
|
|
503
509
|
this.popIndent();
|
|
504
510
|
this.print("}");
|
|
505
511
|
}
|
|
512
|
+
writeStaticInitBlock(op) {
|
|
513
|
+
this.writePrefixedBlock("static", op);
|
|
514
|
+
}
|
|
506
515
|
makeRef(type, _options) {
|
|
507
516
|
return type;
|
|
508
517
|
}
|
|
@@ -537,6 +546,12 @@ export class LanguageWriter {
|
|
|
537
546
|
makeMethodCall(receiver, method, params, nullable) {
|
|
538
547
|
return new MethodCallExpression(receiver, method, params, nullable);
|
|
539
548
|
}
|
|
549
|
+
makeFunctionReference(name) {
|
|
550
|
+
return this.makeString(name);
|
|
551
|
+
}
|
|
552
|
+
makeMethodReference(receiver, method) {
|
|
553
|
+
return this.makeString(`${receiver}.${method}`);
|
|
554
|
+
}
|
|
540
555
|
// Deprecated
|
|
541
556
|
// Use instead declarationCall parameter in writeConstructorImplementation(...) with DelegationType.THIS
|
|
542
557
|
makeThisCall(params) {
|
|
@@ -683,6 +698,12 @@ export class LanguageWriter {
|
|
|
683
698
|
makeNot(expr) {
|
|
684
699
|
return this.makeString(`!(${expr.asString()})`);
|
|
685
700
|
}
|
|
701
|
+
makeAnd(...args) {
|
|
702
|
+
return this.makeNaryOp("&&", args);
|
|
703
|
+
}
|
|
704
|
+
makeOr(...args) {
|
|
705
|
+
return this.makeNaryOp("||", args);
|
|
706
|
+
}
|
|
686
707
|
makeSerializedBufferGetter(serializer) {
|
|
687
708
|
return this.makeMethodCall(serializer, `asBuffer`, []);
|
|
688
709
|
}
|
|
@@ -694,7 +715,7 @@ export class LanguageWriter {
|
|
|
694
715
|
makeCallIsObject(value) {
|
|
695
716
|
return this.makeString(`typeof ${value} === "object"`);
|
|
696
717
|
}
|
|
697
|
-
|
|
718
|
+
writeStaticEntitiesBlock(op) {
|
|
698
719
|
op(this);
|
|
699
720
|
}
|
|
700
721
|
instanceOf(value, type) {
|
|
@@ -753,4 +774,8 @@ export function copyMethod(method, overrides) {
|
|
|
753
774
|
var _a, _b, _c, _d;
|
|
754
775
|
return new Method((_a = overrides.name) !== null && _a !== void 0 ? _a : method.name, (_b = overrides.signature) !== null && _b !== void 0 ? _b : method.signature, (_c = overrides.modifiers) !== null && _c !== void 0 ? _c : method.modifiers, (_d = overrides.generics) !== null && _d !== void 0 ? _d : method.generics);
|
|
755
776
|
}
|
|
777
|
+
export function hasAccessModifier(modifiers) {
|
|
778
|
+
const modifier = modifiers === null || modifiers === void 0 ? void 0 : modifiers.find(value => METHOD_ACCESS_MODIFIERS.has(value));
|
|
779
|
+
return modifier !== undefined;
|
|
780
|
+
}
|
|
756
781
|
//# sourceMappingURL=LanguageWriter.js.map
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import * as idl from '../../idl';
|
|
16
16
|
import { CJKeywords } from '../../languageSpecificKeywords';
|
|
17
|
-
import {
|
|
17
|
+
import { maybeRestoreThrows } from '../../transformers/transformUtils';
|
|
18
18
|
import { removePoints } from '../../util';
|
|
19
19
|
import { convertNode, convertType } from '../nameConvertor';
|
|
20
20
|
import { InteropArgConvertor } from './InteropConvertors';
|
|
@@ -35,7 +35,7 @@ export class CJTypeNameConvertor {
|
|
|
35
35
|
return `Option<${this.convert(type.type)}>`;
|
|
36
36
|
}
|
|
37
37
|
convertUnion(type) {
|
|
38
|
-
return "Union_" + type.types.map(it => generateSyntheticIdlNodeName(it)).join("_");
|
|
38
|
+
return "Union_" + type.types.map(it => idl.generateSyntheticIdlNodeName(it)).join("_");
|
|
39
39
|
}
|
|
40
40
|
convertContainer(type) {
|
|
41
41
|
if (idl.IDLContainerUtils.isSequence(type)) {
|
|
@@ -96,6 +96,10 @@ export class CJTypeNameConvertor {
|
|
|
96
96
|
return "KPointer";
|
|
97
97
|
// resolve synthetic types
|
|
98
98
|
const decl = this.resolver.resolveTypeReference(type);
|
|
99
|
+
let restoredThrow;
|
|
100
|
+
if (restoredThrow = maybeRestoreThrows(decl, this.resolver)) {
|
|
101
|
+
return this.convert(restoredThrow);
|
|
102
|
+
}
|
|
99
103
|
if (decl && idl.isSyntheticEntry(decl)) {
|
|
100
104
|
if (idl.isCallback(decl)) {
|
|
101
105
|
return this.callbackType(decl);
|
|
@@ -17,11 +17,11 @@ 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
|
-
import { maybeTransformManagedCallback } from '../ArgConvertors';
|
|
21
20
|
import { qualifiedName } from '../../peer-generation/idl/common';
|
|
22
21
|
import { isInIdlizeInternal } from '../../idl';
|
|
23
22
|
import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
|
|
24
23
|
import { Language } from '../../Language';
|
|
24
|
+
import { maybeRestoreThrows, maybeTransformManagedCallback } from '../../transformers/transformUtils';
|
|
25
25
|
function isSubtypeTopLevelConflicted(library, node) {
|
|
26
26
|
let hasConflicts = false;
|
|
27
27
|
idl.forEachChild(node, (child) => {
|
|
@@ -49,6 +49,12 @@ export class GenericCppConvertor {
|
|
|
49
49
|
throw new Error("Internal error: namespaces are not allowed on the interop layer");
|
|
50
50
|
}
|
|
51
51
|
convertInterface(node) {
|
|
52
|
+
let restoredThrow;
|
|
53
|
+
if (restoredThrow = maybeRestoreThrows(node, this.library)) {
|
|
54
|
+
if (restoredThrow === idl.IDLThisType)
|
|
55
|
+
restoredThrow = idl.IDLVoidType;
|
|
56
|
+
return this.make(`Throws_${this.convertNode(restoredThrow).text}`, idl.createReferenceType(node), true);
|
|
57
|
+
}
|
|
52
58
|
switch (node.subkind) {
|
|
53
59
|
case idl.IDLInterfaceSubkind.AnonymousInterface:
|
|
54
60
|
return node.name
|
|
@@ -34,6 +34,9 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
|
|
|
34
34
|
if (idl.IDLContainerUtils.isSequence(type)) {
|
|
35
35
|
return isInsideInstanceof() ? `Array` : `Array<${this.convert(type.elementType[0])}>`;
|
|
36
36
|
}
|
|
37
|
+
if (idl.IDLContainerUtils.isRecord(type) && idl.hasExtAttribute(type, idl.IDLExtendedAttributes.AsRecord)) {
|
|
38
|
+
return isInsideInstanceof() ? 'Record' : `Record<${this.convert(type.elementType[0])}, ${this.convert(type.elementType[1])}>`;
|
|
39
|
+
}
|
|
37
40
|
return super.convertContainer(type);
|
|
38
41
|
}
|
|
39
42
|
convertPrimitiveType(type) {
|