@idlizer/core 2.1.2 → 2.1.7

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 (80) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +3 -4
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +43 -32
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +35 -17
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +30 -56
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +3 -1
  6. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +32 -11
  7. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +5 -2
  8. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +71 -62
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +1 -1
  10. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +9 -19
  11. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
  12. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +10 -3
  13. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
  14. package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
  15. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +8 -4
  16. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +87 -33
  17. package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
  18. package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
  19. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +19 -11
  20. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +34 -47
  21. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
  22. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
  23. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +9 -9
  24. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +15 -24
  25. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +17 -8
  26. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +48 -23
  27. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +4 -6
  28. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +15 -14
  29. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +13 -8
  30. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +33 -52
  31. package/build/lib/src/LibraryInterface.d.ts +1 -4
  32. package/build/lib/src/config.d.ts +813 -110
  33. package/build/lib/src/config.js +25 -3
  34. package/build/lib/src/configDescriber.d.ts +31 -4
  35. package/build/lib/src/configDescriber.js +101 -3
  36. package/build/lib/src/from-idl/DtsPrinter.js +31 -18
  37. package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
  38. package/build/lib/src/from-idl/IDLLinter.js +211 -25
  39. package/build/lib/src/from-idl/common.js +1 -1
  40. package/build/lib/src/from-idl/deserialize.d.ts +10 -1
  41. package/build/lib/src/from-idl/deserialize.js +486 -352
  42. package/build/lib/src/idl.d.ts +29 -19
  43. package/build/lib/src/idl.js +404 -119
  44. package/build/lib/src/idlize.d.ts +2 -1
  45. package/build/lib/src/idlize.js +82 -26
  46. package/build/lib/src/index.d.ts +4 -3
  47. package/build/lib/src/index.js +3 -2
  48. package/build/lib/src/options.d.ts +1 -1
  49. package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
  50. package/build/lib/src/peer-generation/BuilderClass.js +0 -8
  51. package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
  52. package/build/lib/src/peer-generation/LayoutManager.js +3 -2
  53. package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
  54. package/build/lib/src/peer-generation/Materialized.js +3 -3
  55. package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
  56. package/build/lib/src/peer-generation/PeerClass.js +0 -1
  57. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  58. package/build/lib/src/peer-generation/PeerFile.js +1 -1
  59. package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -7
  60. package/build/lib/src/peer-generation/PeerLibrary.js +131 -67
  61. package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
  62. package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
  63. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
  64. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
  65. package/build/lib/src/peer-generation/idl/common.d.ts +3 -1
  66. package/build/lib/src/peer-generation/idl/common.js +21 -4
  67. package/build/lib/src/peer-generation/isMaterialized.js +28 -7
  68. package/build/lib/src/peer-generation/unions.d.ts +3 -2
  69. package/build/lib/src/peer-generation/unions.js +7 -3
  70. package/build/lib/src/resolveNamedNode.d.ts +3 -0
  71. package/build/lib/src/resolveNamedNode.js +105 -0
  72. package/build/lib/src/util.d.ts +8 -1
  73. package/build/lib/src/util.js +41 -3
  74. package/build/lib/src/visitor.d.ts +2 -1
  75. package/build/lib/src/visitor.js +109 -7
  76. package/package.json +2 -2
  77. package/webidl2.js/LICENSE +21 -0
  78. package/webidl2.js/README.md +827 -0
  79. package/webidl2.js/dist/package.json +3 -0
  80. package/webidl2.js/dist/webidl2.js +93 -19
@@ -25,16 +25,18 @@ export class TSTypeNameConvertor {
25
25
  return node.name;
26
26
  }
27
27
  convertInterface(node) {
28
- return idl.getFQName(node);
28
+ return idl.getQualifiedName(node, "namespace.name");
29
29
  }
30
30
  convertEnum(node) {
31
- return idl.getFQName(node);
31
+ return idl.getQualifiedName(node, "namespace.name");
32
32
  }
33
33
  convertTypedef(node) {
34
34
  return node.name;
35
35
  }
36
36
  convertCallback(node) {
37
- return node.name;
37
+ return idl.isSyntheticEntry(node)
38
+ ? this.mapCallback(node)
39
+ : node.name;
38
40
  }
39
41
  convertMethod(node) {
40
42
  return node.name;
@@ -72,53 +74,65 @@ export class TSTypeNameConvertor {
72
74
  }
73
75
  throw new Error(`Unmapped container type ${idl.DebugUtils.debugPrintType(type)}`);
74
76
  }
75
- convertImport(type, importClause) {
77
+ convertImport(type) {
78
+ console.warn("Imports are not implemented yet");
76
79
  return type.name;
77
80
  }
81
+ convertTypeReferenceAsImport(type, importClause) {
82
+ var _a;
83
+ const maybeTypeArguments = ((_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.length) ? `<${type.typeArguments.join(', ')}>` : "";
84
+ let decl = this.resolver.resolveTypeReference(type);
85
+ if (decl)
86
+ return `${decl.name}${maybeTypeArguments}`;
87
+ return `${type.name}${maybeTypeArguments}`;
88
+ }
78
89
  convertTypeReference(type) {
79
90
  var _a, _b;
80
91
  let decl = this.resolver.resolveTypeReference(type);
81
92
  if (decl) {
82
93
  if (idl.isSyntheticEntry(decl)) {
83
94
  if (idl.isCallback(decl)) {
84
- return this.mapCallback(decl);
95
+ return this.mapCallback(decl, type.typeArguments);
85
96
  }
86
97
  const entity = idl.getExtAttribute(decl, idl.IDLExtendedAttributes.Entity);
87
98
  if (entity) {
88
99
  const isTuple = entity === idl.IDLEntity.Tuple;
89
- return this.productType(decl, isTuple, !isTuple);
100
+ return this.productType(decl, type.typeArguments, isTuple, !isTuple);
90
101
  }
91
102
  }
103
+ // FIXME: isEnumMember is not TYPE!
104
+ if (decl && idl.isEnumMember(decl) && decl.parent) {
105
+ // when `interface A { field?: MyEnum.Value1 }` is generated, it is not possible
106
+ // to deserialize A, because there is no such type information in declaration target
107
+ // (can not cast MyEnum to exact MyEnum.Value1)
108
+ decl = decl.parent;
109
+ }
110
+ let typeSpec = type.name;
111
+ let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
112
+ if (typeSpec === `Optional`)
113
+ return `${typeArgs} | undefined`;
114
+ if (typeSpec === `Function`)
115
+ return this.mapFunctionType(typeArgs);
116
+ const maybeTypeArguments = !(typeArgs === null || typeArgs === void 0 ? void 0 : typeArgs.length) ? '' : `<${typeArgs.join(', ')}>`;
117
+ if (decl) {
118
+ const path = idl.getNamespacesPathFor(decl).map(it => it.name);
119
+ path.push(decl.name);
120
+ return `${path.join(".")}${maybeTypeArguments}`;
121
+ }
122
+ return `${type.name}${maybeTypeArguments}`;
92
123
  }
93
- // FIXME: isEnumMember is not TYPE!
94
- if (decl && idl.isEnumMember(decl) && decl.parent) {
95
- // when `interface A { field?: MyEnum.Value1 }` is generated, it is not possible
96
- // to deserialize A, because there is no such type information in declaration target
97
- // (can not cast MyEnum to exact MyEnum.Value1)
98
- decl = decl.parent;
99
- }
100
- let typeSpec = type.name;
101
- let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => idl.printType(it))) !== null && _b !== void 0 ? _b : [];
102
- if (typeSpec === `Optional`)
103
- return `${typeArgs} | undefined`;
104
- if (typeSpec === `Function`)
105
- return this.mapFunctionType(typeArgs);
106
- const maybeTypeArguments = !(typeArgs === null || typeArgs === void 0 ? void 0 : typeArgs.length) ? '' : `<${typeArgs.join(', ')}>`;
107
- if (decl) {
108
- const path = idl.getNamespacesPathFor(decl).map(it => it.name);
109
- path.push(decl.name);
110
- return `${path.join(".")}${maybeTypeArguments}`;
111
- }
112
- return `${type.name}${maybeTypeArguments}`;
124
+ return this.convert(idl.IDLCustomObjectType);
113
125
  }
114
126
  convertTypeParameter(type) {
115
127
  return type.name;
116
128
  }
117
129
  convertPrimitiveType(type) {
118
130
  switch (type) {
131
+ case idl.IDLFunctionType: return 'Function';
119
132
  case idl.IDLUnknownType:
120
- case idl.IDLCustomObjectType: return 'unknown';
133
+ case idl.IDLCustomObjectType: return 'any';
121
134
  case idl.IDLThisType: return 'this';
135
+ case idl.IDLObjectType: return 'Object';
122
136
  case idl.IDLAnyType: return 'any';
123
137
  case idl.IDLUndefinedType: return 'undefined';
124
138
  case idl.IDLPointerType: return 'KPointer';
@@ -155,13 +169,50 @@ export class TSTypeNameConvertor {
155
169
  processTupleType(idlProperty) {
156
170
  return idlProperty;
157
171
  }
158
- mapCallback(decl) {
159
- const params = decl.parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}`);
172
+ createTypeSubstitution(parameters, args) {
173
+ const subst = new Map();
174
+ if (args && parameters) {
175
+ for (let i = 0; i < args.length && i < parameters.length; ++i) {
176
+ subst.set(parameters[i], args[i]);
177
+ }
178
+ }
179
+ return subst;
180
+ }
181
+ applySubstitution(subst, type) {
182
+ var _a;
183
+ if (idl.isContainerType(type)) {
184
+ return idl.createContainerType(type.containerKind, type.elementType.map(it => this.applySubstitution(subst, it)));
185
+ }
186
+ if (idl.isReferenceType(type)) {
187
+ return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.applySubstitution(subst, it)));
188
+ }
189
+ if (idl.isTypeParameterType(type)) {
190
+ const record = subst.get(type.name);
191
+ if (record) {
192
+ return record;
193
+ }
194
+ }
195
+ return type;
196
+ }
197
+ mapCallback(decl, args) {
198
+ const subst = this.createTypeSubstitution(decl.typeParameters, args);
199
+ const parameters = decl.parameters.map(it => {
200
+ const param = idl.clone(it);
201
+ param.type = this.applySubstitution(subst, param.type);
202
+ return param;
203
+ });
204
+ const params = parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}${it.isVariadic ? "[]" : ""}`);
160
205
  return `((${params.join(", ")}) => ${this.convert(decl.returnType)})`;
161
206
  }
162
- productType(decl, isTuple, includeFieldNames) {
207
+ productType(decl, args, isTuple, includeFieldNames) {
208
+ const subst = this.createTypeSubstitution(decl.typeParameters, args);
163
209
  const name = `${isTuple ? "[" : "{"} ${decl.properties
164
210
  .map(it => isTuple ? this.processTupleType(it) : it)
211
+ .map(it => {
212
+ const prop = idl.clone(it);
213
+ prop.type = this.applySubstitution(subst, prop.type);
214
+ return prop;
215
+ })
165
216
  .map(it => {
166
217
  const type = this.convert(it.type);
167
218
  return it.isOptional
@@ -181,7 +232,7 @@ export class TSInteropArgConvertor {
181
232
  convertContainer(type) {
182
233
  throw new Error(`Cannot pass container types through interop`);
183
234
  }
184
- convertImport(type, importClause) {
235
+ convertImport(type) {
185
236
  throw new Error(`Cannot pass import types through interop`);
186
237
  }
187
238
  convertOptional(type) {
@@ -192,14 +243,14 @@ export class TSInteropArgConvertor {
192
243
  case idl.IDLI64Type: return "KLong";
193
244
  case idl.IDLU64Type: return "KLong";
194
245
  case idl.IDLI32Type: return "KInt";
246
+ case idl.IDLU32Type: return "KInt";
195
247
  case idl.IDLF32Type: return "KFloat";
196
248
  case idl.IDLNumberType: return 'number';
197
249
  case idl.IDLBigintType: return 'bigint';
198
250
  case idl.IDLBooleanType:
199
251
  case idl.IDLFunctionType: return 'KInt';
200
252
  case idl.IDLStringType: return 'KStringPtr';
201
- case idl.IDLBufferType: return `ArrayBuffer`;
202
- case idl.IDLLengthType: return 'Length';
253
+ case idl.IDLBufferType: return 'ArrayBuffer';
203
254
  case idl.IDLDate: return 'number';
204
255
  case idl.IDLUndefinedType:
205
256
  case idl.IDLVoidType:
@@ -210,6 +261,9 @@ export class TSInteropArgConvertor {
210
261
  convertTypeParameter(type) {
211
262
  throw new Error("Cannot pass type parameters through interop");
212
263
  }
264
+ convertTypeReferenceAsImport(type, importClause) {
265
+ throw new Error(`Cannot pass import types through interop`);
266
+ }
213
267
  convertTypeReference(type) {
214
268
  throw new Error(`Cannot pass type references through interop`);
215
269
  }
@@ -6,13 +6,15 @@ export interface TypeConvertor<T> {
6
6
  convertOptional(type: idl.IDLOptionalType): T;
7
7
  convertUnion(type: idl.IDLUnionType): T;
8
8
  convertContainer(type: idl.IDLContainerType): T;
9
- convertImport(type: idl.IDLReferenceType, importClause: string): T;
9
+ convertImport(type: idl.IDLImport): T;
10
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): T;
10
11
  convertTypeReference(type: idl.IDLReferenceType): T;
11
12
  convertTypeParameter(type: idl.IDLTypeParameterType): T;
12
13
  convertPrimitiveType(type: idl.IDLPrimitiveType): T;
13
14
  }
14
15
  export declare function convertType<T>(convertor: TypeConvertor<T>, type: idl.IDLType): T;
15
16
  export interface DeclarationConvertor<T> {
17
+ convertImport(node: idl.IDLImport): T;
16
18
  convertNamespace(node: idl.IDLNamespace): T;
17
19
  convertInterface(node: idl.IDLInterface): T;
18
20
  convertEnum(node: idl.IDLEnum): T;
@@ -20,10 +20,12 @@ export function convertType(convertor, type) {
20
20
  return convertor.convertUnion(type);
21
21
  if (idl.isContainerType(type))
22
22
  return convertor.convertContainer(type);
23
+ if (idl.isImport(type))
24
+ return convertor.convertImport(type);
23
25
  if (idl.isReferenceType(type)) {
24
26
  const importAttr = idl.getExtAttribute(type, idl.IDLExtendedAttributes.Import);
25
27
  return importAttr
26
- ? convertor.convertImport(type, importAttr)
28
+ ? convertor.convertTypeReferenceAsImport(type, importAttr)
27
29
  : convertor.convertTypeReference(type);
28
30
  }
29
31
  if (idl.isTypeParameterType(type))
@@ -33,6 +35,8 @@ export function convertType(convertor, type) {
33
35
  throw new Error(`Unknown type ${idl.IDLKind[type.kind]}`);
34
36
  }
35
37
  export function convertDeclaration(convertor, decl) {
38
+ if (idl.isImport(decl))
39
+ return convertor.convertImport(decl);
36
40
  if (idl.isNamespace(decl))
37
41
  return convertor.convertNamespace(decl);
38
42
  if (idl.isInterface(decl))
@@ -80,7 +80,10 @@ export declare class CJLanguageWriter extends LanguageWriter {
80
80
  name: string;
81
81
  stringId: string | undefined;
82
82
  numberId: number;
83
- }[], op: (writer: LanguageWriter) => void): void;
83
+ }[], options: {
84
+ isExport: boolean;
85
+ isDeclare?: boolean;
86
+ }, op: (writer: LanguageWriter) => void): void;
84
87
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
85
88
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
86
89
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
@@ -105,7 +108,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
105
108
  private writeDeclaration;
106
109
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
107
110
  writeNativeMethodDeclaration(method: Method): void;
108
- makeEnumCast(_enumEntry: idl.IDLEnum, enumName: string): string;
111
+ i32FromEnum(value: LanguageExpression, _enumEntry: idl.IDLEnum): LanguageExpression;
109
112
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
110
113
  makeClassInit(type: idl.IDLType, parameters: LanguageExpression[]): LanguageExpression;
111
114
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
@@ -125,14 +128,14 @@ export declare class CJLanguageWriter extends LanguageWriter {
125
128
  makeDefinedCheck(value: string): LanguageExpression;
126
129
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
127
130
  writePrintLog(message: string): void;
128
- makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
131
+ makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
129
132
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
130
133
  getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
131
134
  makeUndefined(): LanguageExpression;
132
135
  makeUnwrapOptional(expression: LambdaExpression): LanguageExpression;
133
136
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
134
137
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
135
- makeRuntimeTypeGetterCall(value: string): LanguageExpression;
138
+ protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
136
139
  makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
137
140
  makeNull(value?: string): LanguageExpression;
138
141
  getTagType(): idl.IDLType;
@@ -144,17 +147,22 @@ export declare class CJLanguageWriter extends LanguageWriter {
144
147
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, convertorIndex?: number): LanguageExpression;
145
148
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
146
149
  makeTupleAccess(value: string, index: number): LanguageExpression;
147
- enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
148
- ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
149
- makeEnumEntity(enumEntity: idl.IDLEnum, isExport: boolean): LanguageStatement;
150
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
151
+ makeEnumEntity(enumEntity: idl.IDLEnum, options: {
152
+ isExport: boolean;
153
+ isDeclare?: boolean;
154
+ }): LanguageStatement;
150
155
  makeEquals(args: LanguageExpression[]): LanguageExpression;
151
156
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
152
157
  escapeKeyword(word: string): string;
153
- pushNamespace(namespace: string, ident?: boolean): void;
154
- popNamespace(ident?: boolean): void;
158
+ pushNamespace(namespace: string, options: {
159
+ ident: boolean;
160
+ isDeclared?: boolean;
161
+ }): void;
162
+ popNamespace(options: {
163
+ ident: boolean;
164
+ }): void;
155
165
  castToInt(value: string, bitness: 8 | 32): string;
156
166
  castToBoolean(value: string): string;
157
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
158
- makeLengthDeserializer(deserializer: string): LanguageStatement | undefined;
159
167
  }
160
168
  //# sourceMappingURL=CJLanguageWriter.d.ts.map
@@ -267,8 +267,7 @@ export class CJLanguageWriter extends LanguageWriter {
267
267
  }
268
268
  getNodeName(type) {
269
269
  // rework for proper namespace logic
270
- let name = this.typeConvertor.convert(type).split('.');
271
- return name[name.length - 1];
270
+ return this.typeConvertor.convert(type);
272
271
  }
273
272
  writeClass(name, op, superClass, interfaces, generics) {
274
273
  let extendsClause = superClass ? `${superClass}` : undefined;
@@ -283,7 +282,7 @@ export class CJLanguageWriter extends LanguageWriter {
283
282
  this.popIndent();
284
283
  this.printer.print(`}`);
285
284
  }
286
- writeEnum(name, members, op) {
285
+ writeEnum(name, members, options, op) {
287
286
  this.printer.print(`public enum ${name}{`);
288
287
  this.pushIndent();
289
288
  for (const member of members) {
@@ -320,13 +319,13 @@ export class CJLanguageWriter extends LanguageWriter {
320
319
  if (nullable) {
321
320
  if (receiver == 'this') {
322
321
  this.printer.print('let thisObj = this');
323
- super.writeMethodCall('thisObj', method, params, false);
322
+ super.writeMethodCall('thisObj', this.escapeKeyword(method), params, false);
324
323
  return;
325
324
  }
326
325
  this.printer.print(`if (let Some(${receiver}) <- ${receiver}) { ${receiver}.${method}(${params.join(", ")}) }`);
327
326
  }
328
327
  else {
329
- super.writeMethodCall(receiver, method, params, nullable);
328
+ super.writeMethodCall(receiver, this.escapeKeyword(method), params, nullable);
330
329
  }
331
330
  }
332
331
  writeFieldDeclaration(name, type, modifiers, optional, initExpr) {
@@ -339,7 +338,22 @@ export class CJLanguageWriter extends LanguageWriter {
339
338
  this.writeDeclaration(name, signature, modifiers);
340
339
  }
341
340
  writeConstructorImplementation(className, signature, op, superCall, modifiers) {
342
- this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}${className}(${signature.args.map((it, index) => `${signature.argName(index)}: ${this.getNodeName(it)}`).join(", ")}) {`);
341
+ var _a;
342
+ let i = 1;
343
+ while (signature.isArgOptional(signature.args.length - i)) {
344
+ let smallerSignature = signature.args.slice(0, -i);
345
+ this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init (${smallerSignature.map((it, index) => `${signature.argName(index)}: ${this.getNodeName(it)}`).join(", ")}) {`);
346
+ this.pushIndent();
347
+ let smallerArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => signature.argName(i)).join(', ');
348
+ for (let idx = 0; idx < i; idx++) {
349
+ smallerArgs = smallerArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
350
+ }
351
+ this.print(`${className}(${smallerArgs})`);
352
+ this.popIndent();
353
+ this.printer.print(`}`);
354
+ i += 1;
355
+ }
356
+ this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}${className}(${signature.args.map((it, index) => `${signature.argName(index)}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
343
357
  this.pushIndent();
344
358
  if (superCall) {
345
359
  this.print(`super(${superCall.signature.args.map((_, i) => superCall === null || superCall === void 0 ? void 0 : superCall.signature.argName(i)).join(", ")})`);
@@ -416,8 +430,8 @@ export class CJLanguageWriter extends LanguageWriter {
416
430
  }
417
431
  writeDeclaration(name, signature, modifiers, postfix) {
418
432
  let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
419
- prefix = prefix ? prefix + " " : "";
420
- this.print(`${prefix}${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.GETTER))) ? '' : 'func '}${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}): ${this.getNodeName(signature.returnType)}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
433
+ prefix = prefix ? prefix + " " : "public ";
434
+ this.print(`${prefix}${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.SETTER)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.GETTER))) ? '' : `${((modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.STATIC)) || (modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(MethodModifier.PRIVATE))) ? '' : 'open '}func `}${this.escapeKeyword(name)}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")})${this.getNodeName(signature.returnType) == 'this' ? '' : `: ${this.getNodeName(signature.returnType)}`}${postfix !== null && postfix !== void 0 ? postfix : ""}`);
421
435
  }
422
436
  writeNativeFunctionCall(printer, name, signature) {
423
437
  printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
@@ -428,8 +442,8 @@ export class CJLanguageWriter extends LanguageWriter {
428
442
  name = name.startsWith('_') ? name.slice(1) : name;
429
443
  this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(method.signature.returnType)}`);
430
444
  }
431
- makeEnumCast(_enumEntry, enumName) {
432
- return `${enumName}.value`;
445
+ i32FromEnum(value, _enumEntry) {
446
+ return this.makeString(`${value.asString()}.value`);
433
447
  }
434
448
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
435
449
  return new CJAssignStatement(variableName, type, expr, isDeclared, isConst);
@@ -441,7 +455,7 @@ export class CJLanguageWriter extends LanguageWriter {
441
455
  return this.makeString(`ArrayList<${this.getNodeName(type.elementType[0])}>(Int64(${size !== null && size !== void 0 ? size : ''}))`);
442
456
  }
443
457
  makeMapInit(type) {
444
- throw new Error(`TBD`);
458
+ return this.makeString(`${this.getNodeName(type)}()`);
445
459
  }
446
460
  makeArrayLength(array, length) {
447
461
  return this.makeString(`${array}.size`);
@@ -495,9 +509,9 @@ export class CJLanguageWriter extends LanguageWriter {
495
509
  writePrintLog(message) {
496
510
  this.print(`println("${message}")`);
497
511
  }
498
- makeCast(value, type, options) {
512
+ makeCast(value, node, options) {
499
513
  var _a;
500
- return new CJCastExpression(value, this.getNodeName(type), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
514
+ return new CJCastExpression(value, this.getNodeName(node), (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
501
515
  }
502
516
  typeInstanceOf(type, value, members) {
503
517
  if (idl.isInterface(type)) {
@@ -525,7 +539,7 @@ export class CJLanguageWriter extends LanguageWriter {
525
539
  return this.makeString(methodCall.asString() + '.ordinal');
526
540
  }
527
541
  makeMapInsert(keyAccessor, key, valueAccessor, value) {
528
- return this.makeStatement(this.makeMethodCall(keyAccessor, "set", [this.makeString(key), this.makeString(value)]));
542
+ return this.makeStatement(this.makeMethodCall(keyAccessor, "add", [this.makeString(key), this.makeString(value)]));
529
543
  }
530
544
  makeNull(value) {
531
545
  return new StringExpression(`Option.None`);
@@ -557,14 +571,11 @@ export class CJLanguageWriter extends LanguageWriter {
557
571
  makeTupleAccess(value, index) {
558
572
  return this.makeString(`${value}.value${index}`);
559
573
  }
560
- enumFromOrdinal(value, enumEntry) {
574
+ enumFromI32(value, enumEntry) {
561
575
  return this.makeString(`${this.getNodeName(enumEntry)}(${value.asString()})`);
562
576
  }
563
- ordinalFromEnum(value, _) {
564
- return this.makeString(`Int32(${value.asString()}.value)`);
565
- }
566
- makeEnumEntity(enumEntity, isExport) {
567
- return new CJEnumWithGetter(enumEntity, isExport);
577
+ makeEnumEntity(enumEntity, options) {
578
+ return new CJEnumWithGetter(enumEntity, options.isExport);
568
579
  }
569
580
  makeEquals(args) {
570
581
  return this.makeString(`refEq(${args.map(arg => `${arg.asString()}`).join(`, `)})`);
@@ -573,39 +584,15 @@ export class CJLanguageWriter extends LanguageWriter {
573
584
  this.writeStatement(this.makeAssign(valueType, undefined, this.makeRuntimeTypeGetterCall(value), false));
574
585
  }
575
586
  escapeKeyword(word) {
576
- return CJKeywords.has(word) ? word + "_" : word;
587
+ return CJKeywords.has(word) ? word.concat("_") : word;
577
588
  }
578
- pushNamespace(namespace, ident = true) { }
579
- popNamespace(ident = true) { }
589
+ pushNamespace(namespace, options) { }
590
+ popNamespace(options) { }
580
591
  castToInt(value, bitness) {
581
592
  return `Int${bitness}(${value})`;
582
593
  }
583
594
  castToBoolean(value) {
584
595
  return `if (${value}) { Int32(1) } else { Int32(0) }`;
585
596
  }
586
- makeLengthSerializer(serializer, value) {
587
- return this.makeBlock([
588
- this.makeStatement(this.makeMethodCall(serializer, "writeInt8", [this.makeRuntimeType(RuntimeType.STRING)])),
589
- this.makeStatement(this.makeMethodCall(serializer, "writeString", [this.makeString(`${value}.getValue1()`)]))
590
- ], false);
591
- }
592
- makeLengthDeserializer(deserializer) {
593
- const valueType = "valueType";
594
- return this.makeBlock([
595
- this.makeAssign(valueType, undefined, this.makeMethodCall(deserializer, "readInt8", []), true),
596
- this.makeMultiBranchCondition([{
597
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER, ''),
598
- stmt: this.makeReturn(this.makeString(`Ark_Length(${deserializer}.readFloat32())`))
599
- },
600
- {
601
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING, ''),
602
- stmt: this.makeReturn(this.makeString(`Ark_Length(${deserializer}.readString())`))
603
- },
604
- {
605
- expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT, ''),
606
- stmt: this.makeReturn(this.makeString(`Ark_Length(Resource(${deserializer}.readString(), "", 0.0, Option.None, Option.None))`))
607
- }], this.makeReturn(this.makeUndefined())),
608
- ], false);
609
- }
610
597
  }
611
598
  //# sourceMappingURL=CJLanguageWriter.js.map
@@ -37,7 +37,10 @@ export declare abstract class CLikeLanguageWriter extends LanguageWriter {
37
37
  name: string;
38
38
  stringId: string | undefined;
39
39
  numberId: number;
40
- }[], op: (writer: LanguageWriter) => void): void;
40
+ }[], options: {
41
+ isExport: boolean;
42
+ isDeclare?: boolean;
43
+ }, op: (writer: LanguageWriter) => void): void;
41
44
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
42
45
  private writeDeclaration;
43
46
  protected stringifyMethodReturnType(type: idl.IDLType, _?: PrintHint): string;
@@ -95,7 +95,7 @@ export class CLikeLanguageWriter extends LanguageWriter {
95
95
  writeMethodDeclaration(name, signature, modifiers) {
96
96
  this.writeDeclaration(name, signature, modifiers, ";");
97
97
  }
98
- writeEnum(name, members, op) {
98
+ writeEnum(name, members, options, op) {
99
99
  throw new Error("WriteEnum for C-family languages is not implemented");
100
100
  }
101
101
  writeMethodImplementation(method, op) {
@@ -11,9 +11,9 @@ import * as idl from "../../idl";
11
11
  export declare class CppCastExpression implements LanguageExpression {
12
12
  convertor: IdlNameConvertor;
13
13
  value: LanguageExpression;
14
- type: IDLType;
14
+ node: IDLNode;
15
15
  private options?;
16
- constructor(convertor: IdlNameConvertor, value: LanguageExpression, type: IDLType, options?: MakeCastOptions | undefined);
16
+ constructor(convertor: IdlNameConvertor, value: LanguageExpression, node: IDLNode, options?: MakeCastOptions | undefined);
17
17
  asString(): string;
18
18
  private mapTypeWithReceiver;
19
19
  }
@@ -91,7 +91,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
91
91
  makeMapInit(type: IDLType): LanguageExpression;
92
92
  makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
93
93
  makeMapResize(mapTypeName: string, keyType: IDLType, valueType: IDLType, map: string, size: string, deserializer: string): LanguageStatement;
94
- makeCast(expr: LanguageExpression, type: IDLType, options?: MakeCastOptions): LanguageExpression;
94
+ makeCast(expr: LanguageExpression, node: IDLNode, options?: MakeCastOptions): LanguageExpression;
95
95
  makePointerPropertyAccessExpression(expression: string, name: string): CppPointerPropertyAccessExpression;
96
96
  writePrintLog(message: string): void;
97
97
  makeDefinedCheck(value: string): LanguageExpression;
@@ -107,19 +107,19 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
107
107
  makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
108
108
  get supportedModifiers(): MethodModifier[];
109
109
  get supportedFieldModifiers(): FieldModifier[];
110
- enumFromOrdinal(value: LanguageExpression, type: IDLType): LanguageExpression;
111
- ordinalFromEnum(value: LanguageExpression, _: IDLType): LanguageExpression;
110
+ enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
112
111
  makeUnsafeCast(param: string): string;
113
112
  makeUnsafeCast_(value: LanguageExpression, type: IDLType, typeOptions?: PrintHint): string;
114
- makeEnumCast(enumEntry: idl.IDLEnum, value: string): string;
113
+ i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
115
114
  escapeKeyword(name: string): string;
116
- makeEnumEntity(enumEntity: IDLEnum, isExport: boolean): LanguageStatement;
115
+ makeEnumEntity(enumEntity: IDLEnum, options: {
116
+ isExport: boolean;
117
+ isDeclare?: boolean;
118
+ }): LanguageStatement;
117
119
  private decayTypeName;
118
120
  stringifyMethodReturnType(type: IDLType, hint?: PrintHint): string;
119
121
  stringifyMethodArgType(type: IDLType, hint?: PrintHint): string;
120
122
  stringifyTypeWithReceiver(type: IDLType, receiver?: string): string;
121
123
  makeSerializerConstructorSignatures(): NamedMethodSignature[] | undefined;
122
- makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
123
- makeLengthDeserializer(deserializer: string): LanguageStatement | undefined;
124
124
  }
125
125
  //# sourceMappingURL=CppLanguageWriter.d.ts.map
@@ -25,15 +25,15 @@ import * as idl from "../../idl";
25
25
  // EXPRESSIONS //
26
26
  ////////////////////////////////////////////////////////////////
27
27
  export class CppCastExpression {
28
- constructor(convertor, value, type, options) {
28
+ constructor(convertor, value, node, options) {
29
29
  this.convertor = convertor;
30
30
  this.value = value;
31
- this.type = type;
31
+ this.node = node;
32
32
  this.options = options;
33
33
  }
34
34
  asString() {
35
35
  var _a, _b, _c, _d;
36
- if (forceAsNamedNode(this.type).name === "Tag") {
36
+ if (forceAsNamedNode(this.node).name === "Tag") {
37
37
  return `${this.value.asString()} == ${PrimitiveTypeList.UndefinedRuntime} ? ${PrimitiveTypeList.UndefinedTag} : ${PrimitiveTypeList.ObjectTag}`;
38
38
  }
39
39
  let resultName = '';
@@ -41,7 +41,7 @@ export class CppCastExpression {
41
41
  resultName = this.options.overrideTypeName;
42
42
  }
43
43
  else {
44
- const pureName = this.mapTypeWithReceiver(this.type, (_b = this.options) === null || _b === void 0 ? void 0 : _b.receiver);
44
+ const pureName = this.mapTypeWithReceiver((_b = this.options) === null || _b === void 0 ? void 0 : _b.receiver);
45
45
  const qualifiedName = ((_c = this.options) === null || _c === void 0 ? void 0 : _c.toRef) ? `${pureName}&` : pureName;
46
46
  resultName = qualifiedName;
47
47
  }
@@ -49,12 +49,12 @@ export class CppCastExpression {
49
49
  ? `reinterpret_cast<${resultName}>(${this.value.asString()})`
50
50
  : `static_cast<${resultName}>(${this.value.asString()})`;
51
51
  }
52
- mapTypeWithReceiver(type, receiver) {
52
+ mapTypeWithReceiver(receiver) {
53
53
  // make deducing type from receiver
54
54
  if (receiver !== undefined) {
55
55
  return `std::decay<decltype(${receiver})>::type`;
56
56
  }
57
- return this.convertor.convert(type);
57
+ return this.convertor.convert(this.node);
58
58
  }
59
59
  }
60
60
  export class CppPointerPropertyAccessExpression {
@@ -314,8 +314,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
314
314
  makeMapResize(mapTypeName, keyType, valueType, map, size, deserializer) {
315
315
  return new CppMapResizeStatement(mapTypeName, keyType, valueType, map, size, deserializer);
316
316
  }
317
- makeCast(expr, type, options) {
318
- return new CppCastExpression(this.typeConvertor, expr, type, options);
317
+ makeCast(expr, node, options) {
318
+ return new CppCastExpression(this.typeConvertor, expr, node, options);
319
319
  }
320
320
  makePointerPropertyAccessExpression(expression, name) {
321
321
  return new CppPointerPropertyAccessExpression(expression, name);
@@ -370,11 +370,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
370
370
  get supportedFieldModifiers() {
371
371
  return [];
372
372
  }
373
- enumFromOrdinal(value, type) {
374
- return this.makeString(`static_cast<${this.typeConvertor.convert(type)}>(` + value.asString() + `)`);
375
- }
376
- ordinalFromEnum(value, _) {
377
- return value;
373
+ enumFromI32(value, enumEntry) {
374
+ return this.makeString(`static_cast<${this.typeConvertor.convert(enumEntry)}>(` + value.asString() + `)`);
378
375
  }
379
376
  makeUnsafeCast(param) {
380
377
  return param;
@@ -396,13 +393,13 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
396
393
  }
397
394
  return `(${typeName}) (${value.asString()})`;
398
395
  }
399
- makeEnumCast(enumEntry, value) {
400
- return `static_cast<${this.typeConvertor.convert(idl.createReferenceType(enumEntry))}>(${value})`;
396
+ i32FromEnum(value, enumEntry) {
397
+ return this.makeString(`static_cast<${this.typeConvertor.convert(idl.createReferenceType(enumEntry))}>(${value.asString()})`);
401
398
  }
402
399
  escapeKeyword(name) {
403
400
  return cppKeywords.has(name) ? name + "_" : name;
404
401
  }
405
- makeEnumEntity(enumEntity, isExport) {
402
+ makeEnumEntity(enumEntity, options) {
406
403
  return new CppEnumEntityStatement(enumEntity);
407
404
  }
408
405
  decayTypeName(typeName) {
@@ -463,17 +460,11 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
463
460
  idl.IDLSerializerBuffer,
464
461
  IDLU32Type,
465
462
  createReferenceType("CallbackResourceHolder")
466
- ], ["data", "dataLength", "resourceHolder"], [undefined, `0`, `nullptr`], [undefined, undefined, undefined, PrintHint.AsPointer]);
463
+ ], ["data", "dataLength", "resourceHolder"], [undefined, `0`, `nullptr`], undefined, [undefined, undefined, undefined, PrintHint.AsPointer]);
467
464
  const ownedDataCtor = new NamedMethodSignature(IDLVoidType, [
468
465
  createReferenceType("CallbackResourceHolder")
469
- ], ["resourceHolder"], [`nullptr`], [undefined, PrintHint.AsPointer]);
466
+ ], ["resourceHolder"], [`nullptr`], undefined, [undefined, PrintHint.AsPointer]);
470
467
  return [ownedDataCtor, fromBufferCtor];
471
468
  }
472
- makeLengthSerializer(serializer, value) {
473
- return undefined;
474
- }
475
- makeLengthDeserializer(deserializer) {
476
- return undefined;
477
- }
478
469
  }
479
470
  //# sourceMappingURL=CppLanguageWriter.js.map