@idlizer/core 2.1.9-arktscgen-6 → 2.1.9-arktscgen-9

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 (60) hide show
  1. package/build/lib/src/IndentedPrinter.d.ts +2 -1
  2. package/build/lib/src/IndentedPrinter.js +9 -2
  3. package/build/lib/src/Language.d.ts +0 -1
  4. package/build/lib/src/Language.js +7 -8
  5. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +27 -40
  6. package/build/lib/src/LanguageWriters/ArgConvertors.js +167 -206
  7. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +13 -34
  8. package/build/lib/src/LanguageWriters/LanguageWriter.js +31 -82
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
  10. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +17 -1
  11. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +121 -6
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +6 -0
  13. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +2 -3
  14. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +9 -25
  15. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +0 -5
  16. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +0 -9
  17. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +4 -6
  18. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +15 -28
  19. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -10
  20. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +51 -74
  21. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -8
  22. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -21
  23. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +12 -9
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +121 -32
  25. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +5 -6
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +17 -33
  27. package/build/lib/src/config.d.ts +402 -133
  28. package/build/lib/src/config.js +13 -7
  29. package/build/lib/src/diagnosticmessages.d.ts +45 -0
  30. package/build/lib/src/diagnosticmessages.js +66 -0
  31. package/build/lib/src/diagnostictypes.d.ts +140 -0
  32. package/build/lib/src/diagnostictypes.js +72 -0
  33. package/build/lib/src/formatter.d.ts +3 -0
  34. package/build/lib/src/formatter.js +98 -0
  35. package/build/lib/src/from-idl/deserialize.d.ts +1 -0
  36. package/build/lib/src/from-idl/deserialize.js +107 -5
  37. package/build/lib/src/idl.d.ts +8 -0
  38. package/build/lib/src/idl.js +16 -3
  39. package/build/lib/src/index.d.ts +7 -1
  40. package/build/lib/src/index.js +7 -1
  41. package/build/lib/src/peer-generation/Materialized.d.ts +2 -2
  42. package/build/lib/src/peer-generation/Materialized.js +4 -9
  43. package/build/lib/src/peer-generation/PeerLibrary.js +1 -5
  44. package/build/lib/src/peer-generation/PeerMethod.d.ts +0 -4
  45. package/build/lib/src/peer-generation/PeerMethod.js +18 -36
  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 +25 -6
  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 +5 -2
  57. package/build/lib/src/util.js +26 -12
  58. package/package.json +2 -2
  59. package/build/lib/src/peer-generation/isExternalType.d.ts +0 -4
  60. package/build/lib/src/peer-generation/isExternalType.js +0 -15
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { Language } from '../../Language';
16
16
  import { IndentedPrinter } from "../../IndentedPrinter";
17
- import { AssignStatement, CheckOptionalStatement, FieldModifier, LambdaExpression, Method, MethodModifier, MethodSignature, NamedMethodSignature, } from "../LanguageWriter";
17
+ import { AssignStatement, BlockStatement, FieldModifier, LambdaExpression, Method, MethodModifier, MethodSignature, NamedMethodSignature, } from "../LanguageWriter";
18
18
  import { CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
19
19
  import * as idl from '../../idl';
20
20
  import { RuntimeType } from "../common";
@@ -30,15 +30,7 @@ class JavaLambdaExpression extends LambdaExpression {
30
30
  }
31
31
  asString() {
32
32
  const params = this.signature.args.map((it, i) => `${idl.forceAsNamedNode(it).name} ${this.signature.argName(i)}`);
33
- return `(${params.join(", ")}) -> { ${this.bodyAsString()} }`;
34
- }
35
- }
36
- export class JavaCheckDefinedExpression {
37
- constructor(value) {
38
- this.value = value;
39
- }
40
- asString() {
41
- return `${this.value} != null`;
33
+ return `(${params.join(", ")}) ->${this.bodyAsString(true)}`;
42
34
  }
43
35
  }
44
36
  export class JavaCastExpression {
@@ -74,11 +66,11 @@ export class JavaAssignStatement extends AssignStatement {
74
66
  }
75
67
  }
76
68
  class JavaMapForEachStatement {
77
- constructor(map, key, value, op) {
69
+ constructor(map, key, value, body) {
78
70
  this.map = map;
79
71
  this.key = key;
80
72
  this.value = value;
81
- this.op = op;
73
+ this.body = body;
82
74
  }
83
75
  write(writer) {
84
76
  const entryVar = `${this.map}Entry`;
@@ -86,7 +78,7 @@ class JavaMapForEachStatement {
86
78
  writer.pushIndent();
87
79
  writer.print(`var ${this.key} = ${entryVar}.getKey();`);
88
80
  writer.print(`var ${this.value} = ${entryVar}.getValue();`);
89
- this.op();
81
+ writer.writeStatement(new BlockStatement(this.body, false));
90
82
  writer.popIndent();
91
83
  writer.print(`}`);
92
84
  }
@@ -111,7 +103,7 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
111
103
  }
112
104
  fork(options) {
113
105
  var _a;
114
- return new JavaLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor);
106
+ return new JavaLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor);
115
107
  }
116
108
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isExport = true) {
117
109
  let genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(', ')}> ` : ``;
@@ -156,7 +148,7 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
156
148
  this.popIndent();
157
149
  this.printer.print(`}`);
158
150
  }
159
- writeProperty(propName, propType, modifiers, getter, setter) {
151
+ writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
160
152
  let isStatic = modifiers.includes(FieldModifier.STATIC);
161
153
  let isMutable = !modifiers.includes(FieldModifier.READONLY);
162
154
  let containerName = propName.concat("_container");
@@ -177,6 +169,7 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
177
169
  }
178
170
  }
179
171
  else {
172
+ // TBD: use initExpr
180
173
  this.writeMethodDeclaration(propName, new MethodSignature(propType, []));
181
174
  }
182
175
  }
@@ -195,17 +188,14 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
195
188
  makeReturn(expr) {
196
189
  return new CLikeReturnStatement(expr);
197
190
  }
198
- makeCheckOptional(optional, doStatement) {
199
- return new CheckOptionalStatement("null", optional, doStatement);
200
- }
201
191
  makeDefinedCheck(value) {
202
- return new JavaCheckDefinedExpression(value);
192
+ return this.makeString(`${value} != null`);
203
193
  }
204
194
  makeLoop(counter, limit, statement) {
205
195
  return new CLikeLoopStatement(counter, limit, statement);
206
196
  }
207
- makeMapForEach(map, key, value, op) {
208
- return new JavaMapForEachStatement(map, key, value, op);
197
+ makeMapForEach(map, key, value, body) {
198
+ return new JavaMapForEachStatement(map, key, value, body);
209
199
  }
210
200
  makeMapSize(map) {
211
201
  return this.makeString(`${map}.size()`);
@@ -6,6 +6,11 @@ import { ArgConvertor } from "../ArgConvertors";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
8
8
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
9
+ export declare class KotlinLambdaReturnStatement implements LanguageStatement {
10
+ expression?: LanguageExpression | undefined;
11
+ constructor(expression?: LanguageExpression | undefined);
12
+ write(writer: LanguageWriter): void;
13
+ }
9
14
  export declare class KotlinEnumEntityStatement implements LanguageStatement {
10
15
  private readonly enumEntity;
11
16
  private readonly options;
@@ -49,11 +54,6 @@ export declare class KotlinNewObjectExpression implements LanguageExpression {
49
54
  constructor(objectName: string, params: LanguageExpression[]);
50
55
  asString(): string;
51
56
  }
52
- export declare class KotlinCheckDefinedExpression implements LanguageExpression {
53
- private value;
54
- constructor(value: string);
55
- asString(): string;
56
- }
57
57
  export declare class KotlinLanguageWriter extends LanguageWriter {
58
58
  protected typeConvertor: IdlNameConvertor;
59
59
  constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, language?: Language);
@@ -78,6 +78,8 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
78
78
  private writeDeclaration;
79
79
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
80
80
  writeNativeMethodDeclaration(method: Method): void;
81
+ private convertInteropArgument;
82
+ private convertInteropReturnValue;
81
83
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
82
84
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, delegationCall?: DelegationCall, modifiers?: MethodModifier[]): void;
83
85
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
@@ -87,7 +89,7 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
87
89
  }, setter?: {
88
90
  method: Method;
89
91
  op: () => void;
90
- }): void;
92
+ }, initExpr?: LanguageExpression): void;
91
93
  writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
92
94
  writeSetterImplementation(method: Method, op: (writer: this) => void): void;
93
95
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
@@ -97,10 +99,10 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
97
99
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
98
100
  makeThrowError(message: string): LanguageStatement;
99
101
  makeReturn(expr: LanguageExpression): LanguageStatement;
100
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
102
+ makeLambdaReturn(expr: LanguageExpression): LanguageStatement;
101
103
  makeStatement(expr: LanguageExpression): LanguageStatement;
102
104
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
103
- makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
105
+ makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
104
106
  writePrintLog(message: string): void;
105
107
  makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
106
108
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
@@ -108,8 +110,10 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
108
110
  makeUndefined(): LanguageExpression;
109
111
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
110
112
  makeTupleAlloc(option: string): LanguageStatement;
113
+ makeTupleAccess(value: string, index: number): LanguageExpression;
111
114
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
112
115
  makeArrayLength(array: string, length?: string): LanguageExpression;
116
+ makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
113
117
  makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
114
118
  makeMapInit(type: idl.IDLType): LanguageExpression;
115
119
  makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
@@ -136,7 +140,6 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
136
140
  makeCallIsObject(value: string): LanguageExpression;
137
141
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
138
142
  escapeKeyword(keyword: string): string;
139
- makeDiscriminatorConvertor(convertor: ArgConvertor, value: string, index: number): LanguageExpression | undefined;
140
143
  makeStaticBlock(op: (writer: LanguageWriter) => void): void;
141
144
  pushNamespace(namespace: string, options: {
142
145
  ident: boolean;
@@ -15,11 +15,19 @@
15
15
  import * as idl from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { IndentedPrinter } from "../../IndentedPrinter";
18
- import { AssignStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature } from "../LanguageWriter";
18
+ import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, ReturnStatement } from "../LanguageWriter";
19
19
  import { RuntimeType } from "../common";
20
20
  import { isDefined } from "../../util";
21
- import { TSReturnStatement } from './TsLanguageWriter';
22
21
  import { removePoints } from '../convertors/CJConvertors';
22
+ export class KotlinLambdaReturnStatement {
23
+ constructor(expression) {
24
+ this.expression = expression;
25
+ }
26
+ write(writer) {
27
+ if (this.expression)
28
+ writer.print(`${this.expression.asString()}`);
29
+ }
30
+ }
23
31
  export class KotlinEnumEntityStatement {
24
32
  constructor(enumEntity, options) {
25
33
  this.enumEntity = enumEntity;
@@ -100,16 +108,16 @@ export class KotlinEnumWithGetter {
100
108
  }
101
109
  }
102
110
  class KotlinMapForEachStatement {
103
- constructor(map, key, value, op) {
111
+ constructor(map, key, value, body) {
104
112
  this.map = map;
105
113
  this.key = key;
106
114
  this.value = value;
107
- this.op = op;
115
+ this.body = body;
108
116
  }
109
117
  write(writer) {
110
118
  writer.print(`for ((${this.key}, ${this.value}) in ${this.map}) {`);
111
119
  writer.pushIndent();
112
- this.op();
120
+ writer.writeStatement(new BlockStatement(this.body, false));
113
121
  writer.popIndent();
114
122
  writer.print(`}`);
115
123
  }
@@ -122,6 +130,17 @@ export class KotlinThrowErrorStatement {
122
130
  writer.print(`throw Error("${this.message}")`);
123
131
  }
124
132
  }
133
+ class KotlinArrayResizeStatement {
134
+ constructor(array, arrayType, length, deserializer) {
135
+ this.array = array;
136
+ this.arrayType = arrayType;
137
+ this.length = length;
138
+ this.deserializer = deserializer;
139
+ }
140
+ write(writer) {
141
+ writer.print(`${this.array} = ${this.arrayType}(${this.length})`);
142
+ }
143
+ }
125
144
  export class KotlinLoopStatement {
126
145
  constructor(counter, limit, statement) {
127
146
  this.counter = counter;
@@ -171,14 +190,6 @@ export class KotlinNewObjectExpression {
171
190
  return `${this.objectName}(${this.params.map(it => it.asString()).join(", ")})`;
172
191
  }
173
192
  }
174
- export class KotlinCheckDefinedExpression {
175
- constructor(value) {
176
- this.value = value;
177
- }
178
- asString() {
179
- return `${this.value} != null`;
180
- }
181
- }
182
193
  class KotlinUnwrapOptionalExpression {
183
194
  constructor(value) {
184
195
  this.value = value;
@@ -210,6 +221,13 @@ export class KotlinLanguageWriter extends LanguageWriter {
210
221
  return new KotlinLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.language);
211
222
  }
212
223
  getNodeName(type) {
224
+ // another stub. Bad one.
225
+ // I hope that I will rewrite LWs soon
226
+ if (idl.isType(type) && idl.isReferenceType(type)) {
227
+ if (type.name.startsWith('%TEXT%:')) {
228
+ return type.name.substring(7);
229
+ }
230
+ }
213
231
  return this.typeConvertor.convert(type);
214
232
  }
215
233
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
@@ -226,7 +244,8 @@ export class KotlinLanguageWriter extends LanguageWriter {
226
244
  this.printer.print(`}`);
227
245
  }
228
246
  writeInterface(name, op, superInterfaces, generics, isDeclared) {
229
- this.printer.print(`public interface ${name} {`);
247
+ const inheritance = superInterfaces ? (superInterfaces.length > 0 ? `: ${superInterfaces.join(', ')}` : '') : '';
248
+ this.printer.print(`public interface ${name}${inheritance} {`);
230
249
  this.pushIndent();
231
250
  op(this);
232
251
  this.popIndent();
@@ -273,7 +292,73 @@ export class KotlinLanguageWriter extends LanguageWriter {
273
292
  writeNativeMethodDeclaration(method) {
274
293
  let name = method.name;
275
294
  let signature = method.signature;
276
- this.writeMethodImplementation(new Method(name, signature, [MethodModifier.STATIC]), writer => { });
295
+ this.writeMethodImplementation(new Method(name, signature, [MethodModifier.STATIC]), writer => {
296
+ const args = signature.args.map((type, index) => this.convertInteropArgument(signature.argName(index), type));
297
+ const interopCallExpression = this.makeFunctionCall(`kotlin${name}`, args);
298
+ if (signature.returnType === idl.IDLVoidType) {
299
+ this.writeExpressionStatement(interopCallExpression);
300
+ return;
301
+ }
302
+ const retval = "retval";
303
+ this.writeStatement(this.makeAssign(retval, undefined, interopCallExpression));
304
+ this.writeStatement(this.makeReturn(this.convertInteropReturnValue(retval, signature.returnType)));
305
+ });
306
+ }
307
+ convertInteropArgument(varName, type) {
308
+ const realInteropType = this.getNodeName(type);
309
+ let expr;
310
+ switch (realInteropType) {
311
+ case "KPointer":
312
+ case "KSerializerBuffer":
313
+ expr = `${varName}.toCPointer<CPointed>()!!`;
314
+ break;
315
+ case "KInt":
316
+ case "KLong":
317
+ case "KFloat":
318
+ case "KDouble":
319
+ case "KStringPtr":
320
+ case "KBoolean":
321
+ case "Float64":
322
+ case "Float":
323
+ case "Double":
324
+ case "UInt":
325
+ case "Int":
326
+ expr = varName;
327
+ break;
328
+ default: throw new Error(`Unexpected type ${realInteropType} in interop with Kotlin`);
329
+ }
330
+ return this.makeString(expr);
331
+ }
332
+ convertInteropReturnValue(varName, type) {
333
+ const realInteropType = this.getNodeName(type);
334
+ let expr;
335
+ switch (realInteropType) {
336
+ case "KPointer":
337
+ expr = `${varName}.toLong()`;
338
+ break;
339
+ case "KInt":
340
+ case "KLong":
341
+ case "Float64":
342
+ case "Float":
343
+ case "Double":
344
+ case "Long":
345
+ case "Int":
346
+ expr = varName;
347
+ break;
348
+ case "String":
349
+ case "KStringPtr":
350
+ expr = `${varName}?.toKString() ?: ""`;
351
+ break;
352
+ case "Boolean":
353
+ case "KBoolean":
354
+ expr = `${varName} != 0.toByte()`;
355
+ break;
356
+ case "KInteropReturnBuffer":
357
+ expr = `${varName}.useContents { KInteropReturnBuffer(length, data.toLong()) }`;
358
+ break;
359
+ default: throw new Error(`Unexpected type ${realInteropType} in interop with Kotlin`);
360
+ }
361
+ return this.makeString(expr);
277
362
  }
278
363
  writeMethodDeclaration(name, signature, modifiers) {
279
364
  this.writeDeclaration(name, signature, true, false, modifiers);
@@ -301,7 +386,7 @@ export class KotlinLanguageWriter extends LanguageWriter {
301
386
  this.popIndent();
302
387
  this.printer.print(`}`);
303
388
  }
304
- writeProperty(propName, propType, modifiers, getter, setter) {
389
+ writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
305
390
  let containerName = propName.concat("_container");
306
391
  let truePropName = this.escapeKeyword(propName);
307
392
  if (getter) {
@@ -309,9 +394,10 @@ export class KotlinLanguageWriter extends LanguageWriter {
309
394
  this.print(`private var ${containerName}: ${this.getNodeName(propType)}`);
310
395
  }
311
396
  }
312
- let isStatic = modifiers.includes(FieldModifier.STATIC);
313
397
  let isMutable = !modifiers.includes(FieldModifier.READONLY);
314
- this.print(`public ${isMutable ? "var " : "val "}${truePropName}: ${this.getNodeName(propType)}`);
398
+ let isOverride = modifiers.includes(FieldModifier.OVERRIDE);
399
+ let initializer = initExpr ? ` = ${initExpr.asString()}` : "";
400
+ this.print(`${isOverride ? 'override ' : ''}public ${isMutable ? "var " : "val "}${truePropName}: ${this.getNodeName(propType)}${initializer}`);
315
401
  if (getter) {
316
402
  this.pushIndent();
317
403
  this.writeGetterImplementation(getter.method, getter.op);
@@ -363,10 +449,10 @@ export class KotlinLanguageWriter extends LanguageWriter {
363
449
  return new KotlinThrowErrorStatement(message);
364
450
  }
365
451
  makeReturn(expr) {
366
- return new TSReturnStatement(expr);
452
+ return new ReturnStatement(expr);
367
453
  }
368
- makeCheckOptional(optional, doStatement) {
369
- throw new Error("Not implemented");
454
+ makeLambdaReturn(expr) {
455
+ return new KotlinLambdaReturnStatement(expr);
370
456
  }
371
457
  makeStatement(expr) {
372
458
  return new ExpressionStatement(expr);
@@ -374,11 +460,11 @@ export class KotlinLanguageWriter extends LanguageWriter {
374
460
  makeLoop(counter, limit, statement) {
375
461
  return new KotlinLoopStatement(counter, limit, statement);
376
462
  }
377
- makeMapForEach(map, key, value, op) {
378
- return new KotlinMapForEachStatement(map, key, value, op);
463
+ makeMapForEach(map, key, value, body) {
464
+ return new KotlinMapForEachStatement(map, key, value, body);
379
465
  }
380
466
  writePrintLog(message) {
381
- throw new Error("Not implemented");
467
+ this.print(`println(\"${message}\")`);
382
468
  }
383
469
  makeCast(value, node, options) {
384
470
  return this.makeString(`${value.asString()} as ${this.getNodeName(node)}`);
@@ -398,12 +484,18 @@ export class KotlinLanguageWriter extends LanguageWriter {
398
484
  makeTupleAlloc(option) {
399
485
  throw new Error("Not implemented");
400
486
  }
487
+ makeTupleAccess(value, index) {
488
+ return this.makeString(`${value}.component${index + 1}()`);
489
+ }
401
490
  makeArrayInit(type, size) {
402
- return this.makeString(`Array<${this.getNodeName(type.elementType[0])}>(${size !== null && size !== void 0 ? size : ''})`);
491
+ return this.makeString(`ArrayList<${this.getNodeName(type.elementType[0])}>(${size !== null && size !== void 0 ? size : ''})`);
403
492
  }
404
493
  makeArrayLength(array, length) {
405
494
  return this.makeString(`${array}.size`);
406
495
  }
496
+ makeArrayResize(array, arrayType, length, deserializer) {
497
+ return new KotlinArrayResizeStatement(array, arrayType, length, deserializer);
498
+ }
407
499
  makeClassInit(type, paramenters) {
408
500
  throw new Error("Not implemented");
409
501
  }
@@ -411,13 +503,13 @@ export class KotlinLanguageWriter extends LanguageWriter {
411
503
  return this.makeString(`${this.getNodeName(type)}()`);
412
504
  }
413
505
  makeMapInsert(keyAccessor, key, valueAccessor, value) {
414
- return this.makeStatement(this.makeMethodCall(keyAccessor, "set", [this.makeString(key), this.makeString(value)]));
506
+ return this.makeStatement(this.makeMethodCall(keyAccessor, "put", [this.makeString(key), this.makeString(value)]));
415
507
  }
416
508
  makeUnwrapOptional(expression) {
417
509
  return new KotlinUnwrapOptionalExpression(expression);
418
510
  }
419
511
  makeDefinedCheck(value) {
420
- return new KotlinCheckDefinedExpression(value);
512
+ return this.makeString(`${value} != null`);
421
513
  }
422
514
  makeUnionSelector(value, valueType) {
423
515
  return this.makeAssign(valueType, undefined, this.makeMethodCall(value, "getSelector", []), false);
@@ -453,13 +545,13 @@ export class KotlinLanguageWriter extends LanguageWriter {
453
545
  return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.OVERRIDE];
454
546
  }
455
547
  get supportedFieldModifiers() {
456
- return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY];
548
+ return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.OVERRIDE];
457
549
  }
458
550
  enumFromI32(value, enumEntry) {
459
551
  return this.makeString(`${this.getNodeName(enumEntry)}(${value.asString()})`);
460
552
  }
461
553
  i32FromEnum(value, enumEntry) {
462
- return this.makeString(`${value.asString()}.value`);
554
+ return this.makeString(`${value.asString()}.value!!`);
463
555
  }
464
556
  makeEnumEntity(enumEntity, options) {
465
557
  return new KotlinEnumWithGetter(enumEntity, options.isExport);
@@ -479,9 +571,6 @@ export class KotlinLanguageWriter extends LanguageWriter {
479
571
  escapeKeyword(keyword) {
480
572
  return keyword;
481
573
  }
482
- makeDiscriminatorConvertor(convertor, value, index) {
483
- throw new Error("Not implemented");
484
- }
485
574
  makeStaticBlock(op) {
486
575
  this.printer.print('companion object {');
487
576
  this.printer.pushIndent();
@@ -1,7 +1,7 @@
1
1
  import * as idl from '../../idl';
2
2
  import { Language } from '../../Language';
3
3
  import { IndentedPrinter } from "../../IndentedPrinter";
4
- import { DelegationCall, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs, ReturnStatement } from "../LanguageWriter";
4
+ import { DelegationCall, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs, ReturnStatement } from "../LanguageWriter";
5
5
  import { ArgConvertor } from "../ArgConvertors";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
@@ -65,7 +65,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
65
65
  }, setter?: {
66
66
  method: Method;
67
67
  op: () => void;
68
- }): void;
68
+ }, initExpr?: LanguageExpression): void;
69
69
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
70
70
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
71
71
  private writeDeclaration;
@@ -74,16 +74,16 @@ export declare class TSLanguageWriter extends LanguageWriter {
74
74
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
75
75
  makeThrowError(message: string): LanguageStatement;
76
76
  makeReturn(expr: LanguageExpression): LanguageStatement;
77
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
78
77
  makeStatement(expr: LanguageExpression): LanguageStatement;
79
78
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
80
- makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
79
+ makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
81
80
  writePrintLog(message: string): void;
82
81
  makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
83
82
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
84
83
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
85
84
  makeUndefined(): LanguageExpression;
86
85
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
86
+ makeDefinedCheck(value: string): LanguageExpression;
87
87
  makeTupleAlloc(option: string): LanguageStatement;
88
88
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
89
89
  makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
@@ -100,7 +100,6 @@ export declare class TSLanguageWriter extends LanguageWriter {
100
100
  castToBoolean(value: string): string;
101
101
  makeCallIsObject(value: string): LanguageExpression;
102
102
  escapeKeyword(keyword: string): string;
103
- makeDiscriminatorConvertor(convertor: ArgConvertor, value: string, index: number): LanguageExpression | undefined;
104
- makeSerializerConstructorSignatures(): NamedMethodSignature[] | undefined;
103
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
105
104
  }
106
105
  //# sourceMappingURL=TsLanguageWriter.d.ts.map
@@ -16,9 +16,9 @@ import * as idl from '../../idl';
16
16
  import { isOptionalType } from '../../idl';
17
17
  import { Language } from '../../Language';
18
18
  import { IndentedPrinter } from "../../IndentedPrinter";
19
- import { AssignStatement, BlockStatement, CheckOptionalStatement, DelegationType, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
19
+ import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
20
20
  import { RuntimeType } from "../common";
21
- import { rightmostIndexOf, throwException } from "../../util";
21
+ import { rightmostIndexOf } from "../../util";
22
22
  import { TSKeywords } from '../../languageSpecificKeywords';
23
23
  ////////////////////////////////////////////////////////////////
24
24
  // EXPRESSIONS //
@@ -36,7 +36,7 @@ export class TSLambdaExpression extends LambdaExpression {
36
36
  const maybeOptional = idl.isOptionalType(it) ? "?" : "";
37
37
  return `${this.signature.argName(i)}${maybeOptional}: ${this.convertor.convert(it)}`;
38
38
  });
39
- return `(${params.join(", ")}): ${this.convertor.convert(this.signature.returnType)} => { ${this.bodyAsString()} }`;
39
+ return `(${params.join(", ")}): ${this.convertor.convert(this.signature.returnType)} =>${this.bodyAsString(true)}`;
40
40
  }
41
41
  }
42
42
  export class TSCastExpression {
@@ -93,16 +93,16 @@ class TSLoopStatement {
93
93
  }
94
94
  }
95
95
  class TSMapForEachStatement {
96
- constructor(map, key, value, op) {
96
+ constructor(map, key, value, body) {
97
97
  this.map = map;
98
98
  this.key = key;
99
99
  this.value = value;
100
- this.op = op;
100
+ this.body = body;
101
101
  }
102
102
  write(writer) {
103
103
  writer.print(`for (const [${this.key}, ${this.value}] of ${this.map}) {`);
104
104
  writer.pushIndent();
105
- this.op();
105
+ writer.writeStatement(new BlockStatement(this.body, false));
106
106
  writer.popIndent();
107
107
  writer.print(`}`);
108
108
  }
@@ -133,7 +133,7 @@ export class TSLanguageWriter extends LanguageWriter {
133
133
  }
134
134
  fork(options) {
135
135
  var _a;
136
- return new TSLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.language);
136
+ return new TSLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.language);
137
137
  }
138
138
  getNodeName(type) {
139
139
  // another stub. Bad one.
@@ -243,7 +243,7 @@ export class TSLanguageWriter extends LanguageWriter {
243
243
  this.popIndent();
244
244
  this.printer.print(`}`);
245
245
  }
246
- writeProperty(propName, propType, modifiers, getter, setter) {
246
+ writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
247
247
  let isStatic = modifiers.includes(FieldModifier.STATIC);
248
248
  let isMutable = !modifiers.includes(FieldModifier.READONLY);
249
249
  let containerName = propName.concat("_container");
@@ -264,7 +264,7 @@ export class TSLanguageWriter extends LanguageWriter {
264
264
  }
265
265
  }
266
266
  else {
267
- this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType));
267
+ this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType), initExpr);
268
268
  }
269
269
  }
270
270
  writeTypeDeclaration(decl) {
@@ -310,17 +310,14 @@ export class TSLanguageWriter extends LanguageWriter {
310
310
  makeReturn(expr) {
311
311
  return new TSReturnStatement(expr);
312
312
  }
313
- makeCheckOptional(optional, doStatement) {
314
- return new CheckOptionalStatement("undefined", optional, doStatement);
315
- }
316
313
  makeStatement(expr) {
317
314
  return new ExpressionStatement(expr);
318
315
  }
319
316
  makeLoop(counter, limit, statement) {
320
317
  return new TSLoopStatement(counter, limit, statement);
321
318
  }
322
- makeMapForEach(map, key, value, op) {
323
- return new TSMapForEachStatement(map, key, value, op);
319
+ makeMapForEach(map, key, value, body) {
320
+ return new TSMapForEachStatement(map, key, value, body);
324
321
  }
325
322
  writePrintLog(message) {
326
323
  this.print(`console.log("${message}")`);
@@ -355,6 +352,9 @@ export class TSLanguageWriter extends LanguageWriter {
355
352
  makeRuntimeType(rt) {
356
353
  return this.makeString(`RuntimeType.${RuntimeType[rt]}`);
357
354
  }
355
+ makeDefinedCheck(value) {
356
+ return this.makeString(`${value} !== undefined`);
357
+ }
358
358
  makeTupleAlloc(option) {
359
359
  return new TsTupleAllocStatement(option);
360
360
  }
@@ -411,25 +411,9 @@ export class TSLanguageWriter extends LanguageWriter {
411
411
  escapeKeyword(keyword) {
412
412
  return TSKeywords.has(keyword) ? keyword + "_" : keyword;
413
413
  }
414
- makeDiscriminatorConvertor(convertor, value, index) {
415
- const convertorNativeType = convertor.nativeType();
416
- const decl = this.resolver.resolveTypeReference(idl.isReferenceType(convertorNativeType)
417
- ? convertorNativeType
418
- : idl.createReferenceType(this.getNodeName(convertorNativeType)));
419
- if (decl === undefined || !idl.isEnum(decl)) {
420
- throwException(`The type reference ${decl === null || decl === void 0 ? void 0 : decl.name} must be Enum`);
421
- }
422
- const ordinal = idl.isStringEnum(decl)
423
- ? this.i32FromEnum(this.makeCast(this.makeString(this.getObjectAccessor(convertor, value)), convertor.idlType), decl)
424
- : this.makeUnionVariantCast(this.getObjectAccessor(convertor, value), this.getNodeName(idl.IDLI32Type), convertor, index);
425
- const { low, high } = idl.extremumOfOrdinals(decl);
426
- return this.discriminatorFromExpressions(value, convertor.runtimeTypes[0], [
427
- this.makeNaryOp(">=", [ordinal, this.makeString(low.toString())]),
428
- this.makeNaryOp("<=", [ordinal, this.makeString(high.toString())])
429
- ]);
430
- }
431
- makeSerializerConstructorSignatures() {
432
- return [new NamedMethodSignature(idl.IDLVoidType, [], [])];
414
+ discriminate(value, index, type, runtimeTypes) {
415
+ const runtimeTypeList = runtimeTypes.map(ty => "RuntimeType." + RuntimeType[ty]).join(", ");
416
+ return `[${runtimeTypeList}].includes(runtimeType(${value}))`;
433
417
  }
434
418
  }
435
419
  //# sourceMappingURL=TsLanguageWriter.js.map