@idlizer/core 2.1.9-arktscgen-6 → 2.1.9-arktscgen-8
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 +7 -8
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +1 -14
- package/build/lib/src/LanguageWriters/ArgConvertors.js +54 -101
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +8 -30
- package/build/lib/src/LanguageWriters/LanguageWriter.js +15 -67
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
- 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 +17 -1
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +121 -6
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +6 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -2
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +3 -19
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +0 -5
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +0 -9
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +3 -5
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +9 -22
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +6 -9
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +23 -66
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +1 -7
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +4 -14
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +11 -8
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +116 -27
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +4 -5
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +10 -26
- package/build/lib/src/config.d.ts +336 -1
- package/build/lib/src/config.js +11 -3
- package/build/lib/src/diagnosticmessages.d.ts +45 -0
- package/build/lib/src/diagnosticmessages.js +66 -0
- package/build/lib/src/diagnostictypes.d.ts +140 -0
- package/build/lib/src/diagnostictypes.js +72 -0
- package/build/lib/src/formatter.d.ts +3 -0
- package/build/lib/src/formatter.js +98 -0
- package/build/lib/src/from-idl/deserialize.d.ts +1 -0
- package/build/lib/src/from-idl/deserialize.js +107 -5
- package/build/lib/src/idl.d.ts +7 -0
- package/build/lib/src/idl.js +15 -3
- package/build/lib/src/index.d.ts +7 -1
- package/build/lib/src/index.js +7 -1
- package/build/lib/src/peer-generation/Materialized.d.ts +2 -2
- package/build/lib/src/peer-generation/Materialized.js +4 -9
- package/build/lib/src/peer-generation/PeerLibrary.js +1 -5
- package/build/lib/src/peer-generation/PeerMethod.d.ts +0 -4
- package/build/lib/src/peer-generation/PeerMethod.js +18 -36
- package/build/lib/src/peer-generation/idl/common.js +1 -1
- package/build/lib/src/peer-generation/isMaterialized.js +0 -4
- package/build/lib/src/peer-generation/modules.d.ts +1 -0
- package/build/lib/src/peer-generation/modules.js +4 -0
- package/build/lib/src/peer-generation/unions.d.ts +0 -2
- package/build/lib/src/peer-generation/unions.js +3 -23
- package/build/lib/src/transformers/FqnTransformer.d.ts +4 -0
- package/build/lib/src/transformers/FqnTransformer.js +17 -0
- package/build/lib/src/transformers/GenericTransformer.d.ts +8 -0
- package/build/lib/src/transformers/GenericTransformer.js +141 -0
- package/build/lib/src/util.d.ts +4 -2
- package/build/lib/src/util.js +21 -12
- package/package.json +2 -2
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
15
|
export class Language {
|
|
16
|
-
constructor(name, extension
|
|
16
|
+
constructor(name, extension) {
|
|
17
17
|
this.name = name;
|
|
18
18
|
this.extension = extension;
|
|
19
|
-
this.needsUnionDiscrimination = needsUnionDiscrimination;
|
|
20
19
|
}
|
|
21
20
|
toString() {
|
|
22
21
|
return this.name;
|
|
@@ -36,10 +35,10 @@ export class Language {
|
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
Language.TS = new Language("TS", ".ts"
|
|
40
|
-
Language.ARKTS = new Language("ArkTS", ".ts"
|
|
41
|
-
Language.JAVA = new Language("Java", ".java"
|
|
42
|
-
Language.CPP = new Language("C++", ".cc"
|
|
43
|
-
Language.CJ = new Language("CangJie", ".cj"
|
|
44
|
-
Language.KOTLIN = new Language("Kotlin", ".kt"
|
|
38
|
+
Language.TS = new Language("TS", ".ts");
|
|
39
|
+
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
|
+
Language.CPP = new Language("C++", ".cc");
|
|
42
|
+
Language.CJ = new Language("CangJie", ".cj");
|
|
43
|
+
Language.KOTLIN = new Language("Kotlin", ".kt");
|
|
45
44
|
//# sourceMappingURL=Language.js.map
|
|
@@ -47,7 +47,7 @@ export declare abstract class BaseArgConvertor implements ArgConvertor {
|
|
|
47
47
|
unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
|
|
48
48
|
getMembers(): string[];
|
|
49
49
|
getObjectAccessor(language: Language, value: string, args?: Record<string, string>, writer?: LanguageWriter): string;
|
|
50
|
-
protected discriminatorFromFields<T>(value: string, writer: LanguageWriter, uniqueFields: T[] | undefined, nameAccessor: (field: T) => string, optionalAccessor: (field: T) => boolean
|
|
50
|
+
protected discriminatorFromFields<T>(value: string, writer: LanguageWriter, uniqueFields: T[] | undefined, nameAccessor: (field: T) => string, optionalAccessor: (field: T) => boolean): LanguageExpression | undefined;
|
|
51
51
|
}
|
|
52
52
|
export declare class BooleanConvertor extends BaseArgConvertor {
|
|
53
53
|
constructor(param: string);
|
|
@@ -314,18 +314,6 @@ export declare class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
314
314
|
isPointerType(): boolean;
|
|
315
315
|
unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
|
|
316
316
|
}
|
|
317
|
-
export declare class ExternalTypeConvertor extends BaseArgConvertor {
|
|
318
|
-
private library;
|
|
319
|
-
declaration: idl.IDLInterface;
|
|
320
|
-
constructor(library: PeerLibrary, param: string, declaration: idl.IDLInterface);
|
|
321
|
-
convertorArg(param: string, writer: LanguageWriter): string;
|
|
322
|
-
convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
|
|
323
|
-
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
324
|
-
nativeType(): idl.IDLType;
|
|
325
|
-
interopType(): idl.IDLType;
|
|
326
|
-
isPointerType(): boolean;
|
|
327
|
-
unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
|
|
328
|
-
}
|
|
329
317
|
export declare class ImportTypeConvertor extends BaseArgConvertor {
|
|
330
318
|
protected importedName: string;
|
|
331
319
|
constructor(param: string, importedName: string);
|
|
@@ -348,7 +336,6 @@ export declare class CallbackConvertor extends BaseArgConvertor {
|
|
|
348
336
|
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter, useSyncVersion?: boolean): LanguageStatement;
|
|
349
337
|
nativeType(): idl.IDLType;
|
|
350
338
|
isPointerType(): boolean;
|
|
351
|
-
unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
|
|
352
339
|
}
|
|
353
340
|
export declare const CallbackKind = "CallbackKind";
|
|
354
341
|
export declare function generateCallbackKindName(callback: idl.IDLCallback): string;
|
|
@@ -17,7 +17,7 @@ import { Language } from "../Language";
|
|
|
17
17
|
import { BlockStatement, PrintHint, StringExpression, MethodModifier, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
|
|
18
18
|
import { RuntimeType } from "./common";
|
|
19
19
|
import { generatorConfiguration, generatorTypePrefix } from "../config";
|
|
20
|
-
import {
|
|
20
|
+
import { getExtractor, hashCodeFromString, throwException, warn } from "../util";
|
|
21
21
|
import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
|
|
22
22
|
import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
|
|
23
23
|
import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
@@ -25,6 +25,7 @@ import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
|
|
|
25
25
|
import { qualifiedName } from "../peer-generation/idl/common";
|
|
26
26
|
import { LayoutNodeRole } from "../peer-generation/LayoutManager";
|
|
27
27
|
import { PeerMethodSignature } from "../peer-generation/PeerMethod";
|
|
28
|
+
import { isInExternalModule } from "../peer-generation/modules";
|
|
28
29
|
export function getSerializerName(declaration) {
|
|
29
30
|
return `${idl.getQualifiedName(declaration, "namespace.name").split('.').join('_')}_serializer`;
|
|
30
31
|
}
|
|
@@ -122,13 +123,12 @@ export class BaseArgConvertor {
|
|
|
122
123
|
return writer.getObjectAccessor(this, value, args);
|
|
123
124
|
return this.useArray && (args === null || args === void 0 ? void 0 : args.index) ? `${value}[${args.index}]` : value;
|
|
124
125
|
}
|
|
125
|
-
discriminatorFromFields(value, writer, uniqueFields, nameAccessor, optionalAccessor
|
|
126
|
+
discriminatorFromFields(value, writer, uniqueFields, nameAccessor, optionalAccessor) {
|
|
126
127
|
if (!uniqueFields || uniqueFields.length === 0)
|
|
127
128
|
return undefined;
|
|
128
129
|
const firstNonOptional = uniqueFields.find(it => !optionalAccessor(it));
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
]);
|
|
130
|
+
const accessors = firstNonOptional ? [nameAccessor(firstNonOptional)] : uniqueFields.map(it => nameAccessor(it));
|
|
131
|
+
return writer.makeNaryOp("||", accessors.map(it => writer.makeHasOwnProperty(value + "!", it)));
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
export class BooleanConvertor extends BaseArgConvertor {
|
|
@@ -251,7 +251,21 @@ export class EnumConvertor extends BaseArgConvertor {
|
|
|
251
251
|
return writer.getNodeName(this.idlType); // this.enumTypeName(writer.language)
|
|
252
252
|
}
|
|
253
253
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
254
|
-
|
|
254
|
+
const convertorNativeType = this.nativeType();
|
|
255
|
+
const decl = writer.resolver.resolveTypeReference(idl.isReferenceType(convertorNativeType)
|
|
256
|
+
? convertorNativeType
|
|
257
|
+
: idl.createReferenceType(this.targetType(writer)));
|
|
258
|
+
if (decl === undefined || !idl.isEnum(decl)) {
|
|
259
|
+
throwException(`The type reference ${decl === null || decl === void 0 ? void 0 : decl.name} must be Enum`);
|
|
260
|
+
}
|
|
261
|
+
const ordinal = idl.isStringEnum(decl)
|
|
262
|
+
? writer.i32FromEnum(writer.makeCast(writer.makeString(writer.getObjectAccessor(this, value)), this.idlType), decl)
|
|
263
|
+
: writer.makeUnionVariantCast(writer.getObjectAccessor(this, value), writer.getNodeName(idl.IDLI32Type), this, index);
|
|
264
|
+
const { low, high } = idl.extremumOfOrdinals(decl);
|
|
265
|
+
return writer.makeNaryOp("&&", [
|
|
266
|
+
writer.makeNaryOp(">=", [ordinal, writer.makeString(low.toString())]),
|
|
267
|
+
writer.makeNaryOp("<=", [ordinal, writer.makeString(high.toString())])
|
|
268
|
+
]);
|
|
255
269
|
}
|
|
256
270
|
}
|
|
257
271
|
export class NumberConvertor extends BaseArgConvertor {
|
|
@@ -419,7 +433,7 @@ export class BufferConvertor extends BaseArgConvertor {
|
|
|
419
433
|
return true;
|
|
420
434
|
}
|
|
421
435
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
422
|
-
return writer.instanceOf(
|
|
436
|
+
return writer.instanceOf(value, this.idlType);
|
|
423
437
|
}
|
|
424
438
|
}
|
|
425
439
|
export class AggregateConvertor extends BaseArgConvertor {
|
|
@@ -480,6 +494,12 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
480
494
|
const resultExpression = writer.makeString(`${writer.getNodeName(this.idlType)}(${this.decl.properties.map(prop => `${bufferName}_${prop.name}`).join(", ")})`);
|
|
481
495
|
statements.push(assigneer(resultExpression));
|
|
482
496
|
}
|
|
497
|
+
else if (writer.language == Language.KOTLIN) {
|
|
498
|
+
const resultExpression = this.decl.subkind === idl.IDLInterfaceSubkind.Tuple ?
|
|
499
|
+
writer.makeString(`${writer.getNodeName(this.idlType)}(${this.decl.properties.map(prop => `${bufferName}_${prop.name}`).join(', ')})`) :
|
|
500
|
+
writer.makeString(`object: ${writer.getNodeName(this.idlType)} { ${this.decl.properties.map(prop => `override var ${prop.name} = ${bufferName}_${prop.name}`).join("; ")} }`);
|
|
501
|
+
statements.push(assigneer(resultExpression));
|
|
502
|
+
}
|
|
483
503
|
else {
|
|
484
504
|
const resultExpression = this.makeAssigneeExpression(this.decl.properties.map(prop => {
|
|
485
505
|
return [prop.name, writer.makeString(`${bufferName}_${prop.name}`)];
|
|
@@ -506,7 +526,7 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
506
526
|
}
|
|
507
527
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
508
528
|
const uniqueFields = this.members.filter(it => !duplicates.has(it[0]));
|
|
509
|
-
return this.discriminatorFromFields(value, writer, uniqueFields, it => it[0], it => it[1]
|
|
529
|
+
return this.discriminatorFromFields(value, writer, uniqueFields, it => it[0], it => it[1]);
|
|
510
530
|
}
|
|
511
531
|
}
|
|
512
532
|
export class TupleConvertor extends AggregateConvertor {
|
|
@@ -580,7 +600,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
|
|
|
580
600
|
var _a;
|
|
581
601
|
// Try to figure out interface by examining field sets
|
|
582
602
|
const uniqueFields = (_a = this.declaration) === null || _a === void 0 ? void 0 : _a.properties.filter(it => !duplicates.has(it.name));
|
|
583
|
-
return this.discriminatorFromFields(value, writer, uniqueFields, it => it.name, it => it.isOptional
|
|
603
|
+
return this.discriminatorFromFields(value, writer, uniqueFields, it => it.name, it => it.isOptional);
|
|
584
604
|
}
|
|
585
605
|
}
|
|
586
606
|
export class ClassConvertor extends InterfaceConvertor {
|
|
@@ -588,7 +608,7 @@ export class ClassConvertor extends InterfaceConvertor {
|
|
|
588
608
|
super(library, name, param, declaration);
|
|
589
609
|
}
|
|
590
610
|
unionDiscriminator(value, index, writer, duplicateMembers) {
|
|
591
|
-
return writer.
|
|
611
|
+
return writer.instanceOf(value, this.idlType);
|
|
592
612
|
}
|
|
593
613
|
}
|
|
594
614
|
export class ArrayConvertor extends BaseArgConvertor {
|
|
@@ -605,7 +625,7 @@ export class ArrayConvertor extends BaseArgConvertor {
|
|
|
605
625
|
convertorSerialize(param, value, printer) {
|
|
606
626
|
// Array length.
|
|
607
627
|
const valueLength = printer.makeArrayLength(value).asString();
|
|
608
|
-
const loopCounter =
|
|
628
|
+
const loopCounter = `${value}_counter_i`;
|
|
609
629
|
printer.writeMethodCall(`${param}Serializer`, "writeInt32", [printer.castToInt(valueLength, 32)]);
|
|
610
630
|
printer.writeStatement(printer.makeLoop(loopCounter, valueLength));
|
|
611
631
|
printer.pushIndent();
|
|
@@ -638,7 +658,7 @@ export class ArrayConvertor extends BaseArgConvertor {
|
|
|
638
658
|
return true;
|
|
639
659
|
}
|
|
640
660
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
641
|
-
return writer.
|
|
661
|
+
return writer.instanceOf(value, this.idlType);
|
|
642
662
|
}
|
|
643
663
|
getObjectAccessor(language, value, args) {
|
|
644
664
|
const array = language === Language.CPP ? ".array" : "";
|
|
@@ -702,7 +722,7 @@ export class MapConvertor extends BaseArgConvertor {
|
|
|
702
722
|
return true;
|
|
703
723
|
}
|
|
704
724
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
705
|
-
return writer.
|
|
725
|
+
return writer.makeString(`${value} instanceof Map`);
|
|
706
726
|
}
|
|
707
727
|
getObjectAccessor(language, value, args) {
|
|
708
728
|
return language === Language.CPP && (args === null || args === void 0 ? void 0 : args.index) && (args === null || args === void 0 ? void 0 : args.field)
|
|
@@ -712,7 +732,7 @@ export class MapConvertor extends BaseArgConvertor {
|
|
|
712
732
|
}
|
|
713
733
|
export class DateConvertor extends BaseArgConvertor {
|
|
714
734
|
constructor(param) {
|
|
715
|
-
super(idl.
|
|
735
|
+
super(idl.IDLDate, [RuntimeType.NUMBER], false, false, param);
|
|
716
736
|
}
|
|
717
737
|
convertorArg(param, writer) {
|
|
718
738
|
if (writer.language === Language.CPP) {
|
|
@@ -843,30 +863,18 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
843
863
|
throw new Error("Must never be used");
|
|
844
864
|
}
|
|
845
865
|
convertorSerialize(param, value, printer) {
|
|
846
|
-
|
|
847
|
-
const serializedType = (printer.language == Language.JAVA ? undefined : idl.IDLI32Type);
|
|
848
|
-
printer.writeStatement(printer.makeAssign(valueType, serializedType, printer.makeRuntimeType(RuntimeType.UNDEFINED), true, false));
|
|
849
|
-
if (printer.language != Language.CJ && printer.language != Language.KOTLIN) {
|
|
850
|
-
printer.runtimeType(this, valueType, value);
|
|
851
|
-
printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.castToInt(valueType, 8)]);
|
|
852
|
-
}
|
|
853
|
-
printer.print(`if (${printer.makeRuntimeTypeCondition(valueType, false, RuntimeType.UNDEFINED, value).asString()}) {`);
|
|
866
|
+
printer.print(`if (${printer.makeDefinedCheck(value).asString()}) {`);
|
|
854
867
|
printer.pushIndent();
|
|
855
|
-
|
|
856
|
-
printer.writeMethodCall(`${param}Serializer`, "writeInt8", ["RuntimeType.OBJECT.ordinal"]); // everything is object, except None<T>
|
|
857
|
-
}
|
|
868
|
+
printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.OBJECT).asString()]);
|
|
858
869
|
const valueValue = `${value}_value`.replaceAll('.', '_');
|
|
859
870
|
printer.writeStatement(printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
|
|
860
871
|
this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer);
|
|
861
872
|
printer.popIndent();
|
|
862
|
-
printer.print(
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
printer.popIndent();
|
|
868
|
-
printer.print('}');
|
|
869
|
-
}
|
|
873
|
+
printer.print('} else {');
|
|
874
|
+
printer.pushIndent();
|
|
875
|
+
printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.UNDEFINED).asString()]);
|
|
876
|
+
printer.popIndent();
|
|
877
|
+
printer.print('}');
|
|
870
878
|
}
|
|
871
879
|
convertorCArg(param) {
|
|
872
880
|
throw new Error("Must never be used");
|
|
@@ -916,13 +924,10 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
916
924
|
throw new Error("Do not use for union");
|
|
917
925
|
}
|
|
918
926
|
convertorSerialize(param, value, printer) {
|
|
919
|
-
var _a;
|
|
920
|
-
printer.writeStatement(printer.makeAssign(`${value}_type`, idl.IDLI32Type, printer.makeUnionTypeDefaultInitializer(), true, false));
|
|
921
|
-
printer.writeStatement(printer.makeUnionSelector(value, `${value}_type`));
|
|
922
927
|
this.memberConvertors.forEach((it, index) => {
|
|
923
928
|
const maybeElse = (index > 0 && this.memberConvertors[index - 1].runtimeTypes.length > 0) ? "else " : "";
|
|
924
|
-
const
|
|
925
|
-
printer.print(`${maybeElse}if (${
|
|
929
|
+
const discriminator = this.unionChecker.makeDiscriminator(value, index, printer).asString();
|
|
930
|
+
printer.print(`${maybeElse}if (${discriminator}) {`);
|
|
926
931
|
printer.pushIndent();
|
|
927
932
|
printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.castToInt(index.toString(), 8)]);
|
|
928
933
|
if (!(it instanceof UndefinedConvertor)) {
|
|
@@ -932,7 +937,6 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
932
937
|
printer.popIndent();
|
|
933
938
|
printer.print(`}`);
|
|
934
939
|
});
|
|
935
|
-
this.unionChecker.reportConflicts((_a = this.library.getCurrentContext()) !== null && _a !== void 0 ? _a : "<unknown context>", printer);
|
|
936
940
|
}
|
|
937
941
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
938
942
|
const statements = [];
|
|
@@ -950,7 +954,7 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
950
954
|
const stmt = new BlockStatement([
|
|
951
955
|
writer.makeSetUnionSelector(bufferName, `${index}`),
|
|
952
956
|
it.convertorDeserialize(`${bufferName}_u`, deserializerName, (expr) => {
|
|
953
|
-
if (writer.language == Language.CJ) {
|
|
957
|
+
if (writer.language == Language.CJ || writer.language == Language.KOTLIN) {
|
|
954
958
|
return writer.makeAssign(receiver, undefined, writer.makeFunctionCall(writer.getNodeName(this.type), [expr]), false);
|
|
955
959
|
}
|
|
956
960
|
else {
|
|
@@ -977,8 +981,7 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
977
981
|
return language === Language.CPP && (args === null || args === void 0 ? void 0 : args.index) ? `${value}.value${args.index}` : value;
|
|
978
982
|
}
|
|
979
983
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
980
|
-
|
|
981
|
-
return writer.makeNaryOp("||", this.memberConvertors.map((_, n) => checker.makeDiscriminator(value, n, writer)));
|
|
984
|
+
return writer.makeNaryOp("||", this.memberConvertors.map((_, n) => this.unionChecker.makeDiscriminator(value, n, writer)));
|
|
982
985
|
}
|
|
983
986
|
}
|
|
984
987
|
export class FunctionConvertor extends BaseArgConvertor {
|
|
@@ -1017,9 +1020,14 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
1017
1020
|
case Language.CPP:
|
|
1018
1021
|
return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
|
|
1019
1022
|
case Language.JAVA:
|
|
1023
|
+
case Language.KOTLIN:
|
|
1020
1024
|
case Language.CJ:
|
|
1021
1025
|
return `MaterializedBase.toPeerPtr(${writer.escapeKeyword(param)})`;
|
|
1022
1026
|
default:
|
|
1027
|
+
if (isInExternalModule(this.declaration)) {
|
|
1028
|
+
const extractor = getExtractor(this.declaration, writer.language, true);
|
|
1029
|
+
return `${extractor.receiver}.${extractor.method}(${param})`;
|
|
1030
|
+
}
|
|
1023
1031
|
return `toPeerPtr(${param})`;
|
|
1024
1032
|
}
|
|
1025
1033
|
}
|
|
@@ -1046,62 +1054,11 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
1046
1054
|
unionDiscriminator(value, index, writer, duplicates) {
|
|
1047
1055
|
if (idl.isInterface(this.declaration)) {
|
|
1048
1056
|
if (this.declaration.subkind === idl.IDLInterfaceSubkind.Class) {
|
|
1049
|
-
return writer.
|
|
1050
|
-
}
|
|
1051
|
-
if (this.declaration.subkind === idl.IDLInterfaceSubkind.Interface) {
|
|
1052
|
-
const uniqueFields = this.declaration.properties.filter(it => !duplicates.has(it.name));
|
|
1053
|
-
return this.discriminatorFromFields(value, writer, uniqueFields, it => it.name, it => it.isOptional, duplicates);
|
|
1054
|
-
}
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
}
|
|
1058
|
-
export class ExternalTypeConvertor extends BaseArgConvertor {
|
|
1059
|
-
constructor(library, param, declaration) {
|
|
1060
|
-
super(idl.createReferenceType(declaration), [RuntimeType.OBJECT], false, false, param);
|
|
1061
|
-
this.library = library;
|
|
1062
|
-
this.declaration = declaration;
|
|
1063
|
-
console.log(`ExternalType convertor for type: ${declaration.name}`);
|
|
1064
|
-
}
|
|
1065
|
-
convertorArg(param, writer) {
|
|
1066
|
-
const lang = writer.language;
|
|
1067
|
-
switch (lang) {
|
|
1068
|
-
case Language.CPP:
|
|
1069
|
-
return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
|
|
1070
|
-
default:
|
|
1071
|
-
return `extractors.${getExtractorName(this.declaration, lang, true)}(${param})`;
|
|
1072
|
-
}
|
|
1073
|
-
}
|
|
1074
|
-
convertorSerialize(param, value, printer) {
|
|
1075
|
-
const accessor = getSerializerName(this.declaration);
|
|
1076
|
-
printer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
1077
|
-
printer.writeStatement(printer.makeStatement(printer.makeStaticMethodCall(accessor, 'write', [
|
|
1078
|
-
printer.makeString(`${param}Serializer`),
|
|
1079
|
-
printer.makeString(value)
|
|
1080
|
-
])));
|
|
1081
|
-
}
|
|
1082
|
-
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1083
|
-
const accessor = getSerializerName(this.declaration);
|
|
1084
|
-
writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
1085
|
-
const readStatement = writer.makeCast(writer.makeStaticMethodCall(accessor, 'read', [writer.makeString(deserializerName)]), this.declaration);
|
|
1086
|
-
return assigneer(readStatement);
|
|
1087
|
-
}
|
|
1088
|
-
nativeType() {
|
|
1089
|
-
return idl.createReferenceType(this.declaration);
|
|
1090
|
-
}
|
|
1091
|
-
interopType() {
|
|
1092
|
-
return idl.IDLPointerType;
|
|
1093
|
-
}
|
|
1094
|
-
isPointerType() {
|
|
1095
|
-
return false;
|
|
1096
|
-
}
|
|
1097
|
-
unionDiscriminator(value, index, writer, duplicates) {
|
|
1098
|
-
if (idl.isInterface(this.declaration)) {
|
|
1099
|
-
if (this.declaration.subkind === idl.IDLInterfaceSubkind.Class) {
|
|
1100
|
-
return writer.discriminatorFromExpressions(value, RuntimeType.OBJECT, [writer.instanceOf(this, value, duplicates)]);
|
|
1057
|
+
return writer.instanceOf(value, this.idlType);
|
|
1101
1058
|
}
|
|
1102
1059
|
if (this.declaration.subkind === idl.IDLInterfaceSubkind.Interface) {
|
|
1103
1060
|
const uniqueFields = this.declaration.properties.filter(it => !duplicates.has(it.name));
|
|
1104
|
-
return this.discriminatorFromFields(value, writer, uniqueFields, it => it.name, it => it.isOptional
|
|
1061
|
+
return this.discriminatorFromFields(value, writer, uniqueFields, it => it.name, it => it.isOptional);
|
|
1105
1062
|
}
|
|
1106
1063
|
}
|
|
1107
1064
|
}
|
|
@@ -1196,7 +1153,7 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1196
1153
|
continuation = [
|
|
1197
1154
|
writer.language == Language.CJ ?
|
|
1198
1155
|
writer.makeAssign(continuationValueName, undefined, writer.makeString(`${writer.getNodeName(this.decl.returnType).replace(/[\<\>]/g, '')}Holder(None<${writer.getNodeName(this.decl.returnType)}>)`), true, true) :
|
|
1199
|
-
writer.makeAssign(continuationValueName, optionalReturnType, undefined, true, false),
|
|
1156
|
+
writer.makeAssign(continuationValueName, optionalReturnType, writer.language == Language.KOTLIN ? writer.makeNull() : undefined, true, false),
|
|
1200
1157
|
writer.makeAssign(continuationCallbackName, continuationReference, writer.makeLambda(new NamedMethodSignature(idl.IDLVoidType, [returnType], [`value`]), [
|
|
1201
1158
|
writer.language == Language.CJ ?
|
|
1202
1159
|
writer.makeAssign(`${continuationValueName}.value`, undefined, writer.makeString(`value`), false) :
|
|
@@ -1231,7 +1188,7 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1231
1188
|
writer.makeString(`${argsSerializer}Serializer.length()`),
|
|
1232
1189
|
])),
|
|
1233
1190
|
new ExpressionStatement(writer.makeMethodCall(`${argsSerializer}Serializer`, `release`, [])),
|
|
1234
|
-
writer.
|
|
1191
|
+
writer.makeLambdaReturn(hasContinuation
|
|
1235
1192
|
? writer.makeCast(writer.language == Language.CJ ?
|
|
1236
1193
|
writer.makeString(`${continuationValueName}.value`) :
|
|
1237
1194
|
writer.makeString(continuationValueName), this.decl.returnType)
|
|
@@ -1248,10 +1205,6 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1248
1205
|
isPointerType() {
|
|
1249
1206
|
return true;
|
|
1250
1207
|
}
|
|
1251
|
-
unionDiscriminator(value, index, writer, duplicates) {
|
|
1252
|
-
// We serialize callbacks as table offsets, so don't need to discriminate them. Runtime type check is enough
|
|
1253
|
-
return writer.makeUnionVariantCondition(this, value, `${value}_type`, RuntimeType[RuntimeType.FUNCTION]);
|
|
1254
|
-
}
|
|
1255
1208
|
}
|
|
1256
1209
|
////////////////////////////////////////////////////////////////////////////////
|
|
1257
1210
|
// UTILS
|
|
@@ -59,11 +59,6 @@ export declare class FieldAccessExpression {
|
|
|
59
59
|
constructor(receiver: string, field: string, nullable?: boolean);
|
|
60
60
|
asString(): string;
|
|
61
61
|
}
|
|
62
|
-
export declare class CheckDefinedExpression implements LanguageExpression {
|
|
63
|
-
private value;
|
|
64
|
-
constructor(value: string);
|
|
65
|
-
asString(): string;
|
|
66
|
-
}
|
|
67
62
|
export interface LanguageStatement {
|
|
68
63
|
write(writer: LanguageWriter): void;
|
|
69
64
|
}
|
|
@@ -113,13 +108,6 @@ export declare class MultiBranchIfStatement implements LanguageStatement {
|
|
|
113
108
|
constructor(statements: BranchStatement[], elseStatement: LanguageStatement | undefined);
|
|
114
109
|
write(writer: LanguageWriter): void;
|
|
115
110
|
}
|
|
116
|
-
export declare class CheckOptionalStatement implements LanguageStatement {
|
|
117
|
-
undefinedValue: string;
|
|
118
|
-
optionalExpression: LanguageExpression;
|
|
119
|
-
doStatement: LanguageStatement;
|
|
120
|
-
constructor(undefinedValue: string, optionalExpression: LanguageExpression, doStatement: LanguageStatement);
|
|
121
|
-
write(writer: LanguageWriter): void;
|
|
122
|
-
}
|
|
123
111
|
export declare class TsEnumEntityStatement implements LanguageStatement {
|
|
124
112
|
private readonly enumEntity;
|
|
125
113
|
private readonly options;
|
|
@@ -156,7 +144,8 @@ export declare enum FieldModifier {
|
|
|
156
144
|
PROTECTED = 4,
|
|
157
145
|
FINAL = 5,
|
|
158
146
|
VOLATILE = 6,
|
|
159
|
-
INTERNAL = 7
|
|
147
|
+
INTERNAL = 7,
|
|
148
|
+
OVERRIDE = 8
|
|
160
149
|
}
|
|
161
150
|
export declare enum MethodModifier {
|
|
162
151
|
PUBLIC = 0,
|
|
@@ -274,14 +263,13 @@ export declare abstract class LanguageWriter {
|
|
|
274
263
|
}, setter?: {
|
|
275
264
|
method: Method;
|
|
276
265
|
op: () => void;
|
|
277
|
-
}): void;
|
|
266
|
+
}, initExpr?: LanguageExpression): void;
|
|
278
267
|
abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
279
268
|
abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
280
269
|
abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
281
270
|
abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
282
271
|
abstract makeThrowError(message: string): LanguageStatement;
|
|
283
272
|
abstract makeReturn(expr?: LanguageExpression): LanguageStatement;
|
|
284
|
-
abstract makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
|
|
285
273
|
abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
286
274
|
abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
287
275
|
abstract makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
|
|
@@ -324,6 +312,7 @@ export declare abstract class LanguageWriter {
|
|
|
324
312
|
makeThis(): LanguageExpression;
|
|
325
313
|
makeNull(value?: string): LanguageExpression;
|
|
326
314
|
makeVoid(): LanguageExpression;
|
|
315
|
+
makeLambdaReturn(expr?: LanguageExpression): LanguageStatement;
|
|
327
316
|
makeRuntimeTypeCondition(typeVarName: string, equals: boolean, type: RuntimeType, varName?: string): LanguageExpression;
|
|
328
317
|
makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
|
|
329
318
|
makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
|
|
@@ -335,7 +324,7 @@ export declare abstract class LanguageWriter {
|
|
|
335
324
|
makeNativeCall(nativeModule: NativeModuleType, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
|
|
336
325
|
makeBlock(statements: LanguageStatement[], inScope?: boolean): BlockStatement;
|
|
337
326
|
nativeReceiver(nativeModule: NativeModuleType): string;
|
|
338
|
-
makeDefinedCheck(value: string): LanguageExpression;
|
|
327
|
+
abstract makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
|
|
339
328
|
makeRuntimeTypeDefinedCheck(runtimeType: string): LanguageExpression;
|
|
340
329
|
makeCondition(condition: LanguageExpression, thenStatement: LanguageStatement, elseStatement?: LanguageStatement, insideIfOp?: () => void, insideElseOp?: () => void): LanguageStatement;
|
|
341
330
|
makeMultiBranchCondition(conditions: BranchStatement[], elseStatement?: LanguageStatement): LanguageStatement;
|
|
@@ -344,7 +333,6 @@ export declare abstract class LanguageWriter {
|
|
|
344
333
|
makeArrayAccess(value: string, indexVar: string): LanguageExpression;
|
|
345
334
|
makeTupleAccess(value: string, index: number): LanguageExpression;
|
|
346
335
|
makeUnionSelector(value: string, valueType: string): LanguageStatement;
|
|
347
|
-
makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, _convertorIndex?: number, _runtimeTypeIndex?: number): LanguageExpression;
|
|
348
336
|
makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
|
|
349
337
|
makeUnionTypeDefaultInitializer(): LanguageExpression;
|
|
350
338
|
makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
|
|
@@ -357,15 +345,11 @@ export declare abstract class LanguageWriter {
|
|
|
357
345
|
makeNaryOp(op: string, args: LanguageExpression[]): LanguageExpression;
|
|
358
346
|
makeStatement(expr: LanguageExpression): LanguageStatement;
|
|
359
347
|
writeNativeMethodDeclaration(method: Method): void;
|
|
360
|
-
writeUnsafeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
|
|
361
348
|
pushIndent(): void;
|
|
362
349
|
popIndent(): void;
|
|
363
350
|
print(string: stringOrNone): void;
|
|
364
351
|
getOutput(): string[];
|
|
365
352
|
makeSignature(returnType: idl.IDLType, parameters: idl.IDLParameter[]): MethodSignature;
|
|
366
|
-
makeNamedSignature(returnType: idl.IDLType, parameters: idl.IDLParameter[]): NamedMethodSignature;
|
|
367
|
-
makeNativeMethodNamedSignature(returnType: idl.IDLType, parameters: idl.IDLParameter[]): NamedMethodSignature;
|
|
368
|
-
makeSerializerConstructorSignatures(): NamedMethodSignature[] | undefined;
|
|
369
353
|
mapFieldModifier(modifier: FieldModifier): string;
|
|
370
354
|
mapMethodModifier(modifier: MethodModifier): string;
|
|
371
355
|
/**
|
|
@@ -374,10 +358,6 @@ export declare abstract class LanguageWriter {
|
|
|
374
358
|
makeUnsafeCast(param: string): string;
|
|
375
359
|
makeUnsafeCast_(value: LanguageExpression, type: idl.IDLType, typeOptions?: PrintHint): string;
|
|
376
360
|
runtimeType(param: ArgConvertor, valueType: string, value: string): void;
|
|
377
|
-
makeDiscriminatorFromFields(convertor: {
|
|
378
|
-
targetType: (writer: LanguageWriter) => string;
|
|
379
|
-
}, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
|
|
380
|
-
makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
|
|
381
361
|
makeEnumEntity(enumEntity: idl.IDLEnum, options: {
|
|
382
362
|
isExport: boolean;
|
|
383
363
|
isDeclare?: boolean;
|
|
@@ -385,9 +365,8 @@ export declare abstract class LanguageWriter {
|
|
|
385
365
|
makeFieldModifiersList(modifiers: FieldModifier[] | undefined, customFieldFilter?: (field: FieldModifier) => boolean): string;
|
|
386
366
|
escapeKeyword(keyword: string): string;
|
|
387
367
|
makeCastCustomObject(customName: string, _isGenericType: boolean): LanguageExpression;
|
|
388
|
-
makeHasOwnProperty(value: string,
|
|
389
|
-
|
|
390
|
-
makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
|
|
368
|
+
makeHasOwnProperty(value: string, property: string, propertyTypeName?: string): LanguageExpression;
|
|
369
|
+
discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
|
|
391
370
|
makeNot(expr: LanguageExpression): LanguageExpression;
|
|
392
371
|
makeSerializedBufferGetter(serializer: string): LanguageExpression;
|
|
393
372
|
makeEquals(args: LanguageExpression[]): LanguageExpression;
|
|
@@ -395,9 +374,8 @@ export declare abstract class LanguageWriter {
|
|
|
395
374
|
castToBoolean(value: string): string;
|
|
396
375
|
makeCallIsObject(value: string): LanguageExpression;
|
|
397
376
|
makeStaticBlock(op: (writer: LanguageWriter) => void): void;
|
|
398
|
-
instanceOf(
|
|
377
|
+
instanceOf(value: string, type: idl.IDLType): LanguageExpression;
|
|
399
378
|
typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
|
|
400
|
-
stringifyTypeOrEmpty(type: idl.IDLType | undefined): string;
|
|
401
379
|
/**
|
|
402
380
|
* Writes `namespace <namespace> {` and adds extra indent
|
|
403
381
|
* @param namespace Namespace to begin
|