@idlizer/core 2.1.10-arktscgen-3 → 2.1.10-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/LanguageWriters/ArgConvertors.d.ts +14 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.js +60 -8
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +11 -3
- package/build/lib/src/LanguageWriters/LanguageWriter.js +11 -5
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +1 -1
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +9 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +3 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +12 -16
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +1 -1
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -3
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -2
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +15 -2
- package/build/lib/src/config.d.ts +760 -0
- package/build/lib/src/config.js +7 -0
- package/build/lib/src/formatter.js +5 -2
- package/build/lib/src/from-idl/DtsPrinter.js +2 -2
- package/build/lib/src/from-idl/common.js +2 -2
- package/build/lib/src/from-idl/deserialize.d.ts +3 -7
- package/build/lib/src/from-idl/deserialize.js +64 -38
- package/build/lib/src/from-idl/parser.d.ts +1 -1
- package/build/lib/src/from-idl/parser.js +29 -20
- package/build/lib/src/idl.d.ts +9 -1
- package/build/lib/src/idl.js +56 -10
- package/build/lib/src/index.d.ts +3 -1
- package/build/lib/src/index.js +3 -1
- package/build/lib/src/languageSpecificKeywords.js +1 -1
- package/build/lib/src/peer-generation/PeerLibrary.js +14 -4
- package/build/lib/src/peer-generation/isMaterialized.js +1 -1
- package/build/lib/src/peer-generation/modules.d.ts +10 -0
- package/build/lib/src/peer-generation/modules.js +27 -2
- package/build/lib/src/transformers/GenericTransformer.js +70 -5
- package/build/lib/src/transformers/NullTransformer.d.ts +3 -0
- package/build/lib/src/transformers/NullTransformer.js +33 -0
- package/build/lib/src/transformers/OnSerializeTransformer.d.ts +3 -0
- package/build/lib/src/transformers/OnSerializeTransformer.js +19 -0
- package/build/lib/src/util.d.ts +5 -0
- package/build/lib/src/util.js +13 -2
- package/package.json +5 -5
|
@@ -265,9 +265,9 @@ export declare class CustomTypeConvertor extends BaseArgConvertor {
|
|
|
265
265
|
isPointerType(): boolean;
|
|
266
266
|
}
|
|
267
267
|
export declare class OptionConvertor extends BaseArgConvertor {
|
|
268
|
-
type: idl.
|
|
268
|
+
type: idl.IDLOptionalType;
|
|
269
269
|
private readonly typeConvertor;
|
|
270
|
-
constructor(library: LibraryInterface, param: string, type: idl.
|
|
270
|
+
constructor(library: LibraryInterface, param: string, type: idl.IDLOptionalType);
|
|
271
271
|
convertorArg(param: string, writer: LanguageWriter): string;
|
|
272
272
|
convertorSerialize(param: string, value: string, printer: LanguageWriter): LanguageStatement;
|
|
273
273
|
convertorCArg(param: string): string;
|
|
@@ -343,5 +343,17 @@ export declare function generateCallbackKindAccess(callback: idl.IDLCallback, la
|
|
|
343
343
|
export declare function generateCallbackKindValue(callback: idl.IDLCallback): number;
|
|
344
344
|
export declare function generateCallbackAPIArguments(library: LibraryInterface, callback: idl.IDLCallback): string[];
|
|
345
345
|
export declare function maybeTransformManagedCallback(callback: idl.IDLCallback, library: ReferenceResolver): idl.IDLCallback | undefined;
|
|
346
|
+
export declare class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
347
|
+
protected library: PeerLibrary;
|
|
348
|
+
protected managedDeclaration: idl.IDLEntry;
|
|
349
|
+
protected target: idl.IDLType;
|
|
350
|
+
private targetConvertor;
|
|
351
|
+
constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, target: idl.IDLType);
|
|
352
|
+
isPointerType(): boolean;
|
|
353
|
+
nativeType(): idl.IDLType;
|
|
354
|
+
convertorArg(param: string, writer: LanguageWriter): string;
|
|
355
|
+
convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
|
|
356
|
+
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
357
|
+
}
|
|
346
358
|
export declare function createOutArgConvertor(library: PeerLibrary, type: idl.IDLType | undefined, otherParams: string[]): ArgConvertor | undefined;
|
|
347
359
|
//# sourceMappingURL=ArgConvertors.d.ts.map
|
|
@@ -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 { capitalize, getExtractor, hashCodeFromString, throwException, warn } from "../util";
|
|
20
|
+
import { capitalize, getExtractor, getTransformer, hashCodeFromString, throwException, warn } from "../util";
|
|
21
21
|
import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
|
|
22
22
|
import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
|
|
23
23
|
import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
@@ -579,7 +579,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
|
|
|
579
579
|
convertorSerialize(param, value, writer) {
|
|
580
580
|
const accessor = getSerializerName(this.declaration);
|
|
581
581
|
writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
582
|
-
return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(value)]));
|
|
582
|
+
return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(writer.escapeKeyword(value))]));
|
|
583
583
|
}
|
|
584
584
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
585
585
|
const accessor = getSerializerName(this.declaration);
|
|
@@ -851,7 +851,7 @@ export class CustomTypeConvertor extends BaseArgConvertor {
|
|
|
851
851
|
export class OptionConvertor extends BaseArgConvertor {
|
|
852
852
|
// TODO: be smarter here, and for smth like Length|undefined or number|undefined pass without serializer.
|
|
853
853
|
constructor(library, param, type) {
|
|
854
|
-
let conv = library.typeConvertor(param, type);
|
|
854
|
+
let conv = library.typeConvertor(param, type.type);
|
|
855
855
|
let currentConv = conv;
|
|
856
856
|
while (currentConv instanceof ProxyConvertor) {
|
|
857
857
|
currentConv = currentConv.convertor;
|
|
@@ -872,7 +872,7 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
872
872
|
}
|
|
873
873
|
convertorSerialize(param, value, printer) {
|
|
874
874
|
const valueValue = `${value}TmpValue`.replaceAll('.', '_');
|
|
875
|
-
return printer.makeCondition(printer.makeDefinedCheck(value), new BlockStatement([
|
|
875
|
+
return printer.makeCondition(printer.makeDefinedCheck(value, this.type), new BlockStatement([
|
|
876
876
|
printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.OBJECT)])),
|
|
877
877
|
printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true),
|
|
878
878
|
this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer)
|
|
@@ -886,7 +886,7 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
886
886
|
const statements = [];
|
|
887
887
|
statements.push(writer.makeAssign(runtimeBufferName, undefined, writer.makeCast(writer.makeString(`${deserializerName}.readInt8()`), writer.getRuntimeType()), true));
|
|
888
888
|
const bufferType = this.nativeType();
|
|
889
|
-
statements.push(writer.makeAssign(bufferName, bufferType,
|
|
889
|
+
statements.push(writer.makeAssign(bufferName, bufferType, writer.language === Language.CPP ? undefined : writer.makeNull(this.type), true, false)); // maybe change to generic None
|
|
890
890
|
const thenStatement = new BlockStatement([
|
|
891
891
|
this.typeConvertor.convertorDeserialize(`${bufferName}_`, deserializerName, (expr) => {
|
|
892
892
|
const receiver = writer.language === Language.CPP
|
|
@@ -900,10 +900,10 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
900
900
|
return writer.makeBlock(statements, false);
|
|
901
901
|
}
|
|
902
902
|
nativeType() {
|
|
903
|
-
return
|
|
903
|
+
return this.type;
|
|
904
904
|
}
|
|
905
905
|
interopType() {
|
|
906
|
-
return
|
|
906
|
+
return this.type;
|
|
907
907
|
}
|
|
908
908
|
isPointerType() {
|
|
909
909
|
return true;
|
|
@@ -1022,7 +1022,6 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
1022
1022
|
case Language.CPP:
|
|
1023
1023
|
return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
|
|
1024
1024
|
case Language.JAVA:
|
|
1025
|
-
case Language.KOTLIN:
|
|
1026
1025
|
case Language.CJ:
|
|
1027
1026
|
return `MaterializedBase.toPeerPtr(${writer.escapeKeyword(param)})`;
|
|
1028
1027
|
default:
|
|
@@ -1295,6 +1294,59 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
|
|
|
1295
1294
|
return true;
|
|
1296
1295
|
}
|
|
1297
1296
|
}
|
|
1297
|
+
export class TransformOnSerializeConvertor extends BaseArgConvertor {
|
|
1298
|
+
constructor(param, library, managedDeclaration, target) {
|
|
1299
|
+
const targetConvertor = library.typeConvertor(param, target);
|
|
1300
|
+
super(target, targetConvertor.runtimeTypes, false, targetConvertor.useArray, param);
|
|
1301
|
+
this.library = library;
|
|
1302
|
+
this.managedDeclaration = managedDeclaration;
|
|
1303
|
+
this.target = target;
|
|
1304
|
+
this.targetConvertor = targetConvertor;
|
|
1305
|
+
}
|
|
1306
|
+
isPointerType() {
|
|
1307
|
+
return this.targetConvertor.isPointerType();
|
|
1308
|
+
}
|
|
1309
|
+
nativeType() {
|
|
1310
|
+
return this.targetConvertor.nativeType();
|
|
1311
|
+
}
|
|
1312
|
+
convertorArg(param, writer) {
|
|
1313
|
+
throw new Error("Method not implemented.");
|
|
1314
|
+
}
|
|
1315
|
+
convertorSerialize(param, value, writer) {
|
|
1316
|
+
if (writer.language === Language.CPP) {
|
|
1317
|
+
return this.targetConvertor.convertorSerialize(param, value, writer);
|
|
1318
|
+
}
|
|
1319
|
+
if (idl.isReferenceType(this.target)) {
|
|
1320
|
+
writer.addFeature(this.target);
|
|
1321
|
+
}
|
|
1322
|
+
const transformerInfo = getTransformer(this.library, this.managedDeclaration, this.target);
|
|
1323
|
+
const transformCallExpression = transformerInfo.receiver
|
|
1324
|
+
? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(value)])
|
|
1325
|
+
: writer.makeFunctionCall(transformerInfo.method, [writer.makeString(value)]);
|
|
1326
|
+
const statements = [
|
|
1327
|
+
writer.makeAssign(`${value}Transformed`, this.target, transformCallExpression, true),
|
|
1328
|
+
this.targetConvertor.convertorSerialize(param, `${value}Transformed`, writer)
|
|
1329
|
+
];
|
|
1330
|
+
return writer.makeBlock(statements, false);
|
|
1331
|
+
}
|
|
1332
|
+
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1333
|
+
if (writer.language === Language.CPP) {
|
|
1334
|
+
return this.targetConvertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
|
|
1335
|
+
}
|
|
1336
|
+
if (idl.isReferenceType(this.target)) {
|
|
1337
|
+
writer.addFeature(this.target);
|
|
1338
|
+
}
|
|
1339
|
+
const targetDeserialize = this.targetConvertor.convertorDeserialize(`${bufferName}D`, deserializerName, (expr) => writer.makeAssign(`${bufferName}Deserialized`, this.target, expr, true), writer);
|
|
1340
|
+
const transformerInfo = getTransformer(this.library, this.target, this.managedDeclaration);
|
|
1341
|
+
const transformCallExpression = transformerInfo.receiver
|
|
1342
|
+
? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)])
|
|
1343
|
+
: writer.makeFunctionCall(transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)]);
|
|
1344
|
+
return writer.makeBlock([
|
|
1345
|
+
targetDeserialize,
|
|
1346
|
+
assigneer(transformCallExpression)
|
|
1347
|
+
], false);
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1298
1350
|
export function createOutArgConvertor(library, type, otherParams) {
|
|
1299
1351
|
if (type && idl.isContainerType(type) && idl.IDLContainerUtils.isPromise(type)) {
|
|
1300
1352
|
const param = (entropy) => `outputArgumentForReturningPromise${entropy || ''}`;
|
|
@@ -244,7 +244,15 @@ export declare abstract class LanguageWriter {
|
|
|
244
244
|
language: Language);
|
|
245
245
|
indentDepth(): number;
|
|
246
246
|
maybeSemicolon(): string;
|
|
247
|
-
features:
|
|
247
|
+
features: ({
|
|
248
|
+
type: "raw";
|
|
249
|
+
feature: string;
|
|
250
|
+
module: string;
|
|
251
|
+
} | {
|
|
252
|
+
type: "idl";
|
|
253
|
+
node: idl.IDLEntry | idl.IDLReferenceType;
|
|
254
|
+
})[];
|
|
255
|
+
addFeature(node: idl.IDLEntry | idl.IDLReferenceType): void;
|
|
248
256
|
addFeature(feature: string, module: string): void;
|
|
249
257
|
abstract writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
|
|
250
258
|
abstract writeEnum(name: string, members: {
|
|
@@ -316,7 +324,7 @@ export declare abstract class LanguageWriter {
|
|
|
316
324
|
writeStaticBlock(op: (writer: this) => void): void;
|
|
317
325
|
makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
|
|
318
326
|
makeThis(): LanguageExpression;
|
|
319
|
-
makeNull(
|
|
327
|
+
makeNull(type?: idl.IDLOptionalType): LanguageExpression;
|
|
320
328
|
makeVoid(): LanguageExpression;
|
|
321
329
|
makeLambdaReturn(expr?: LanguageExpression): LanguageStatement;
|
|
322
330
|
makeRuntimeTypeCondition(typeVarName: string, equals: boolean, type: RuntimeType, varName?: string): LanguageExpression;
|
|
@@ -330,7 +338,7 @@ export declare abstract class LanguageWriter {
|
|
|
330
338
|
makeNativeCall(nativeModule: NativeModuleType, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
|
|
331
339
|
makeBlock(statements: LanguageStatement[], inScope?: boolean): BlockStatement;
|
|
332
340
|
nativeReceiver(nativeModule: NativeModuleType): string;
|
|
333
|
-
abstract makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
|
|
341
|
+
abstract makeDefinedCheck(value: string, type?: idl.IDLOptionalType, isTag?: boolean): LanguageExpression;
|
|
334
342
|
makeRuntimeTypeDefinedCheck(runtimeType: string): LanguageExpression;
|
|
335
343
|
makeCondition(condition: LanguageExpression, thenStatement: LanguageStatement, elseStatement?: LanguageStatement, insideIfOp?: () => void, insideElseOp?: () => void): LanguageStatement;
|
|
336
344
|
makeMultiBranchCondition(conditions: BranchStatement[], elseStatement?: LanguageStatement): LanguageStatement;
|
|
@@ -278,8 +278,11 @@ export class LambdaExpression {
|
|
|
278
278
|
if (this.body) {
|
|
279
279
|
writer.writeStatement(new BlockStatement(this.body, isScoped, false));
|
|
280
280
|
}
|
|
281
|
-
writer.features.forEach((
|
|
282
|
-
|
|
281
|
+
writer.features.forEach((feature) => {
|
|
282
|
+
if (feature.type === "raw")
|
|
283
|
+
this.originalWriter.addFeature(feature.feature, feature.module);
|
|
284
|
+
else
|
|
285
|
+
this.originalWriter.addFeature(feature.node);
|
|
283
286
|
});
|
|
284
287
|
return writer.getOutput()
|
|
285
288
|
.map(line => (line.endsWith('{') || line.endsWith('}') || line.endsWith(';')) ? line : `${line};`)
|
|
@@ -421,8 +424,11 @@ export class LanguageWriter {
|
|
|
421
424
|
return this.printer.indentDepth();
|
|
422
425
|
}
|
|
423
426
|
maybeSemicolon() { return ";"; }
|
|
424
|
-
addFeature(
|
|
425
|
-
|
|
427
|
+
addFeature(featureOrNode, module) {
|
|
428
|
+
if (typeof featureOrNode === "string")
|
|
429
|
+
this.features.push({ type: "raw", feature: featureOrNode, module: module });
|
|
430
|
+
else
|
|
431
|
+
this.features.push({ type: "idl", node: featureOrNode });
|
|
426
432
|
}
|
|
427
433
|
// version of makeCast which uses TypeCheck.typeCast<T>(value) call for ETS language writer
|
|
428
434
|
// Use it only if TypeChecker class is added as import to the generated file
|
|
@@ -488,7 +494,7 @@ export class LanguageWriter {
|
|
|
488
494
|
makeThis() {
|
|
489
495
|
return new StringExpression("this");
|
|
490
496
|
}
|
|
491
|
-
makeNull(
|
|
497
|
+
makeNull(type) {
|
|
492
498
|
return new StringExpression("null");
|
|
493
499
|
}
|
|
494
500
|
makeVoid() {
|
|
@@ -149,7 +149,7 @@ export class CJTypeNameConvertor {
|
|
|
149
149
|
throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
|
|
150
150
|
}
|
|
151
151
|
callbackType(decl) {
|
|
152
|
-
const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${this.convert(it.type)}`);
|
|
152
|
+
const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${it.isOptional ? "?" : ""}${this.convert(it.type)}`);
|
|
153
153
|
return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
|
|
154
154
|
}
|
|
155
155
|
productType(decl, isTuple, includeFieldNames) {
|
|
@@ -46,7 +46,15 @@ export class TSTypeNameConvertor {
|
|
|
46
46
|
return node.name;
|
|
47
47
|
}
|
|
48
48
|
convertOptional(type) {
|
|
49
|
-
|
|
49
|
+
if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionOnlyNull)) {
|
|
50
|
+
return `${this.convert(type.type)} | null`;
|
|
51
|
+
}
|
|
52
|
+
else if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionWithNull)) {
|
|
53
|
+
return `${this.convert(type.type)} | null | undefined`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return `${this.convert(type.type)} | undefined`;
|
|
57
|
+
}
|
|
50
58
|
}
|
|
51
59
|
convertUnion(type) {
|
|
52
60
|
return type.types.
|
|
@@ -136,7 +136,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
136
136
|
makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
137
137
|
protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
|
|
138
138
|
makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
|
|
139
|
-
makeNull(
|
|
139
|
+
makeNull(): LanguageExpression;
|
|
140
140
|
getTagType(): idl.IDLType;
|
|
141
141
|
getRuntimeType(): idl.IDLType;
|
|
142
142
|
makeTupleAssign(receiver: string, fields: string[]): LanguageStatement;
|
|
@@ -158,6 +158,8 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
158
158
|
popNamespace(options: {
|
|
159
159
|
ident: boolean;
|
|
160
160
|
}): void;
|
|
161
|
+
instanceOf(value: string, type: idl.IDLType): LanguageExpression;
|
|
162
|
+
discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
|
|
161
163
|
castToInt(value: string, bitness: 8 | 32): string;
|
|
162
164
|
castToBoolean(value: string): string;
|
|
163
165
|
}
|
|
@@ -324,21 +324,6 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
324
324
|
this.writeDeclaration(name, signature, modifiers);
|
|
325
325
|
}
|
|
326
326
|
writeConstructorImplementation(className, signature, op, delegationCall, modifiers) {
|
|
327
|
-
var _a;
|
|
328
|
-
let i = 1;
|
|
329
|
-
while (signature.isArgOptional(signature.args.length - i)) {
|
|
330
|
-
let smallerSignature = signature.args.slice(0, -i);
|
|
331
|
-
this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${smallerSignature.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}) {`);
|
|
332
|
-
this.pushIndent();
|
|
333
|
-
let lessArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => this.escapeKeyword(signature.argName(i))).join(', ');
|
|
334
|
-
for (let idx = 0; idx < i; idx++) {
|
|
335
|
-
lessArgs = lessArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
|
|
336
|
-
}
|
|
337
|
-
this.print(`this(${lessArgs})`);
|
|
338
|
-
this.popIndent();
|
|
339
|
-
this.printer.print(`}`);
|
|
340
|
-
i += 1;
|
|
341
|
-
}
|
|
342
327
|
this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
|
|
343
328
|
this.pushIndent();
|
|
344
329
|
if (delegationCall) {
|
|
@@ -527,7 +512,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
527
512
|
makeMapInsert(keyAccessor, key, valueAccessor, value) {
|
|
528
513
|
return this.makeStatement(this.makeMethodCall(keyAccessor, "add", [this.makeString(key), this.makeString(value)]));
|
|
529
514
|
}
|
|
530
|
-
makeNull(
|
|
515
|
+
makeNull() {
|
|
531
516
|
return this.makeUndefined();
|
|
532
517
|
}
|
|
533
518
|
getTagType() {
|
|
@@ -574,6 +559,17 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
574
559
|
}
|
|
575
560
|
pushNamespace(namespace, options) { }
|
|
576
561
|
popNamespace(options) { }
|
|
562
|
+
instanceOf(value, type) {
|
|
563
|
+
return this.makeString(`${value} is ${this.getNodeName(type)}`);
|
|
564
|
+
}
|
|
565
|
+
discriminate(value, index, type, runtimeTypes) {
|
|
566
|
+
if (runtimeTypes.includes(RuntimeType.UNDEFINED)) {
|
|
567
|
+
return `${value}.isNone()`;
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
return `${value}.getSelector() == ${index}`;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
577
573
|
castToInt(value, bitness) {
|
|
578
574
|
return `Int${bitness}(${this.escapeKeyword(value)})`;
|
|
579
575
|
}
|
|
@@ -101,7 +101,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
101
101
|
makeCast(expr: LanguageExpression, node: IDLNode, options?: MakeCastOptions): LanguageExpression;
|
|
102
102
|
makePointerPropertyAccessExpression(expression: string, name: string): CppPointerPropertyAccessExpression;
|
|
103
103
|
writePrintLog(message: string): void;
|
|
104
|
-
makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
|
|
104
|
+
makeDefinedCheck(value: string, type?: idl.IDLOptionalType, isTag?: boolean): LanguageExpression;
|
|
105
105
|
makeSetUnionSelector(value: string, index: string): LanguageStatement;
|
|
106
106
|
makeSetOptionTag(value: string, tag: LanguageExpression): LanguageStatement;
|
|
107
107
|
getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
|
|
@@ -347,7 +347,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
347
347
|
writePrintLog(message) {
|
|
348
348
|
this.print(`printf("${message}\\n");`);
|
|
349
349
|
}
|
|
350
|
-
makeDefinedCheck(value, isTag) {
|
|
350
|
+
makeDefinedCheck(value, type, isTag) {
|
|
351
351
|
return this.makeString(isTag ? `${value} != ${PrimitiveTypeList.UndefinedTag}`
|
|
352
352
|
: `runtimeType(${value}) != ${PrimitiveTypeList.UndefinedRuntime}`);
|
|
353
353
|
}
|
|
@@ -176,9 +176,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
176
176
|
this.arrayConvertor = arrayConvertor;
|
|
177
177
|
}
|
|
178
178
|
pushNamespace(namespace, options) {
|
|
179
|
-
if (options.isDefault) {
|
|
180
|
-
this.print(`export default ${namespace}`);
|
|
181
|
-
}
|
|
182
179
|
super.pushNamespace(namespace, options);
|
|
183
180
|
}
|
|
184
181
|
fork(options) {
|
|
@@ -66,7 +66,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
66
66
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
67
67
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
68
68
|
private writeDeclaration;
|
|
69
|
-
makeNull(): LanguageExpression;
|
|
69
|
+
makeNull(type?: idl.IDLOptionalType): LanguageExpression;
|
|
70
70
|
makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
71
71
|
makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
72
72
|
makeThrowError(message: string): LanguageStatement;
|
|
@@ -80,7 +80,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
80
80
|
getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
81
81
|
makeUndefined(): LanguageExpression;
|
|
82
82
|
makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
83
|
-
makeDefinedCheck(value: string): LanguageExpression;
|
|
83
|
+
makeDefinedCheck(value: string, type?: idl.IDLOptionalType): LanguageExpression;
|
|
84
84
|
makeTupleAlloc(option: string): LanguageStatement;
|
|
85
85
|
makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
|
|
86
86
|
makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
|
|
@@ -127,6 +127,9 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
127
127
|
pushNamespace(namespace, options) {
|
|
128
128
|
this.namespaceStack.push(namespace);
|
|
129
129
|
const declaredPrefix = options.isDeclared ? "declare " : "";
|
|
130
|
+
if (options.isDefault) {
|
|
131
|
+
this.print(`export default ${namespace}`);
|
|
132
|
+
}
|
|
130
133
|
this.print(`export ${declaredPrefix}namespace ${namespace} {`);
|
|
131
134
|
if (options.ident)
|
|
132
135
|
this.pushIndent();
|
|
@@ -295,7 +298,9 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
295
298
|
const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && signature.isArgOptional(i) ? idl.maybeUnwrapOptionalType(it) : it);
|
|
296
299
|
this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${signature.isArgOptional(index) ? "?" : ``}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}${needBracket ? " {" : ""}`);
|
|
297
300
|
}
|
|
298
|
-
makeNull() {
|
|
301
|
+
makeNull(type) {
|
|
302
|
+
if (type && idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionOnlyNull))
|
|
303
|
+
return new StringExpression("null");
|
|
299
304
|
return new StringExpression("undefined");
|
|
300
305
|
}
|
|
301
306
|
makeAssign(variableName, type, expr, isDeclared = true, isConst = true, options) {
|
|
@@ -352,7 +357,15 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
352
357
|
makeRuntimeType(rt) {
|
|
353
358
|
return this.makeString(`RuntimeType.${RuntimeType[rt]}`);
|
|
354
359
|
}
|
|
355
|
-
makeDefinedCheck(value) {
|
|
360
|
+
makeDefinedCheck(value, type) {
|
|
361
|
+
if (type) {
|
|
362
|
+
if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionWithNull)) {
|
|
363
|
+
return this.makeString(`${value} !== undefined && ${value} !== null`);
|
|
364
|
+
}
|
|
365
|
+
else if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionOnlyNull)) {
|
|
366
|
+
return this.makeString(`${value} !== null`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
356
369
|
return this.makeString(`${value} !== undefined`);
|
|
357
370
|
}
|
|
358
371
|
makeTupleAlloc(option) {
|