@idlizer/core 2.1.9-arktscgen-8 → 2.1.10-arktscgen-2
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.d.ts +2 -1
- package/build/lib/src/IndentedPrinter.js +9 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +35 -26
- package/build/lib/src/LanguageWriters/ArgConvertors.js +152 -117
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +5 -4
- package/build/lib/src/LanguageWriters/LanguageWriter.js +16 -15
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +1 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +6 -6
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +6 -6
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +8 -1
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +28 -8
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +8 -8
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +6 -6
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +1 -1
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +7 -7
- package/build/lib/src/config.d.ts +132 -132
- package/build/lib/src/config.js +4 -4
- package/build/lib/src/configDescriber.js +1 -1
- package/build/lib/src/diagnosticmessages.d.ts +18 -12
- package/build/lib/src/diagnosticmessages.js +22 -14
- package/build/lib/src/diagnostictypes.d.ts +3 -9
- package/build/lib/src/formatter.d.ts +2 -1
- package/build/lib/src/formatter.js +3 -3
- package/build/lib/src/from-idl/deserialize.js +138 -6
- package/build/lib/src/from-idl/parser.d.ts +99 -0
- package/build/lib/src/from-idl/parser.js +939 -0
- package/build/lib/src/idl.d.ts +13 -1
- package/build/lib/src/idl.js +6 -0
- package/build/lib/src/index.d.ts +1 -0
- package/build/lib/src/index.js +1 -0
- package/build/lib/src/peer-generation/LayoutManager.d.ts +1 -1
- package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
- package/build/lib/src/peer-generation/Materialized.js +4 -4
- package/build/lib/src/peer-generation/PeerClass.d.ts +5 -0
- package/build/lib/src/peer-generation/PeerClass.js +2 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -0
- package/build/lib/src/peer-generation/PeerLibrary.js +8 -2
- package/build/lib/src/peer-generation/PeerMethod.d.ts +8 -2
- package/build/lib/src/peer-generation/PeerMethod.js +22 -4
- package/build/lib/src/peer-generation/modules.js +21 -6
- package/build/lib/src/util.d.ts +1 -0
- package/build/lib/src/util.js +5 -0
- package/package.json +10 -3
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.d.ts +0 -24
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.js +0 -69
- package/build/lib/src/peer-generation/isExternalType.d.ts +0 -4
- package/build/lib/src/peer-generation/isExternalType.js +0 -15
|
@@ -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 { getExtractor, hashCodeFromString, throwException, warn } from "../util";
|
|
20
|
+
import { capitalize, 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";
|
|
@@ -139,7 +139,7 @@ export class BooleanConvertor extends BaseArgConvertor {
|
|
|
139
139
|
return writer.castToBoolean(param);
|
|
140
140
|
}
|
|
141
141
|
convertorSerialize(param, value, printer) {
|
|
142
|
-
printer.
|
|
142
|
+
return printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeBoolean", [printer.makeString(value)]));
|
|
143
143
|
}
|
|
144
144
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
145
145
|
return assigneer(writer.makeString(`${deserializerName}.readBoolean()`));
|
|
@@ -161,7 +161,9 @@ export class UndefinedConvertor extends BaseArgConvertor {
|
|
|
161
161
|
convertorArg(param, writer) {
|
|
162
162
|
return writer.makeUndefined().asString();
|
|
163
163
|
}
|
|
164
|
-
convertorSerialize(param, value, printer) {
|
|
164
|
+
convertorSerialize(param, value, printer) {
|
|
165
|
+
return printer.makeStatement(printer.makeString(""));
|
|
166
|
+
}
|
|
165
167
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
166
168
|
return assigneer(writer.makeUndefined());
|
|
167
169
|
}
|
|
@@ -196,7 +198,7 @@ export class StringConvertor extends BaseArgConvertor {
|
|
|
196
198
|
: writer.escapeKeyword(param);
|
|
197
199
|
}
|
|
198
200
|
convertorSerialize(param, value, writer) {
|
|
199
|
-
writer.
|
|
201
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeString", [writer.makeString(value)]));
|
|
200
202
|
}
|
|
201
203
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
202
204
|
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readString()`), this.idlType, { optional: false }));
|
|
@@ -231,7 +233,7 @@ export class EnumConvertor extends BaseArgConvertor {
|
|
|
231
233
|
return writer.i32FromEnum(writer.makeString(writer.escapeKeyword(param)), this.enumEntry).asString();
|
|
232
234
|
}
|
|
233
235
|
convertorSerialize(param, value, writer) {
|
|
234
|
-
writer.
|
|
236
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry)]));
|
|
235
237
|
}
|
|
236
238
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
237
239
|
const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
|
|
@@ -279,8 +281,8 @@ export class NumberConvertor extends BaseArgConvertor {
|
|
|
279
281
|
? writer.makeUnsafeCast_(writer.makeString(`&${param}`), this.idlType, PrintHint.AsConstPointer)
|
|
280
282
|
: writer.escapeKeyword(param);
|
|
281
283
|
}
|
|
282
|
-
convertorSerialize(param, value,
|
|
283
|
-
|
|
284
|
+
convertorSerialize(param, value, writer) {
|
|
285
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeNumber", [writer.makeString(value)]));
|
|
284
286
|
}
|
|
285
287
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
286
288
|
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readNumber()`), this.idlType, { optional: false }));
|
|
@@ -304,8 +306,8 @@ export class NumericConvertor extends BaseArgConvertor {
|
|
|
304
306
|
convertorArg(param, writer) {
|
|
305
307
|
return param;
|
|
306
308
|
}
|
|
307
|
-
convertorSerialize(param, value,
|
|
308
|
-
|
|
309
|
+
convertorSerialize(param, value, writer) {
|
|
310
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `write${this.interopNameConvertor.convert(this.idlType)}`, [writer.makeString(value)]));
|
|
309
311
|
}
|
|
310
312
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
311
313
|
return assigneer(writer.makeString(`${deserializerName}.read${this.interopNameConvertor.convert(this.idlType)}()`));
|
|
@@ -320,6 +322,31 @@ export class NumericConvertor extends BaseArgConvertor {
|
|
|
320
322
|
return false;
|
|
321
323
|
}
|
|
322
324
|
}
|
|
325
|
+
// TODO use NumericConvertor when double is implemented as interop type
|
|
326
|
+
export class DoubleConvertor extends BaseArgConvertor {
|
|
327
|
+
constructor(param) {
|
|
328
|
+
// check numericPrimitiveTypes.include(type)
|
|
329
|
+
super(idl.IDLF64Type, [RuntimeType.NUMBER], false, true, param);
|
|
330
|
+
}
|
|
331
|
+
convertorArg(param, writer) {
|
|
332
|
+
return param;
|
|
333
|
+
}
|
|
334
|
+
convertorSerialize(param, value, writer) {
|
|
335
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `writeFloat64`, [writer.makeString(value)]));
|
|
336
|
+
}
|
|
337
|
+
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
338
|
+
return assigneer(writer.makeString(`${deserializerName}.readFloat64()`));
|
|
339
|
+
}
|
|
340
|
+
nativeType() {
|
|
341
|
+
return this.idlType;
|
|
342
|
+
}
|
|
343
|
+
interopType() {
|
|
344
|
+
return this.idlType;
|
|
345
|
+
}
|
|
346
|
+
isPointerType() {
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
323
350
|
export class BigIntToU64Convertor extends BaseArgConvertor {
|
|
324
351
|
constructor(param) {
|
|
325
352
|
super(idl.IDLBigintType, [RuntimeType.BIGINT], false, false, param);
|
|
@@ -327,8 +354,8 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
|
|
|
327
354
|
convertorArg(param, writer) {
|
|
328
355
|
return writer.escapeKeyword(param);
|
|
329
356
|
}
|
|
330
|
-
convertorSerialize(param, value,
|
|
331
|
-
|
|
357
|
+
convertorSerialize(param, value, writer) {
|
|
358
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `writeInt64`, [writer.makeString(value)]));
|
|
332
359
|
}
|
|
333
360
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
334
361
|
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readInt64()`), this.idlType, { optional: false }));
|
|
@@ -359,13 +386,8 @@ export class ObjectConvertor extends BaseArgConvertor {
|
|
|
359
386
|
convertorArg(param, writer) {
|
|
360
387
|
return writer.escapeKeyword(param);
|
|
361
388
|
}
|
|
362
|
-
convertorSerialize(param, value,
|
|
363
|
-
|
|
364
|
-
printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
|
|
365
|
-
}
|
|
366
|
-
else {
|
|
367
|
-
printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
|
|
368
|
-
}
|
|
389
|
+
convertorSerialize(param, value, writer) {
|
|
390
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, writer.language === Language.CPP ? `writeObject` : "holdAndWriteObject", [writer.makeString(value)]));
|
|
369
391
|
}
|
|
370
392
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
371
393
|
return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
|
|
@@ -394,8 +416,8 @@ export class PointerConvertor extends BaseArgConvertor {
|
|
|
394
416
|
convertorArg(param, writer) {
|
|
395
417
|
return param;
|
|
396
418
|
}
|
|
397
|
-
convertorSerialize(param, value,
|
|
398
|
-
|
|
419
|
+
convertorSerialize(param, value, writer) {
|
|
420
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeString(value)]));
|
|
399
421
|
}
|
|
400
422
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
401
423
|
return assigneer(writer.makeString(`${deserializerName}.readPointer()`));
|
|
@@ -417,8 +439,8 @@ export class BufferConvertor extends BaseArgConvertor {
|
|
|
417
439
|
convertorArg(param, _) {
|
|
418
440
|
return param;
|
|
419
441
|
}
|
|
420
|
-
convertorSerialize(param, value,
|
|
421
|
-
|
|
442
|
+
convertorSerialize(param, value, writer) {
|
|
443
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeBuffer", [writer.makeString(value)]));
|
|
422
444
|
}
|
|
423
445
|
convertorDeserialize(_, deserializerName, assigneer, writer) {
|
|
424
446
|
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readBuffer()`), this.idlType, { optional: false }));
|
|
@@ -455,12 +477,16 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
455
477
|
throw new Error("Do not use for aggregates");
|
|
456
478
|
}
|
|
457
479
|
convertorSerialize(param, value, printer) {
|
|
458
|
-
this.memberConvertors.
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
480
|
+
const stmts = this.memberConvertors.flatMap((it, index) => {
|
|
481
|
+
const memberName = this.members[index][0];
|
|
482
|
+
const memberAccess = `${value}.${printer.escapeKeyword(memberName)}`;
|
|
483
|
+
const memberMangledName = `${value}${capitalize(memberName)}`;
|
|
484
|
+
return [
|
|
485
|
+
printer.makeAssign(memberMangledName, undefined, printer.makeString(memberAccess), true),
|
|
486
|
+
it.convertorSerialize(param, memberMangledName, printer)
|
|
487
|
+
];
|
|
463
488
|
});
|
|
489
|
+
return printer.makeBlock(stmts, false);
|
|
464
490
|
}
|
|
465
491
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
466
492
|
const statements = [];
|
|
@@ -475,7 +501,8 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
475
501
|
for (let i = 0; i < this.decl.properties.length; i++) {
|
|
476
502
|
const prop = this.decl.properties[i];
|
|
477
503
|
const propConvertor = this.memberConvertors[i];
|
|
478
|
-
|
|
504
|
+
const propName = `${bufferName}${capitalize(prop.name)}`;
|
|
505
|
+
statements.push(propConvertor.convertorDeserialize(`${propName}TempBuf`, deserializerName, (expr) => {
|
|
479
506
|
if (writer.language === Language.CPP) {
|
|
480
507
|
// prefix initialization for CPP, just easier. Waiting for easy work with nullables
|
|
481
508
|
return writer.makeAssign(`${bufferName}.${writer.escapeKeyword(prop.name)}`, undefined, expr, false);
|
|
@@ -484,7 +511,7 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
484
511
|
* todo: check UnionType name creation for union of unnamed nodes (isNamedNode() == false)
|
|
485
512
|
*/
|
|
486
513
|
const memberType = idl.maybeOptional(prop.type, prop.isOptional);
|
|
487
|
-
return writer.makeAssign(
|
|
514
|
+
return writer.makeAssign(propName, memberType, expr, true, true);
|
|
488
515
|
}, writer));
|
|
489
516
|
}
|
|
490
517
|
if (writer.language === Language.CPP) {
|
|
@@ -502,7 +529,7 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
502
529
|
}
|
|
503
530
|
else {
|
|
504
531
|
const resultExpression = this.makeAssigneeExpression(this.decl.properties.map(prop => {
|
|
505
|
-
return [prop.name, writer.makeString(`${bufferName}
|
|
532
|
+
return [prop.name, writer.makeString(`${bufferName}${capitalize(prop.name)}`)];
|
|
506
533
|
}), writer);
|
|
507
534
|
statements.push(assigneer(resultExpression));
|
|
508
535
|
}
|
|
@@ -537,10 +564,13 @@ export class TupleConvertor extends AggregateConvertor {
|
|
|
537
564
|
throw new Error("Must never be used");
|
|
538
565
|
}
|
|
539
566
|
convertorSerialize(param, value, printer) {
|
|
540
|
-
this.memberConvertors.
|
|
541
|
-
|
|
542
|
-
|
|
567
|
+
const stmts = this.memberConvertors.flatMap((it, index) => {
|
|
568
|
+
return [
|
|
569
|
+
printer.makeAssign(`${value}_${index}`, undefined, printer.makeTupleAccess(value, index), true),
|
|
570
|
+
it.convertorSerialize(param, `${value}_${index}`, printer)
|
|
571
|
+
];
|
|
543
572
|
});
|
|
573
|
+
return printer.makeBlock(stmts, false);
|
|
544
574
|
}
|
|
545
575
|
makeAssigneeExpression(fields, writer) {
|
|
546
576
|
return writer.makeCast(writer.makeString(`[${fields.map(it => it[1].asString()).join(', ')}]`), this.idlType);
|
|
@@ -571,10 +601,10 @@ export class InterfaceConvertor extends BaseArgConvertor {
|
|
|
571
601
|
convertorArg(param, writer) {
|
|
572
602
|
throw new Error("Must never be used");
|
|
573
603
|
}
|
|
574
|
-
convertorSerialize(param, value,
|
|
604
|
+
convertorSerialize(param, value, writer) {
|
|
575
605
|
const accessor = getSerializerName(this.declaration);
|
|
576
|
-
|
|
577
|
-
|
|
606
|
+
writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
607
|
+
return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(value)]));
|
|
578
608
|
}
|
|
579
609
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
580
610
|
const accessor = getSerializerName(this.declaration);
|
|
@@ -623,26 +653,27 @@ export class ArrayConvertor extends BaseArgConvertor {
|
|
|
623
653
|
throw new Error("Must never be used");
|
|
624
654
|
}
|
|
625
655
|
convertorSerialize(param, value, printer) {
|
|
656
|
+
const statements = [];
|
|
626
657
|
// Array length.
|
|
627
658
|
const valueLength = printer.makeArrayLength(value).asString();
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
printer.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
printer.
|
|
659
|
+
statements.push(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt32", [printer.makeString(printer.castToInt(valueLength, 32))])));
|
|
660
|
+
const loopCounter = `${value}CounterI`;
|
|
661
|
+
const elementName = `${value}TmpElement`;
|
|
662
|
+
statements.push(printer.makeLoop(loopCounter, valueLength, printer.makeBlock([
|
|
663
|
+
printer.makeAssign(elementName, this.elementType, printer.makeArrayAccess(value, loopCounter), true),
|
|
664
|
+
this.elementConvertor.convertorSerialize(param, elementName, printer)
|
|
665
|
+
], false)));
|
|
666
|
+
return printer.makeBlock(statements, false);
|
|
636
667
|
}
|
|
637
668
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
638
|
-
const lengthBuffer = `${bufferName}
|
|
639
|
-
const counterBuffer = `${bufferName}
|
|
669
|
+
const lengthBuffer = `${bufferName}Length`;
|
|
670
|
+
const counterBuffer = `${bufferName}BufCounterI`;
|
|
640
671
|
const statements = [];
|
|
641
672
|
const arrayType = this.idlType;
|
|
642
673
|
statements.push(writer.makeAssign(lengthBuffer, idl.IDLI32Type, writer.makeString(`${deserializerName}.readInt32()`), true));
|
|
643
674
|
statements.push(writer.makeAssign(bufferName, arrayType, writer.makeArrayInit(this.type, lengthBuffer), true, false));
|
|
644
675
|
statements.push(writer.makeArrayResize(bufferName, writer.getNodeName(arrayType), lengthBuffer, deserializerName));
|
|
645
|
-
statements.push(writer.makeLoop(counterBuffer, lengthBuffer, this.elementConvertor.convertorDeserialize(`${bufferName}
|
|
676
|
+
statements.push(writer.makeLoop(counterBuffer, lengthBuffer, this.elementConvertor.convertorDeserialize(`${bufferName}TempBuf`, deserializerName, (expr) => {
|
|
646
677
|
return writer.makeAssign(writer.makeArrayAccess(bufferName, counterBuffer).asString(), undefined, expr, false);
|
|
647
678
|
}, writer)));
|
|
648
679
|
statements.push(assigneer(writer.makeString(bufferName)));
|
|
@@ -680,20 +711,22 @@ export class MapConvertor extends BaseArgConvertor {
|
|
|
680
711
|
convertorSerialize(param, value, printer) {
|
|
681
712
|
// Map size.
|
|
682
713
|
const mapSize = printer.makeMapSize(value);
|
|
683
|
-
printer.
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
714
|
+
return printer.makeBlock([
|
|
715
|
+
printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt32", [printer.makeString(printer.castToInt(mapSize.asString(), 32))])),
|
|
716
|
+
printer.makeMapForEach(value, `${value}KeyVar`, `${value}ValueVar`, [
|
|
717
|
+
this.keyConvertor.convertorSerialize(param, `${value}KeyVar`, printer),
|
|
718
|
+
this.valueConvertor.convertorSerialize(param, `${value}ValueVar`, printer)
|
|
719
|
+
])
|
|
720
|
+
], false);
|
|
688
721
|
}
|
|
689
722
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
690
723
|
const mapTypeName = writer.getNodeName(this.idlType);
|
|
691
724
|
const keyType = this.keyType;
|
|
692
725
|
const valueType = this.valueType;
|
|
693
|
-
const sizeBuffer = `${bufferName}
|
|
694
|
-
const keyBuffer = `${bufferName}
|
|
695
|
-
const valueBuffer = `${bufferName}
|
|
696
|
-
const counterBuffer = `${bufferName}
|
|
726
|
+
const sizeBuffer = `${bufferName}SizeVar`;
|
|
727
|
+
const keyBuffer = `${bufferName}KeyVar`;
|
|
728
|
+
const valueBuffer = `${bufferName}ValueVar`;
|
|
729
|
+
const counterBuffer = `${bufferName}IVar`;
|
|
697
730
|
const keyAccessor = this.getObjectAccessor(writer.language, bufferName, { index: counterBuffer, field: "keys" });
|
|
698
731
|
const valueAccessor = this.getObjectAccessor(writer.language, bufferName, { index: counterBuffer, field: "values" });
|
|
699
732
|
return new BlockStatement([
|
|
@@ -701,10 +734,10 @@ export class MapConvertor extends BaseArgConvertor {
|
|
|
701
734
|
writer.makeAssign(bufferName, this.idlType, writer.makeMapInit(this.idlType), true, false),
|
|
702
735
|
writer.makeMapResize(mapTypeName, keyType, valueType, bufferName, sizeBuffer, deserializerName),
|
|
703
736
|
writer.makeLoop(counterBuffer, sizeBuffer, new BlockStatement([
|
|
704
|
-
this.keyConvertor.convertorDeserialize(`${keyBuffer}
|
|
737
|
+
this.keyConvertor.convertorDeserialize(`${keyBuffer}TempBuf`, deserializerName, (expr) => {
|
|
705
738
|
return writer.makeAssign(keyBuffer, keyType, expr, true, true);
|
|
706
739
|
}, writer),
|
|
707
|
-
this.valueConvertor.convertorDeserialize(`${valueBuffer}
|
|
740
|
+
this.valueConvertor.convertorDeserialize(`${valueBuffer}TempBuf`, deserializerName, (expr) => {
|
|
708
741
|
return writer.makeAssign(valueBuffer, valueType, expr, true, true);
|
|
709
742
|
}, writer),
|
|
710
743
|
writer.makeMapInsert(keyAccessor, keyBuffer, valueAccessor, valueBuffer),
|
|
@@ -742,17 +775,17 @@ export class DateConvertor extends BaseArgConvertor {
|
|
|
742
775
|
}
|
|
743
776
|
convertorSerialize(param, value, writer) {
|
|
744
777
|
if (writer.language === Language.CPP) {
|
|
745
|
-
writer.
|
|
778
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt64", [writer.makeString(value)]));
|
|
746
779
|
}
|
|
747
780
|
else if (writer.language === Language.CJ) {
|
|
748
|
-
writer.
|
|
749
|
-
writer.makeCast(writer.makeString(`${value}`), idl.IDLI64Type)
|
|
750
|
-
]);
|
|
781
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt64", [
|
|
782
|
+
writer.makeCast(writer.makeString(`${value}`), idl.IDLI64Type)
|
|
783
|
+
]));
|
|
751
784
|
}
|
|
752
785
|
else {
|
|
753
|
-
writer.
|
|
754
|
-
writer.makeCast(writer.makeString(`${value}.getTime()`), idl.IDLI64Type)
|
|
755
|
-
]);
|
|
786
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeInt64", [
|
|
787
|
+
writer.makeCast(writer.makeString(`${value}.getTime()`), idl.IDLI64Type)
|
|
788
|
+
]));
|
|
756
789
|
}
|
|
757
790
|
}
|
|
758
791
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
@@ -787,7 +820,7 @@ export class ProxyConvertor extends BaseArgConvertor {
|
|
|
787
820
|
return this.convertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
|
|
788
821
|
}
|
|
789
822
|
convertorSerialize(param, value, printer) {
|
|
790
|
-
this.convertor.convertorSerialize(param, value, printer);
|
|
823
|
+
return this.convertor.convertorSerialize(param, value, printer);
|
|
791
824
|
}
|
|
792
825
|
nativeType() {
|
|
793
826
|
return this.convertor.nativeType();
|
|
@@ -822,7 +855,7 @@ export class CustomTypeConvertor extends BaseArgConvertor {
|
|
|
822
855
|
}
|
|
823
856
|
/** todo: check */
|
|
824
857
|
convertorSerialize(param, value, printer) {
|
|
825
|
-
printer.
|
|
858
|
+
return printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `writeCustomObject`, [printer.makeString(`"${this.customTypeName}"`), printer.makeCastCustomObject(value, this.isGenericType)]));
|
|
826
859
|
}
|
|
827
860
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
828
861
|
const type = writer.language === Language.CPP
|
|
@@ -863,18 +896,12 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
863
896
|
throw new Error("Must never be used");
|
|
864
897
|
}
|
|
865
898
|
convertorSerialize(param, value, printer) {
|
|
866
|
-
|
|
867
|
-
printer.
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
printer.popIndent();
|
|
873
|
-
printer.print('} else {');
|
|
874
|
-
printer.pushIndent();
|
|
875
|
-
printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.UNDEFINED).asString()]);
|
|
876
|
-
printer.popIndent();
|
|
877
|
-
printer.print('}');
|
|
899
|
+
const valueValue = `${value}TmpValue`.replaceAll('.', '_');
|
|
900
|
+
return printer.makeCondition(printer.makeDefinedCheck(value), new BlockStatement([
|
|
901
|
+
printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.OBJECT)])),
|
|
902
|
+
printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true),
|
|
903
|
+
this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer)
|
|
904
|
+
], true, false), new BlockStatement([printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.UNDEFINED)]))], true, false));
|
|
878
905
|
}
|
|
879
906
|
convertorCArg(param) {
|
|
880
907
|
throw new Error("Must never be used");
|
|
@@ -891,7 +918,7 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
891
918
|
? `${bufferName}.value` : bufferName;
|
|
892
919
|
return writer.makeAssign(receiver, undefined, expr, false);
|
|
893
920
|
}, writer)
|
|
894
|
-
]);
|
|
921
|
+
], true, false);
|
|
895
922
|
statements.push(writer.makeSetOptionTag(bufferName, writer.makeCast(writer.makeString(runtimeBufferName), writer.getTagType())));
|
|
896
923
|
statements.push(writer.makeCondition(writer.makeRuntimeTypeDefinedCheck(runtimeBufferName), thenStatement));
|
|
897
924
|
statements.push(assigneer(writer.makeString(bufferName)));
|
|
@@ -924,23 +951,23 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
924
951
|
throw new Error("Do not use for union");
|
|
925
952
|
}
|
|
926
953
|
convertorSerialize(param, value, printer) {
|
|
927
|
-
this.memberConvertors.
|
|
928
|
-
const
|
|
929
|
-
const
|
|
930
|
-
printer.
|
|
931
|
-
printer.pushIndent();
|
|
932
|
-
printer.writeMethodCall(`${param}Serializer`, "writeInt8", [printer.castToInt(index.toString(), 8)]);
|
|
954
|
+
const branches = this.memberConvertors.map((it, index) => {
|
|
955
|
+
const discriminator = this.unionChecker.makeDiscriminator(value, index, printer);
|
|
956
|
+
const statements = [];
|
|
957
|
+
statements.push(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeString(printer.castToInt(index.toString(), 8))])));
|
|
933
958
|
if (!(it instanceof UndefinedConvertor)) {
|
|
934
|
-
|
|
935
|
-
it.
|
|
959
|
+
const varName = `${value}ForIdx${index}`;
|
|
960
|
+
statements.push(printer.makeAssign(varName, undefined, printer.makeUnionVariantCast(it.getObjectAccessor(printer.language, value), printer.getNodeName(it.idlType), it, index), true));
|
|
961
|
+
statements.push(it.convertorSerialize(param, varName, printer));
|
|
936
962
|
}
|
|
937
|
-
|
|
938
|
-
|
|
963
|
+
const stmt = new BlockStatement(statements, false);
|
|
964
|
+
return { expr: discriminator, stmt };
|
|
939
965
|
});
|
|
966
|
+
return printer.makeMultiBranchCondition(branches);
|
|
940
967
|
}
|
|
941
968
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
942
969
|
const statements = [];
|
|
943
|
-
let selectorBuffer = `${bufferName}
|
|
970
|
+
let selectorBuffer = `${bufferName}UnionSelector`;
|
|
944
971
|
const maybeOptionalUnion = writer.language === Language.CPP || writer.language == Language.CJ
|
|
945
972
|
? this.type
|
|
946
973
|
: idl.createOptionalType(this.type);
|
|
@@ -953,7 +980,7 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
953
980
|
const expr = writer.makeString(`${selectorBuffer} == ${writer.castToInt(index.toString(), 8)}`);
|
|
954
981
|
const stmt = new BlockStatement([
|
|
955
982
|
writer.makeSetUnionSelector(bufferName, `${index}`),
|
|
956
|
-
it.convertorDeserialize(`${bufferName}
|
|
983
|
+
it.convertorDeserialize(`${bufferName}BufU`, deserializerName, (expr) => {
|
|
957
984
|
if (writer.language == Language.CJ || writer.language == Language.KOTLIN) {
|
|
958
985
|
return writer.makeAssign(receiver, undefined, writer.makeFunctionCall(writer.getNodeName(this.type), [expr]), false);
|
|
959
986
|
}
|
|
@@ -991,13 +1018,13 @@ export class FunctionConvertor extends BaseArgConvertor {
|
|
|
991
1018
|
this.library = library;
|
|
992
1019
|
}
|
|
993
1020
|
convertorArg(param, writer) {
|
|
994
|
-
|
|
1021
|
+
throw new Error('Shall not be used');
|
|
995
1022
|
}
|
|
996
1023
|
convertorSerialize(param, value, writer) {
|
|
997
|
-
|
|
1024
|
+
throw new Error('Shall not be used');
|
|
998
1025
|
}
|
|
999
1026
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1000
|
-
|
|
1027
|
+
throw new Error('Shall not be used');
|
|
1001
1028
|
}
|
|
1002
1029
|
nativeType() {
|
|
1003
1030
|
return idl.IDLFunctionType;
|
|
@@ -1034,7 +1061,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
1034
1061
|
convertorSerialize(param, value, printer) {
|
|
1035
1062
|
const accessorRoot = getSerializerName(this.declaration);
|
|
1036
1063
|
printer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
|
|
1037
|
-
printer.
|
|
1064
|
+
return printer.makeStatement(printer.makeStaticMethodCall(accessorRoot, 'write', [printer.makeString(`${param}Serializer`), printer.makeString(value)]));
|
|
1038
1065
|
}
|
|
1039
1066
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1040
1067
|
const accessorRoot = getSerializerName(this.declaration);
|
|
@@ -1073,7 +1100,7 @@ export class ImportTypeConvertor extends BaseArgConvertor {
|
|
|
1073
1100
|
throw new Error("Must never be used");
|
|
1074
1101
|
}
|
|
1075
1102
|
convertorSerialize(param, value, printer) {
|
|
1076
|
-
printer.
|
|
1103
|
+
return printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeCustomObject", [printer.makeString(`"${this.importedName}"`), printer.makeString(value)]));
|
|
1077
1104
|
}
|
|
1078
1105
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1079
1106
|
return assigneer(writer.makeString(`${deserializerName}.readCustomObject("${this.importedName}")`));
|
|
@@ -1108,16 +1135,17 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1108
1135
|
}
|
|
1109
1136
|
convertorSerialize(param, value, writer) {
|
|
1110
1137
|
if (writer.language == Language.CPP) {
|
|
1111
|
-
writer.
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1138
|
+
return writer.makeBlock([
|
|
1139
|
+
writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writeCallbackResource", [writer.makeString(`${value}.resource`)])),
|
|
1140
|
+
writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.call`), idl.IDLPointerType, { unsafe: true })])),
|
|
1141
|
+
writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.callSync`), idl.IDLPointerType, { unsafe: true })]))
|
|
1142
|
+
], false);
|
|
1115
1143
|
}
|
|
1116
1144
|
if (this.isTransformed)
|
|
1117
1145
|
value = `CallbackTransformer.transformFrom${this.library.getInteropName(this.decl)}(${value})`;
|
|
1118
|
-
writer.
|
|
1146
|
+
return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallback`, [writer.makeString(`${value}`)]));
|
|
1119
1147
|
}
|
|
1120
|
-
convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion =
|
|
1148
|
+
convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion = true) {
|
|
1121
1149
|
if (writer.language == Language.CPP) {
|
|
1122
1150
|
const callerInvocation = writer.makeString(`getManagedCallbackCaller(${generateCallbackKindAccess(this.transformedDecl, writer.language)})`);
|
|
1123
1151
|
const callerSyncInvocation = writer.makeString(`getManagedCallbackCallerSync(${generateCallbackKindAccess(this.transformedDecl, writer.language)})`);
|
|
@@ -1132,12 +1160,12 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1132
1160
|
});
|
|
1133
1161
|
return assigneer(writer.makeString(`{${resourceReadExpr.asString()}, ${callReadExpr.asString()}, ${callSyncReadExpr.asString()}}`));
|
|
1134
1162
|
}
|
|
1135
|
-
const resourceName = bufferName + "
|
|
1136
|
-
const callName = bufferName + "
|
|
1137
|
-
const callSyncName = bufferName + '
|
|
1138
|
-
const argsSerializer = bufferName + "
|
|
1139
|
-
const continuationValueName = bufferName + "
|
|
1140
|
-
const continuationCallbackName = bufferName + "
|
|
1163
|
+
const resourceName = bufferName + "BufResource";
|
|
1164
|
+
const callName = bufferName + "BufCall";
|
|
1165
|
+
const callSyncName = bufferName + 'BufCallSync';
|
|
1166
|
+
const argsSerializer = bufferName + "BufArgs";
|
|
1167
|
+
const continuationValueName = bufferName + "BufContinuationValue";
|
|
1168
|
+
const continuationCallbackName = bufferName + "BufContinuationCallback";
|
|
1141
1169
|
const statements = [];
|
|
1142
1170
|
statements.push(writer.makeAssign(resourceName, idl.createReferenceType("CallbackResource"), writer.makeMethodCall(deserializerName, 'readCallbackResource', []), true));
|
|
1143
1171
|
statements.push(writer.makeAssign(callName, idl.IDLPointerType, writer.makeMethodCall(deserializerName, `readPointer`, []), true));
|
|
@@ -1160,7 +1188,7 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1160
1188
|
writer.makeAssign(continuationValueName, undefined, writer.makeString(`value`), false)
|
|
1161
1189
|
]), true),
|
|
1162
1190
|
new ProxyStatement(writer => {
|
|
1163
|
-
continuationConvertor.convertorSerialize(argsSerializer, continuationCallbackName, writer);
|
|
1191
|
+
writer.writeStatement(continuationConvertor.convertorSerialize(argsSerializer, continuationCallbackName, writer));
|
|
1164
1192
|
}),
|
|
1165
1193
|
];
|
|
1166
1194
|
}
|
|
@@ -1172,17 +1200,19 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1172
1200
|
...this.decl.parameters.map(it => {
|
|
1173
1201
|
const convertor = this.library.typeConvertor(it.name, it.type, it.isOptional);
|
|
1174
1202
|
return new ProxyStatement((writer) => {
|
|
1175
|
-
convertor.convertorSerialize(argsSerializer, writer.escapeKeyword(it.name), writer);
|
|
1203
|
+
writer.writeStatement(convertor.convertorSerialize(argsSerializer, writer.escapeKeyword(it.name), writer));
|
|
1176
1204
|
});
|
|
1177
1205
|
}),
|
|
1178
1206
|
...continuation,
|
|
1179
1207
|
new ExpressionStatement(useSyncVersion
|
|
1180
1208
|
? writer.makeNativeCall(this.interopModuleName, `_CallCallbackSync`, [
|
|
1209
|
+
writer.makeString(generatorConfiguration().ApiKind.toString()),
|
|
1181
1210
|
writer.makeString(generateCallbackKindValue(this.decl).toString()),
|
|
1182
1211
|
writer.makeSerializedBufferGetter(`${argsSerializer}Serializer`),
|
|
1183
1212
|
writer.makeString(`${argsSerializer}Serializer.length()`),
|
|
1184
1213
|
])
|
|
1185
1214
|
: writer.makeNativeCall(this.interopModuleName, `_CallCallback`, [
|
|
1215
|
+
writer.makeString(generatorConfiguration().ApiKind.toString()),
|
|
1186
1216
|
writer.makeString(generateCallbackKindValue(this.decl).toString()),
|
|
1187
1217
|
writer.makeSerializedBufferGetter(`${argsSerializer}Serializer`),
|
|
1188
1218
|
writer.makeString(`${argsSerializer}Serializer.length()`),
|
|
@@ -1267,13 +1297,18 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
|
|
|
1267
1297
|
}
|
|
1268
1298
|
convertorSerialize(param, value, writer) {
|
|
1269
1299
|
if (writer.language == Language.CPP) {
|
|
1270
|
-
this.callbackConvertor.convertorSerialize(param, value, writer);
|
|
1271
|
-
|
|
1300
|
+
return this.callbackConvertor.convertorSerialize(param, value, writer);
|
|
1301
|
+
}
|
|
1302
|
+
let serializeCallback;
|
|
1303
|
+
if (idl.isVoidType(this.promise.elementType[0])) {
|
|
1304
|
+
serializeCallback = writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallbackForPromiseVoid`, []);
|
|
1305
|
+
}
|
|
1306
|
+
else {
|
|
1307
|
+
serializeCallback = writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallbackForPromise<${writer.getNodeName(this.promise.elementType[0])}>`, []);
|
|
1272
1308
|
}
|
|
1273
|
-
|
|
1274
|
-
? writer.
|
|
1275
|
-
: writer.
|
|
1276
|
-
writer.writeStatement(writer.makeAssign(value, undefined, writer.language == Language.CJ ? writer.makeString(serializeCallback.asString().concat('.promise')) : writer.makeTupleAccess(serializeCallback.asString(), 0), true));
|
|
1309
|
+
return writer.makeAssign(value, undefined, writer.language == Language.CJ
|
|
1310
|
+
? writer.makeString(serializeCallback.asString().concat('.promise'))
|
|
1311
|
+
: writer.makeTupleAccess(serializeCallback.asString(), 0), true);
|
|
1277
1312
|
}
|
|
1278
1313
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
1279
1314
|
return this.callbackConvertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
|
|
@@ -84,8 +84,9 @@ export declare class ExpressionStatement implements LanguageStatement {
|
|
|
84
84
|
}
|
|
85
85
|
export declare class BlockStatement implements LanguageStatement {
|
|
86
86
|
statements: LanguageStatement[];
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
readonly inScope: boolean;
|
|
88
|
+
private newLine;
|
|
89
|
+
constructor(statements: LanguageStatement[], inScope?: boolean, newLine?: boolean);
|
|
89
90
|
write(writer: LanguageWriter): void;
|
|
90
91
|
}
|
|
91
92
|
export declare class IfStatement implements LanguageStatement {
|
|
@@ -131,7 +132,7 @@ export declare abstract class LambdaExpression implements LanguageExpression {
|
|
|
131
132
|
constructor(originalWriter: LanguageWriter, signature: MethodSignature, resolver: ReferenceResolver, body?: LanguageStatement[] | undefined);
|
|
132
133
|
protected abstract get statementHasSemicolon(): boolean;
|
|
133
134
|
abstract asString(): string;
|
|
134
|
-
bodyAsString(): string;
|
|
135
|
+
bodyAsString(isScoped?: boolean): string;
|
|
135
136
|
}
|
|
136
137
|
export declare enum ArgumentModifier {
|
|
137
138
|
OPTIONAL = 0
|
|
@@ -283,7 +284,7 @@ export declare abstract class LanguageWriter {
|
|
|
283
284
|
abstract makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
|
|
284
285
|
abstract makeLoop(counter: string, limit: string): LanguageStatement;
|
|
285
286
|
abstract makeLoop(counter: string, limit: string, statement: LanguageStatement): LanguageStatement;
|
|
286
|
-
abstract makeMapForEach(map: string, key: string, value: string,
|
|
287
|
+
abstract makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
|
|
287
288
|
abstract getTagType(): idl.IDLType;
|
|
288
289
|
abstract getRuntimeType(): idl.IDLType;
|
|
289
290
|
abstract makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
|