@idlizer/core 2.1.9-arktscgen-5 → 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.
Files changed (58) hide show
  1. package/build/lib/src/Language.d.ts +0 -1
  2. package/build/lib/src/Language.js +7 -8
  3. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +4 -15
  4. package/build/lib/src/LanguageWriters/ArgConvertors.js +103 -102
  5. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +8 -30
  6. package/build/lib/src/LanguageWriters/LanguageWriter.js +15 -67
  7. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
  8. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +17 -1
  9. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +121 -6
  10. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +6 -0
  11. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -2
  12. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +3 -19
  13. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +0 -5
  14. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +0 -9
  15. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +3 -5
  16. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +9 -22
  17. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +6 -9
  18. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +23 -66
  19. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +1 -7
  20. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +4 -14
  21. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +11 -8
  22. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +116 -27
  23. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +4 -5
  24. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +10 -26
  25. package/build/lib/src/config.d.ts +336 -1
  26. package/build/lib/src/config.js +11 -3
  27. package/build/lib/src/diagnosticmessages.d.ts +45 -0
  28. package/build/lib/src/diagnosticmessages.js +66 -0
  29. package/build/lib/src/diagnostictypes.d.ts +140 -0
  30. package/build/lib/src/diagnostictypes.js +72 -0
  31. package/build/lib/src/formatter.d.ts +3 -0
  32. package/build/lib/src/formatter.js +98 -0
  33. package/build/lib/src/from-idl/deserialize.d.ts +1 -0
  34. package/build/lib/src/from-idl/deserialize.js +107 -5
  35. package/build/lib/src/idl.d.ts +7 -0
  36. package/build/lib/src/idl.js +15 -3
  37. package/build/lib/src/index.d.ts +7 -1
  38. package/build/lib/src/index.js +7 -1
  39. package/build/lib/src/peer-generation/Materialized.d.ts +4 -20
  40. package/build/lib/src/peer-generation/Materialized.js +9 -62
  41. package/build/lib/src/peer-generation/PeerClass.d.ts +0 -2
  42. package/build/lib/src/peer-generation/PeerClass.js +4 -6
  43. package/build/lib/src/peer-generation/PeerLibrary.js +1 -5
  44. package/build/lib/src/peer-generation/PeerMethod.d.ts +25 -27
  45. package/build/lib/src/peer-generation/PeerMethod.js +83 -93
  46. package/build/lib/src/peer-generation/idl/common.js +1 -1
  47. package/build/lib/src/peer-generation/isMaterialized.js +0 -4
  48. package/build/lib/src/peer-generation/modules.d.ts +1 -0
  49. package/build/lib/src/peer-generation/modules.js +4 -0
  50. package/build/lib/src/peer-generation/unions.d.ts +0 -2
  51. package/build/lib/src/peer-generation/unions.js +3 -23
  52. package/build/lib/src/transformers/FqnTransformer.d.ts +4 -0
  53. package/build/lib/src/transformers/FqnTransformer.js +17 -0
  54. package/build/lib/src/transformers/GenericTransformer.d.ts +8 -0
  55. package/build/lib/src/transformers/GenericTransformer.js +141 -0
  56. package/build/lib/src/util.d.ts +4 -2
  57. package/build/lib/src/util.js +21 -12
  58. package/package.json +2 -2
@@ -95,14 +95,6 @@ export class FieldAccessExpression {
95
95
  return `${this.receiver}${this.nullable ? "?" : ""}.${this.field}`;
96
96
  }
97
97
  }
98
- export class CheckDefinedExpression {
99
- constructor(value) {
100
- this.value = value;
101
- }
102
- asString() {
103
- return `${this.value} != undefined`;
104
- }
105
- }
106
98
  export class ProxyStatement {
107
99
  constructor(cb) {
108
100
  this.cb = cb;
@@ -121,7 +113,7 @@ export class AssignStatement {
121
113
  this.options = options;
122
114
  }
123
115
  write(writer) {
124
- var _a, _b;
116
+ var _a, _b, _c;
125
117
  if (this.isDeclared) {
126
118
  const typeSpec = ((_a = this.options) === null || _a === void 0 ? void 0 : _a.overrideTypeName)
127
119
  ? `: ${this.options.overrideTypeName}`
@@ -133,7 +125,9 @@ export class AssignStatement {
133
125
  writer.print(`${constSpec} ${this.variableName}${typeSpec} ${initValue}`);
134
126
  }
135
127
  else {
136
- writer.print(`${this.variableName} = ${(_b = this.expression) === null || _b === void 0 ? void 0 : _b.asString()}`);
128
+ const receiver = (_b = this.options) === null || _b === void 0 ? void 0 : _b.receiver;
129
+ const withReceiver = receiver ? `${receiver}.` : "";
130
+ writer.print(`${withReceiver}${this.variableName} = ${(_c = this.expression) === null || _c === void 0 ? void 0 : _c.asString()}`);
137
131
  }
138
132
  }
139
133
  }
@@ -228,19 +222,6 @@ export class MultiBranchIfStatement {
228
222
  }
229
223
  }
230
224
  }
231
- export class CheckOptionalStatement {
232
- constructor(undefinedValue, optionalExpression, doStatement) {
233
- this.undefinedValue = undefinedValue;
234
- this.optionalExpression = optionalExpression;
235
- this.doStatement = doStatement;
236
- }
237
- write(writer) {
238
- writer.print(`if (${this.optionalExpression.asString()} != ${this.undefinedValue})`);
239
- writer.pushIndent();
240
- this.doStatement.write(writer);
241
- writer.popIndent();
242
- }
243
- }
244
225
  // maybe rename or move of fix
245
226
  export class TsEnumEntityStatement {
246
227
  constructor(enumEntity, options) {
@@ -321,6 +302,7 @@ export var FieldModifier;
321
302
  FieldModifier[FieldModifier["FINAL"] = 5] = "FINAL";
322
303
  FieldModifier[FieldModifier["VOLATILE"] = 6] = "VOLATILE";
323
304
  FieldModifier[FieldModifier["INTERNAL"] = 7] = "INTERNAL";
305
+ FieldModifier[FieldModifier["OVERRIDE"] = 8] = "OVERRIDE";
324
306
  })(FieldModifier || (FieldModifier = {}));
325
307
  export var MethodModifier;
326
308
  (function (MethodModifier) {
@@ -509,9 +491,12 @@ export class LanguageWriter {
509
491
  makeVoid() {
510
492
  return this.makeUndefined();
511
493
  }
494
+ makeLambdaReturn(expr) {
495
+ return this.makeReturn(expr);
496
+ }
512
497
  makeRuntimeTypeCondition(typeVarName, equals, type, varName) {
513
498
  const op = equals ? "==" : "!=";
514
- return this.makeNaryOp(op, [this.makeRuntimeType(type), this.makeString(typeVarName)]);
499
+ return this.makeNaryOp(op, [this.makeString(typeVarName), this.makeRuntimeType(type)]);
515
500
  }
516
501
  makeValueFromOption(value, destinationConvertor) {
517
502
  return this.makeString(`${value}!`);
@@ -548,9 +533,6 @@ export class LanguageWriter {
548
533
  nativeReceiver(nativeModule) {
549
534
  return nativeModule.name;
550
535
  }
551
- makeDefinedCheck(value) {
552
- return new CheckDefinedExpression(value);
553
- }
554
536
  makeRuntimeTypeDefinedCheck(runtimeType) {
555
537
  return this.makeRuntimeTypeCondition(runtimeType, false, RuntimeType.UNDEFINED);
556
538
  }
@@ -575,9 +557,6 @@ export class LanguageWriter {
575
557
  makeUnionSelector(value, valueType) {
576
558
  return this.makeAssign(valueType, undefined, this.makeString(`runtimeType(${value})`), false);
577
559
  }
578
- makeUnionVariantCondition(_convertor, _valueName, valueType, type, _convertorIndex, _runtimeTypeIndex) {
579
- return this.makeString(`RuntimeType.${type.toUpperCase()} == ${valueType}`);
580
- }
581
560
  makeUnionVariantCast(value, type, convertor, index) {
582
561
  return this.makeString(`unsafeCast<${type}>(${value})`);
583
562
  }
@@ -616,9 +595,6 @@ export class LanguageWriter {
616
595
  writeNativeMethodDeclaration(method) {
617
596
  this.writeMethodDeclaration(method.name, method.signature);
618
597
  }
619
- writeUnsafeNativeMethodDeclaration(name, signature) {
620
- return;
621
- }
622
598
  pushIndent() {
623
599
  this.printer.pushIndent();
624
600
  }
@@ -634,18 +610,6 @@ export class LanguageWriter {
634
610
  makeSignature(returnType, parameters) {
635
611
  return new MethodSignature(returnType, parameters.map(it => it.type));
636
612
  }
637
- makeNamedSignature(returnType, parameters) {
638
- return NamedMethodSignature.make(returnType, parameters.map(it => ({
639
- name: it.name,
640
- type: it.isOptional ? idl.createOptionalType(it.type) : it.type
641
- })));
642
- }
643
- makeNativeMethodNamedSignature(returnType, parameters) {
644
- return this.makeNamedSignature(returnType, parameters);
645
- }
646
- makeSerializerConstructorSignatures() {
647
- return undefined;
648
- }
649
613
  mapFieldModifier(modifier) {
650
614
  return `${FieldModifier[modifier].toLowerCase()}`;
651
615
  }
@@ -664,12 +628,6 @@ export class LanguageWriter {
664
628
  runtimeType(param, valueType, value) {
665
629
  this.writeStatement(this.makeAssign(valueType, idl.IDLI32Type, this.makeFunctionCall("runtimeType", [this.makeString(value)]), false));
666
630
  }
667
- makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
668
- return this.makeString(`(${this.makeNaryOp("||", accessors.map(it => this.makeString(`${value}!.hasOwnProperty("${it}")`))).asString()})`);
669
- }
670
- makeIsTypeCall(value, decl) {
671
- return this.makeString(`is${decl.name}(${value})`);
672
- }
673
631
  makeEnumEntity(enumEntity, options) {
674
632
  return new TsEnumEntityStatement(enumEntity, { isExport: options.isExport, isDeclare: !!options.isDeclare });
675
633
  }
@@ -687,21 +645,16 @@ export class LanguageWriter {
687
645
  makeCastCustomObject(customName, _isGenericType) {
688
646
  return this.makeString(customName);
689
647
  }
690
- makeHasOwnProperty(value, _valueTypeName, property, propertyTypeName) {
648
+ makeHasOwnProperty(value, property, propertyTypeName) {
691
649
  const expressions = [this.makeString(`${value}.hasOwnProperty("${property}")`)];
692
650
  if (propertyTypeName) {
693
651
  expressions.push(this.makeString(`isInstanceOf("${propertyTypeName}", ${value}.${property})`));
694
652
  }
695
653
  return this.makeNaryOp("&&", expressions);
696
654
  }
697
- discriminatorFromExpressions(value, runtimeType, exprs) {
698
- return this.makeNaryOp("&&", [
699
- this.makeNaryOp("==", [this.makeRuntimeType(runtimeType), this.makeString(`${value}_type`)]),
700
- ...exprs
701
- ]);
702
- }
703
- makeDiscriminatorConvertor(_convertor, _value, _index) {
704
- return undefined;
655
+ discriminate(value, index, type, runtimeTypes) {
656
+ // return most common form, suitable for languages that don't have sum types
657
+ return `${value}.getSelector() == ${index}`;
705
658
  }
706
659
  makeNot(expr) {
707
660
  return this.makeString(`!(${expr.asString()})`);
@@ -720,18 +673,13 @@ export class LanguageWriter {
720
673
  makeStaticBlock(op) {
721
674
  op(this);
722
675
  }
723
- instanceOf(convertor, value, _duplicateMembers) {
724
- return this.makeString(`${value} instanceof ${this.getNodeName(convertor.idlType)}`);
676
+ instanceOf(value, type) {
677
+ return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
725
678
  }
726
679
  // The version of instanceOf() which does not use ArgConvertors
727
680
  typeInstanceOf(type, value, members) {
728
681
  return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
729
682
  }
730
- stringifyTypeOrEmpty(type) {
731
- if (type === undefined)
732
- return "";
733
- return this.getNodeName(type);
734
- }
735
683
  /**
736
684
  * Writes `namespace <namespace> {` and adds extra indent
737
685
  * @param namespace Namespace to begin
@@ -58,9 +58,9 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
58
58
  case idl.IDLU64Type:
59
59
  return 'int64';
60
60
  case idl.IDLF32Type:
61
- return 'float32';
61
+ return 'float';
62
62
  case idl.IDLF64Type:
63
- return 'float64';
63
+ return 'double';
64
64
  case idl.IDLNumberType:
65
65
  return 'number';
66
66
  case idl.IDLStringType: return 'string';
@@ -1,6 +1,7 @@
1
1
  import * as idl from '../../idl';
2
2
  import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
- import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
3
+ import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
+ import { InteropReturnTypeConvertor } from './InteropConvertors';
4
5
  export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
6
  protected resolver: ReferenceResolver;
6
7
  constructor(resolver: ReferenceResolver);
@@ -22,4 +23,19 @@ export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, I
22
23
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
23
24
  private callbackType;
24
25
  }
26
+ export declare class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
27
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
28
+ convertTypeReference(type: idl.IDLReferenceType): string;
29
+ }
30
+ export declare class KotlinCInteropArgConvertor implements TypeConvertor<string> {
31
+ convert(type: idl.IDLType): string;
32
+ convertContainer(type: idl.IDLContainerType): string;
33
+ convertImport(type: idl.IDLImport): string;
34
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
35
+ convertOptional(type: idl.IDLOptionalType): string;
36
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
37
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
38
+ convertTypeReference(type: idl.IDLReferenceType): string;
39
+ convertUnion(type: idl.IDLUnionType): string;
40
+ }
25
41
  //# sourceMappingURL=KotlinConvertors.d.ts.map
@@ -13,7 +13,11 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
17
+ import { isMaterialized } from '../../peer-generation/isMaterialized';
16
18
  import { convertNode, convertType } from '../nameConvertor';
19
+ import { removePoints } from './CJConvertors';
20
+ import { InteropReturnTypeConvertor } from './InteropConvertors';
17
21
  export class KotlinTypeNameConvertor {
18
22
  constructor(resolver) {
19
23
  this.resolver = resolver;
@@ -25,10 +29,10 @@ export class KotlinTypeNameConvertor {
25
29
  return node.name;
26
30
  }
27
31
  convertInterface(node) {
28
- return node.name;
32
+ return removePoints(idl.getQualifiedName(node, 'namespace.name'));
29
33
  }
30
34
  convertEnum(node) {
31
- return node.name;
35
+ return removePoints(idl.getQualifiedName(node, 'namespace.name'));
32
36
  }
33
37
  convertTypedef(node) {
34
38
  return node.name;
@@ -47,15 +51,15 @@ export class KotlinTypeNameConvertor {
47
51
  return `${this.convert(type.type)}?`;
48
52
  }
49
53
  convertUnion(type) {
50
- return type.name;
54
+ return "Union_" + type.types.map(it => generateSyntheticIdlNodeName(it)).join("_");
51
55
  }
52
56
  convertContainer(type) {
53
57
  if (idl.IDLContainerUtils.isSequence(type)) {
54
- return `Array<${convertType(this, type.elementType[0])}>`;
58
+ return `ArrayList<${convertType(this, type.elementType[0])}>`;
55
59
  }
56
60
  if (idl.IDLContainerUtils.isRecord(type)) {
57
61
  const stringes = type.elementType.slice(0, 2).map(it => convertType(this, it));
58
- return `Map<${stringes[0]}, ${stringes[1]}>`;
62
+ return `MutableMap<${stringes[0]}, ${stringes[1]}>`;
59
63
  }
60
64
  if (idl.IDLContainerUtils.isPromise(type)) {
61
65
  return `Any`;
@@ -76,7 +80,7 @@ export class KotlinTypeNameConvertor {
76
80
  }
77
81
  }
78
82
  if (decl) {
79
- return decl.name;
83
+ return removePoints(idl.getQualifiedName(decl, 'namespace.name'));
80
84
  }
81
85
  return this.convert(idl.IDLCustomObjectType);
82
86
  }
@@ -125,4 +129,115 @@ export class KotlinTypeNameConvertor {
125
129
  return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
126
130
  }
127
131
  }
132
+ const KBoolean = "KBoolean";
133
+ const KInt = "KInt";
134
+ const KLong = "KLong";
135
+ const KFloat = "KFloat";
136
+ const KNativePointer = "KNativePointer";
137
+ const KInteropNumber = "KInteropNumber";
138
+ const KStringPtr = "KStringPtr";
139
+ const KInteropReturnBuffer = "KInteropReturnBuffer";
140
+ const KInteropBuffer = "KInteropBuffer";
141
+ const KSerializerBuffer = "KSerializerBuffer";
142
+ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
143
+ convertPrimitiveType(type) {
144
+ switch (type) {
145
+ case idl.IDLI8Type:
146
+ case idl.IDLU8Type:
147
+ case idl.IDLI16Type:
148
+ case idl.IDLU16Type:
149
+ case idl.IDLI32Type:
150
+ case idl.IDLU32Type:
151
+ case idl.IDLI64Type:
152
+ case idl.IDLU64Type:
153
+ case idl.IDLF16Type:
154
+ case idl.IDLF32Type:
155
+ case idl.IDLF64Type: return KInt;
156
+ case idl.IDLNumberType: return KInteropNumber;
157
+ case idl.IDLBooleanType: return KBoolean;
158
+ case idl.IDLBigintType: return KLong;
159
+ case idl.IDLAnyType:
160
+ case idl.IDLThisType:
161
+ case idl.IDLUndefinedType:
162
+ case idl.IDLUnknownType:
163
+ case idl.IDLObjectType:
164
+ case idl.IDLVoidType: return idl.IDLVoidType.name;
165
+ case idl.IDLBufferType: return KInteropReturnBuffer;
166
+ case idl.IDLStringType: return KStringPtr;
167
+ case idl.IDLPointerType: return KNativePointer;
168
+ }
169
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
170
+ }
171
+ convertTypeReference(type) {
172
+ if (this.resolver != undefined && idl.isCallback(this.resolver.toDeclaration(type))) {
173
+ return KNativePointer;
174
+ }
175
+ if (type.name.endsWith("Attribute"))
176
+ return idl.IDLVoidType.name;
177
+ const decl = this.resolver.resolveTypeReference(type);
178
+ if (decl) {
179
+ // Callbacks and array types return by value
180
+ if (idl.isCallback(this.resolver.toDeclaration(type))) {
181
+ return type.name;
182
+ }
183
+ if (idl.isInterface(decl)) {
184
+ if (isMaterialized(decl, this.resolver)) {
185
+ return KNativePointer;
186
+ }
187
+ return KInteropReturnBuffer;
188
+ }
189
+ if (idl.isEnum(decl)) {
190
+ return KInt;
191
+ }
192
+ }
193
+ return idl.IDLVoidType.name;
194
+ }
195
+ }
196
+ export class KotlinCInteropArgConvertor {
197
+ convert(type) {
198
+ return convertType(this, type);
199
+ }
200
+ convertContainer(type) {
201
+ throw new Error(`Cannot pass container types through interop`);
202
+ }
203
+ convertImport(type) {
204
+ throw new Error(`Cannot pass import types through interop`);
205
+ }
206
+ convertTypeReferenceAsImport(type, importClause) {
207
+ throw new Error(`Cannot pass import types through interop`);
208
+ }
209
+ convertOptional(type) {
210
+ return KNativePointer;
211
+ }
212
+ convertPrimitiveType(type) {
213
+ switch (type) {
214
+ case idl.IDLI64Type: return KLong;
215
+ case idl.IDLU64Type: return KLong;
216
+ case idl.IDLI32Type: return KInt;
217
+ case idl.IDLU32Type: return KInt;
218
+ case idl.IDLF32Type: return KFloat;
219
+ case idl.IDLNumberType: return KInteropNumber;
220
+ case idl.IDLBigintType: return KLong;
221
+ case idl.IDLSerializerBuffer: return KSerializerBuffer;
222
+ case idl.IDLBooleanType:
223
+ case idl.IDLFunctionType: return KInt;
224
+ case idl.IDLStringType: return KStringPtr;
225
+ case idl.IDLBufferType: return KInteropBuffer;
226
+ case idl.IDLDate: return KLong;
227
+ case idl.IDLUndefinedType:
228
+ case idl.IDLVoidType:
229
+ case idl.IDLPointerType: return KNativePointer;
230
+ }
231
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
232
+ }
233
+ convertTypeParameter(type) {
234
+ throw new Error("Cannot pass type parameters through interop");
235
+ }
236
+ convertTypeReference(type) {
237
+ throw new Error(`Cannot pass type references through interop`);
238
+ }
239
+ convertUnion(type) {
240
+ throw new Error("Cannot pass union types through interop");
241
+ }
242
+ }
128
243
  //# sourceMappingURL=KotlinConvertors.js.map
@@ -13,6 +13,7 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
16
17
  import { convertNode, convertType } from '../nameConvertor';
17
18
  export class TSTypeNameConvertor {
18
19
  constructor(resolver) {
@@ -107,6 +108,11 @@ export class TSTypeNameConvertor {
107
108
  // (can not cast MyEnum to exact MyEnum.Value1)
108
109
  decl = decl.parent;
109
110
  }
111
+ let maybeRestoredGeneric = maybeRestoreGenerics(type, this.resolver);
112
+ if (maybeRestoredGeneric) {
113
+ type = maybeRestoredGeneric;
114
+ decl = this.resolver.resolveTypeReference(maybeRestoredGeneric);
115
+ }
110
116
  let typeSpec = type.name;
111
117
  let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
112
118
  if (typeSpec === `Optional`)
@@ -101,7 +101,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
101
101
  }, setter?: {
102
102
  method: Method;
103
103
  op: () => void;
104
- }): void;
104
+ }, initExpr?: LanguageExpression): void;
105
105
  writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
106
106
  writeSetterImplementation(method: Method, op: (writer: this) => void): void;
107
107
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
@@ -121,7 +121,6 @@ export declare class CJLanguageWriter extends LanguageWriter {
121
121
  makeThrowError(message: string): LanguageStatement;
122
122
  makeTernary(condition: LanguageExpression, trueExpression: LanguageExpression, falseExpression: LanguageExpression): LanguageExpression;
123
123
  makeReturn(expr: LanguageExpression): LanguageStatement;
124
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
125
124
  makeStatement(expr: LanguageExpression): LanguageStatement;
126
125
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
127
126
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
@@ -227,20 +227,6 @@ class CJThrowErrorStatement {
227
227
  writer.print(`throw Exception("${this.message}")`);
228
228
  }
229
229
  }
230
- class CJCheckOptionalStatement {
231
- constructor(undefinedValue, optionalExpression, doStatement) {
232
- this.undefinedValue = undefinedValue;
233
- this.optionalExpression = optionalExpression;
234
- this.doStatement = doStatement;
235
- }
236
- write(writer) {
237
- writer.print(`if (let Some(${this.optionalExpression.asString()}) <- ${this.optionalExpression.asString()}) {`);
238
- writer.pushIndent();
239
- this.doStatement.write(writer);
240
- writer.popIndent();
241
- writer.print('}');
242
- }
243
- }
244
230
  class CJArrayResizeStatement {
245
231
  constructor(array, arrayType, length, deserializer) {
246
232
  this.array = array;
@@ -377,7 +363,7 @@ export class CJLanguageWriter extends LanguageWriter {
377
363
  this.popIndent();
378
364
  this.printer.print(`}`);
379
365
  }
380
- writeProperty(propName, propType, modifiers, getter, setter) {
366
+ writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
381
367
  let containerName = propName.concat("_container");
382
368
  let truePropName = this.escapeKeyword(propName);
383
369
  if (getter) {
@@ -387,7 +373,8 @@ export class CJLanguageWriter extends LanguageWriter {
387
373
  }
388
374
  let isStatic = modifiers.includes(FieldModifier.STATIC);
389
375
  let isMutable = !modifiers.includes(FieldModifier.READONLY);
390
- this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}`);
376
+ let initializer = initExpr ? ` = ${initExpr.asString()}` : "";
377
+ this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}${initializer}`);
391
378
  if (getter) {
392
379
  this.print('{');
393
380
  this.pushIndent();
@@ -490,9 +477,6 @@ export class CJLanguageWriter extends LanguageWriter {
490
477
  makeReturn(expr) {
491
478
  return new ReturnStatement(expr);
492
479
  }
493
- makeCheckOptional(optional, doStatement) {
494
- return new CJCheckOptionalStatement("undefined", optional, doStatement);
495
- }
496
480
  makeStatement(expr) {
497
481
  return new ExpressionStatement(expr);
498
482
  }
@@ -8,11 +8,6 @@ export declare class CLikeReturnStatement extends ReturnStatement {
8
8
  constructor(expression: LanguageExpression);
9
9
  write(writer: LanguageWriter): void;
10
10
  }
11
- export declare class CDefinedExpression implements LanguageExpression {
12
- private value;
13
- constructor(value: string);
14
- asString(): string;
15
- }
16
11
  export declare class CLikeLoopStatement implements LanguageStatement {
17
12
  private counter;
18
13
  private limit;
@@ -12,7 +12,6 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
16
15
  import { ExpressionStatement, LanguageWriter, Method, ReturnStatement } from "../LanguageWriter";
17
16
  ////////////////////////////////////////////////////////////////
18
17
  // STATEMENTS //
@@ -26,14 +25,6 @@ export class CLikeReturnStatement extends ReturnStatement {
26
25
  writer.print(this.expression ? `return ${this.expression.asString()};` : "return;");
27
26
  }
28
27
  }
29
- export class CDefinedExpression {
30
- constructor(value) {
31
- this.value = value;
32
- }
33
- asString() {
34
- return `${this.value} != ${PrimitiveTypeList.UndefinedTag}`;
35
- }
36
- }
37
28
  export class CLikeLoopStatement {
38
29
  constructor(counter, limit, statement) {
39
30
  this.counter = counter;
@@ -1,7 +1,7 @@
1
1
  import { IDLContainerType, IDLEnum, IDLNode, IDLType, IDLTypedef } from '../../idl';
2
2
  import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
3
3
  import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
4
- import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs, DelegationCall, MethodStaticCallExpression } from "../LanguageWriter";
4
+ import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, ObjectArgs, DelegationCall, MethodStaticCallExpression } from "../LanguageWriter";
5
5
  import { CLikeLanguageWriter } from "./CLikeLanguageWriter";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
@@ -85,12 +85,10 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
85
85
  makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
86
86
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
87
87
  makeReturn(expr: LanguageExpression): LanguageStatement;
88
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
89
88
  makeStatement(expr: LanguageExpression): LanguageStatement;
90
89
  makeArrayAccess(value: string, indexVar: string): LanguageExpression;
91
90
  makeTupleAccess(value: string, index: number): LanguageExpression;
92
91
  makeUnionSelector(value: string, valueType: string): LanguageStatement;
93
- makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, convertorIndex: number): LanguageExpression;
94
92
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
95
93
  makeStaticMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
96
94
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
@@ -103,7 +101,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
103
101
  makeCast(expr: LanguageExpression, node: IDLNode, options?: MakeCastOptions): LanguageExpression;
104
102
  makePointerPropertyAccessExpression(expression: string, name: string): CppPointerPropertyAccessExpression;
105
103
  writePrintLog(message: string): void;
106
- makeDefinedCheck(value: string): LanguageExpression;
104
+ makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
107
105
  makeSetUnionSelector(value: string, index: string): LanguageStatement;
108
106
  makeSetOptionTag(value: string, tag: LanguageExpression): LanguageStatement;
109
107
  getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
@@ -129,6 +127,6 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
129
127
  stringifyMethodReturnType(type: IDLType, hint?: PrintHint): string;
130
128
  stringifyMethodArgType(type: IDLType, hint?: PrintHint): string;
131
129
  stringifyTypeWithReceiver(type: IDLType, receiver?: string): string;
132
- makeSerializerConstructorSignatures(): NamedMethodSignature[] | undefined;
130
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
133
131
  }
134
132
  //# sourceMappingURL=CppLanguageWriter.d.ts.map
@@ -12,11 +12,11 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { createReferenceType, forceAsNamedNode, IDLU32Type, IDLVoidType } from '../../idl';
15
+ import { createReferenceType, forceAsNamedNode } from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
18
- import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, NamedMethodSignature, StringExpression, MethodStaticCallExpression } from "../LanguageWriter";
19
- import { CDefinedExpression, CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
18
+ import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, StringExpression, MethodStaticCallExpression } from "../LanguageWriter";
19
+ import { CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
20
20
  import { RuntimeType } from "../common";
21
21
  import { IndentedPrinter } from "../../IndentedPrinter";
22
22
  import { cppKeywords } from "../../languageSpecificKeywords";
@@ -294,14 +294,11 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
294
294
  return new CppAssignStatement(variableName, type, expr, isDeclared, isConst, options);
295
295
  }
296
296
  makeLambda(signature, body) {
297
- throw new Error(`TBD`);
297
+ throw new Error(`Improve`);
298
298
  }
299
299
  makeReturn(expr) {
300
300
  return new CLikeReturnStatement(expr);
301
301
  }
302
- makeCheckOptional(optional, doStatement) {
303
- throw new Error(`TBD`);
304
- }
305
302
  makeStatement(expr) {
306
303
  return new CLikeExpressionStatement(expr);
307
304
  }
@@ -314,9 +311,6 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
314
311
  makeUnionSelector(value, valueType) {
315
312
  return this.makeAssign(valueType, undefined, this.makeString(`${value}.selector`), false);
316
313
  }
317
- makeUnionVariantCondition(_convertor, _valueName, valueType, type, convertorIndex) {
318
- return this.makeString(`${valueType} == ${convertorIndex}`);
319
- }
320
314
  makeUnionVariantCast(value, type, convertor, index) {
321
315
  return this.makeString(`${value}.value${index}`);
322
316
  }
@@ -353,8 +347,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
353
347
  writePrintLog(message) {
354
348
  this.print(`printf("${message}\\n");`);
355
349
  }
356
- makeDefinedCheck(value) {
357
- return new CDefinedExpression(value);
350
+ makeDefinedCheck(value, isTag) {
351
+ return this.makeString(isTag ? `${value} != ${PrimitiveTypeList.UndefinedTag}`
352
+ : `runtimeType(${value}) != ${PrimitiveTypeList.UndefinedRuntime}`);
358
353
  }
359
354
  makeSetUnionSelector(value, index) {
360
355
  return this.makeAssign(`${value}.selector`, undefined, this.makeString(index), false);
@@ -488,16 +483,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
488
483
  }
489
484
  return this.getNodeName(type);
490
485
  }
491
- makeSerializerConstructorSignatures() {
492
- const fromBufferCtor = new NamedMethodSignature(IDLVoidType, [
493
- idl.IDLSerializerBuffer,
494
- IDLU32Type,
495
- createReferenceType("CallbackResourceHolder")
496
- ], ["data", "dataLength", "resourceHolder"], [undefined, `0`, `nullptr`], undefined, [undefined, undefined, undefined, PrintHint.AsPointer]);
497
- const ownedDataCtor = new NamedMethodSignature(IDLVoidType, [
498
- createReferenceType("CallbackResourceHolder")
499
- ], ["resourceHolder"], [`nullptr`], undefined, [undefined, PrintHint.AsPointer]);
500
- return [ownedDataCtor, fromBufferCtor];
486
+ discriminate(value, index, type, runtimeTypes) {
487
+ return `${value}.selector == ${index}`;
501
488
  }
502
489
  }
503
490
  //# sourceMappingURL=CppLanguageWriter.js.map