@idlizer/core 2.1.7 → 2.1.9-arktscgen-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/build/lib/src/IndentedPrinter.js +2 -0
  2. package/build/lib/src/Language.d.ts +1 -0
  3. package/build/lib/src/Language.js +3 -0
  4. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +18 -3
  5. package/build/lib/src/LanguageWriters/ArgConvertors.js +154 -23
  6. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +29 -4
  7. package/build/lib/src/LanguageWriters/LanguageWriter.js +42 -0
  8. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +23 -10
  9. package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.d.ts +24 -0
  10. package/build/lib/src/LanguageWriters/convertors/KotlinConvertor.js +69 -0
  11. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +25 -0
  12. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +128 -0
  13. package/build/lib/src/LanguageWriters/index.js +4 -0
  14. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +5 -5
  15. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +25 -23
  16. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +1 -1
  17. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +11 -2
  18. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +43 -10
  19. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +2 -2
  20. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +20 -11
  21. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -2
  22. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +3 -3
  23. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +149 -0
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +495 -0
  25. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -2
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +6 -4
  27. package/build/lib/src/LibraryInterface.d.ts +2 -0
  28. package/build/lib/src/config.d.ts +132 -66
  29. package/build/lib/src/config.js +4 -2
  30. package/build/lib/src/configDescriber.d.ts +1 -1
  31. package/build/lib/src/configDescriber.js +1 -1
  32. package/build/lib/src/from-idl/DtsPrinter.js +10 -7
  33. package/build/lib/src/from-idl/IDLLinter.d.ts +0 -1
  34. package/build/lib/src/from-idl/IDLLinter.js +0 -6
  35. package/build/lib/src/from-idl/deserialize.js +7 -21
  36. package/build/lib/src/idl.d.ts +4 -13
  37. package/build/lib/src/idl.js +24 -58
  38. package/build/lib/src/idlize.js +2 -0
  39. package/build/lib/src/index.d.ts +2 -0
  40. package/build/lib/src/index.js +2 -0
  41. package/build/lib/src/peer-generation/LayoutManager.d.ts +4 -1
  42. package/build/lib/src/peer-generation/LayoutManager.js +5 -1
  43. package/build/lib/src/peer-generation/Materialized.d.ts +7 -3
  44. package/build/lib/src/peer-generation/Materialized.js +17 -3
  45. package/build/lib/src/peer-generation/PeerLibrary.d.ts +5 -2
  46. package/build/lib/src/peer-generation/PeerLibrary.js +26 -6
  47. package/build/lib/src/peer-generation/PeerMethod.d.ts +1 -1
  48. package/build/lib/src/peer-generation/getSuperType.d.ts +5 -0
  49. package/build/lib/src/peer-generation/getSuperType.js +55 -0
  50. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +4 -0
  51. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +7 -0
  52. package/build/lib/src/peer-generation/idl/common.js +1 -1
  53. package/build/lib/src/peer-generation/isExternalType.d.ts +4 -0
  54. package/build/lib/src/peer-generation/isExternalType.js +15 -0
  55. package/build/lib/src/peer-generation/isMaterialized.js +15 -7
  56. package/build/lib/src/util.d.ts +2 -0
  57. package/build/lib/src/util.js +17 -7
  58. package/build/lib/src/visitor.js +0 -1
  59. package/package.json +2 -2
  60. package/webidl2.js/LICENSE +0 -21
  61. package/webidl2.js/README.md +0 -827
  62. package/webidl2.js/dist/package.json +0 -3
@@ -13,6 +13,7 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { CJKeywords } from '../../languageSpecificKeywords';
16
17
  import { convertNode, convertType } from '../nameConvertor';
17
18
  import { InteropArgConvertor } from './InteropConvertors';
18
19
  export class CJTypeNameConvertor {
@@ -40,6 +41,12 @@ export class CJTypeNameConvertor {
40
41
  }
41
42
  if (idl.IDLContainerUtils.isRecord(type)) {
42
43
  const stringes = type.elementType.slice(0, 2).map(it => convertType(this, it));
44
+ if (idl.isReferenceType(type.elementType[0])) {
45
+ const keyValueType = this.resolver.resolveTypeReference(type.elementType[0]);
46
+ if (idl.isInterface(keyValueType) || idl.isEnum(keyValueType)) {
47
+ return `HashMap<Int64, ${stringes[1]}>`;
48
+ }
49
+ }
43
50
  return `HashMap<${stringes[0]}, ${stringes[1]}>`;
44
51
  }
45
52
  if (idl.IDLContainerUtils.isPromise(type)) {
@@ -60,7 +67,7 @@ export class CJTypeNameConvertor {
60
67
  return node.name;
61
68
  }
62
69
  convertCallback(type) {
63
- const params = type.parameters.map(it => `${it.name}: ${it.isOptional ? "?" : ""}${this.convert(it.type)}`);
70
+ const params = type.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${it.isOptional ? "?" : ""}${this.convert(it.type)}`);
64
71
  return `(${params.join(", ")}) -> ${this.convert(type.returnType)}`;
65
72
  }
66
73
  convertMethod(node) {
@@ -74,15 +81,17 @@ export class CJTypeNameConvertor {
74
81
  return type.name;
75
82
  }
76
83
  convertTypeReferenceAsImport(type, importClause) {
77
- return type.name;
84
+ var _a;
85
+ const maybeTypeArguments = ((_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.length) ? `<${type.typeArguments.join(', ')}>` : "";
86
+ let decl = this.resolver.resolveTypeReference(type);
87
+ if (decl)
88
+ return `${decl.name}${maybeTypeArguments}`;
89
+ return this.convert(idl.IDLCustomObjectType);
78
90
  }
79
91
  convertTypeReference(type) {
80
- if (type.name === "Object")
92
+ var _a, _b;
93
+ if (type.name === idl.IDLObjectType.name)
81
94
  return "KPointer";
82
- const importAttr = idl.getExtAttribute(type, idl.IDLExtendedAttributes.Import);
83
- if (importAttr) {
84
- return this.convertTypeReferenceAsImport(type, importAttr);
85
- }
86
95
  // resolve synthetic types
87
96
  const decl = this.resolver.resolveTypeReference(type);
88
97
  if (decl && idl.isSyntheticEntry(decl)) {
@@ -96,10 +105,12 @@ export class CJTypeNameConvertor {
96
105
  }
97
106
  }
98
107
  let name = type.name.split('.');
108
+ let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
109
+ const maybeTypeArguments = !(typeArgs === null || typeArgs === void 0 ? void 0 : typeArgs.length) ? '' : `<${typeArgs.join(', ')}>`;
99
110
  if (decl) {
100
- return idl.getNamespacesPathFor(decl).map(ns => ns.name).join().concat(name[name.length - 1]);
111
+ return idl.getNamespacesPathFor(decl).map(ns => ns.name).join().concat(name[name.length - 1].concat(maybeTypeArguments));
101
112
  }
102
- return name[name.length - 1];
113
+ return this.convert(idl.IDLCustomObjectType);
103
114
  }
104
115
  convertTypeParameter(type) {
105
116
  return type.name;
@@ -129,6 +140,7 @@ export class CJTypeNameConvertor {
129
140
  case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
130
141
  case idl.IDLAnyType: return 'Any';
131
142
  case idl.IDLDate: return 'DateTime';
143
+ case idl.IDLObjectType: return 'Any';
132
144
  case idl.IDLUnknownType:
133
145
  case idl.IDLFunctionType:
134
146
  case idl.IDLCustomObjectType: return 'Any';
@@ -136,7 +148,7 @@ export class CJTypeNameConvertor {
136
148
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
137
149
  }
138
150
  callbackType(decl) {
139
- const params = decl.parameters.map(it => `${it.name}: ${this.convert(it.type)}`);
151
+ const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${this.convert(it.type)}`);
140
152
  return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
141
153
  }
142
154
  productType(decl, isTuple, includeFieldNames) {
@@ -150,6 +162,7 @@ export class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvertor {
150
162
  case idl.IDLStringType: return 'CString';
151
163
  case idl.IDLInteropReturnBufferType: return 'KInteropReturnBuffer';
152
164
  case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
165
+ case idl.IDLObjectType: return 'Unit';
153
166
  }
154
167
  }
155
168
  if (idl.isContainerType(type)) {
@@ -0,0 +1,24 @@
1
+ import * as idl from '../../idl';
2
+ import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
+ import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
4
+ export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
+ protected resolver: ReferenceResolver;
6
+ constructor(resolver: ReferenceResolver);
7
+ convert(node: idl.IDLNode): string;
8
+ convertNamespace(node: idl.IDLNamespace): string;
9
+ convertInterface(node: idl.IDLInterface): string;
10
+ convertEnum(node: idl.IDLEnum): string;
11
+ convertTypedef(node: idl.IDLTypedef): string;
12
+ convertCallback(node: idl.IDLCallback): string;
13
+ convertMethod(node: idl.IDLMethod): string;
14
+ convertConstant(node: idl.IDLConstant): string;
15
+ convertOptional(type: idl.IDLOptionalType): string;
16
+ convertUnion(type: idl.IDLUnionType): string;
17
+ convertContainer(type: idl.IDLContainerType): string;
18
+ convertImport(type: idl.IDLImport): string;
19
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
20
+ convertTypeReference(type: idl.IDLReferenceType): string;
21
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
22
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
23
+ }
24
+ //# sourceMappingURL=KotlinConvertor.d.ts.map
@@ -0,0 +1,69 @@
1
+ /*
2
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ import { convertNode } from '../nameConvertor';
16
+ export class KotlinTypeNameConvertor {
17
+ constructor(resolver) {
18
+ this.resolver = resolver;
19
+ }
20
+ convert(node) {
21
+ return convertNode(this, node);
22
+ }
23
+ convertNamespace(node) {
24
+ throw new Error("Not implemented");
25
+ }
26
+ convertInterface(node) {
27
+ throw new Error("Not implemented");
28
+ }
29
+ convertEnum(node) {
30
+ throw new Error("Not implemented");
31
+ }
32
+ convertTypedef(node) {
33
+ throw new Error("Not implemented");
34
+ }
35
+ convertCallback(node) {
36
+ throw new Error("Not implemented");
37
+ }
38
+ convertMethod(node) {
39
+ throw new Error("Not implemented");
40
+ }
41
+ convertConstant(node) {
42
+ throw new Error("Not implemented");
43
+ }
44
+ convertOptional(type) {
45
+ throw new Error("Not implemented");
46
+ }
47
+ convertUnion(type) {
48
+ throw new Error("Not implemented");
49
+ }
50
+ convertContainer(type) {
51
+ throw new Error("Not implemented");
52
+ }
53
+ convertImport(type) {
54
+ throw new Error("Not implemented");
55
+ }
56
+ convertTypeReferenceAsImport(type, importClause) {
57
+ throw new Error("Not implemented");
58
+ }
59
+ convertTypeReference(type) {
60
+ throw new Error("Not implemented");
61
+ }
62
+ convertTypeParameter(type) {
63
+ throw new Error("Not implemented");
64
+ }
65
+ convertPrimitiveType(type) {
66
+ throw new Error("Not implemented");
67
+ }
68
+ }
69
+ //# sourceMappingURL=KotlinConvertor.js.map
@@ -0,0 +1,25 @@
1
+ import * as idl from '../../idl';
2
+ import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
+ import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
4
+ export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
+ protected resolver: ReferenceResolver;
6
+ constructor(resolver: ReferenceResolver);
7
+ convert(node: idl.IDLNode): string;
8
+ convertNamespace(node: idl.IDLNamespace): string;
9
+ convertInterface(node: idl.IDLInterface): string;
10
+ convertEnum(node: idl.IDLEnum): string;
11
+ convertTypedef(node: idl.IDLTypedef): string;
12
+ convertCallback(node: idl.IDLCallback): string;
13
+ convertMethod(node: idl.IDLMethod): string;
14
+ convertConstant(node: idl.IDLConstant): string;
15
+ convertOptional(type: idl.IDLOptionalType): string;
16
+ convertUnion(type: idl.IDLUnionType): string;
17
+ convertContainer(type: idl.IDLContainerType): string;
18
+ convertImport(type: idl.IDLImport): string;
19
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
20
+ convertTypeReference(type: idl.IDLReferenceType): string;
21
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
22
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
23
+ private callbackType;
24
+ }
25
+ //# sourceMappingURL=KotlinConvertors.d.ts.map
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ import * as idl from '../../idl';
16
+ import { convertNode, convertType } from '../nameConvertor';
17
+ export class KotlinTypeNameConvertor {
18
+ constructor(resolver) {
19
+ this.resolver = resolver;
20
+ }
21
+ convert(node) {
22
+ return convertNode(this, node);
23
+ }
24
+ convertNamespace(node) {
25
+ return node.name;
26
+ }
27
+ convertInterface(node) {
28
+ return node.name;
29
+ }
30
+ convertEnum(node) {
31
+ return node.name;
32
+ }
33
+ convertTypedef(node) {
34
+ return node.name;
35
+ }
36
+ convertCallback(node) {
37
+ const params = node.parameters.map(it => `${it.name}: ${this.convert(it.type)}${it.isOptional ? "?" : ""}`);
38
+ return `(${params.join(", ")}) -> ${this.convert(node.returnType)}`;
39
+ }
40
+ convertMethod(node) {
41
+ return node.name;
42
+ }
43
+ convertConstant(node) {
44
+ return node.name;
45
+ }
46
+ convertOptional(type) {
47
+ return `${this.convert(type.type)}?`;
48
+ }
49
+ convertUnion(type) {
50
+ return type.name;
51
+ }
52
+ convertContainer(type) {
53
+ if (idl.IDLContainerUtils.isSequence(type)) {
54
+ return `Array<${convertType(this, type.elementType[0])}>`;
55
+ }
56
+ if (idl.IDLContainerUtils.isRecord(type)) {
57
+ const stringes = type.elementType.slice(0, 2).map(it => convertType(this, it));
58
+ return `Map<${stringes[0]}, ${stringes[1]}>`;
59
+ }
60
+ if (idl.IDLContainerUtils.isPromise(type)) {
61
+ return `Any`;
62
+ }
63
+ throw new Error(`IDL type ${idl.DebugUtils.debugPrintType(type)} not supported`);
64
+ }
65
+ convertImport(type) {
66
+ throw new Error("Not implemented");
67
+ }
68
+ convertTypeReferenceAsImport(type, importClause) {
69
+ throw new Error("Not implemented");
70
+ }
71
+ convertTypeReference(type) {
72
+ const decl = this.resolver.resolveTypeReference(type);
73
+ if (decl && idl.isSyntheticEntry(decl)) {
74
+ if (idl.isCallback(decl)) {
75
+ return this.callbackType(decl);
76
+ }
77
+ }
78
+ if (decl) {
79
+ return decl.name;
80
+ }
81
+ return this.convert(idl.IDLCustomObjectType);
82
+ }
83
+ convertTypeParameter(type) {
84
+ return type.name;
85
+ }
86
+ convertPrimitiveType(type) {
87
+ switch (type) {
88
+ case idl.IDLFunctionType: return 'Function';
89
+ case idl.IDLUnknownType:
90
+ case idl.IDLCustomObjectType: return 'Any';
91
+ case idl.IDLThisType: return 'this';
92
+ case idl.IDLObjectType: return 'Object';
93
+ case idl.IDLAnyType: return 'Any';
94
+ case idl.IDLUndefinedType: return 'Nothing?';
95
+ case idl.IDLPointerType: return 'KPointer';
96
+ case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
97
+ case idl.IDLVoidType: return 'Unit';
98
+ case idl.IDLBooleanType: return 'Boolean';
99
+ case idl.IDLI8Type: return 'Byte';
100
+ case idl.IDLU8Type: return 'UByte';
101
+ case idl.IDLI16Type: return 'Short';
102
+ case idl.IDLU16Type: return 'UShort';
103
+ case idl.IDLI32Type: return 'Int';
104
+ case idl.IDLU32Type: return 'UInt';
105
+ case idl.IDLI64Type: return 'Long';
106
+ case idl.IDLU64Type: return 'ULong';
107
+ case idl.IDLF32Type: return 'Float';
108
+ case idl.IDLF64Type: return 'Double';
109
+ case idl.IDLNumberType: return 'Double';
110
+ case idl.IDLBigintType:
111
+ return 'BigInteger'; // relies on import java.math.BigInteger
112
+ case idl.IDLStringType:
113
+ return 'String';
114
+ case idl.IDLDate:
115
+ return 'Date';
116
+ case idl.IDLBufferType:
117
+ return 'NativeBuffer';
118
+ case idl.IDLInteropReturnBufferType:
119
+ return `KInteropReturnBuffer`;
120
+ }
121
+ throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
122
+ }
123
+ callbackType(decl) {
124
+ const params = decl.parameters.map(it => `${it.name}: ${this.convert(it.type)}`);
125
+ return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
126
+ }
127
+ }
128
+ //# sourceMappingURL=KotlinConvertors.js.map
@@ -6,11 +6,13 @@ import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameCon
6
6
  import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
7
7
  import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
8
8
  import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
9
+ import { KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
9
10
  import { TSInteropArgConvertor, TSTypeNameConvertor } from "./convertors/TSConvertors";
10
11
  import { CJLanguageWriter } from "./writers/CJLanguageWriter";
11
12
  import { CppLanguageWriter } from "./writers/CppLanguageWriter";
12
13
  import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
13
14
  import { JavaLanguageWriter } from "./writers/JavaLanguageWriter";
15
+ import { KotlinLanguageWriter } from "./writers/KotlinLanguageWriter";
14
16
  import { TSLanguageWriter } from "./writers/TsLanguageWriter";
15
17
  export * from "./nameConvertor";
16
18
  export function createLanguageWriter(language, resolver) {
@@ -22,6 +24,7 @@ export function createLanguageWriter(language, resolver) {
22
24
  case Language.JAVA: return new JavaLanguageWriter(printer, resolver, new JavaTypeNameConvertor(resolver));
23
25
  case Language.CPP: return new CppLanguageWriter(printer, resolver, new CppConvertor(resolver), PrimitiveTypesInstance);
24
26
  case Language.CJ: return new CJLanguageWriter(printer, resolver, new CJTypeNameConvertor(resolver), new CJIDLTypeToForeignStringConvertor(resolver));
27
+ case Language.KOTLIN: return new KotlinLanguageWriter(printer, resolver, new KotlinTypeNameConvertor(resolver));
25
28
  default: throw new Error(`Language ${language.toString()} is not supported`);
26
29
  }
27
30
  }
@@ -32,6 +35,7 @@ export function createInteropArgConvertor(language) {
32
35
  case Language.CPP: return CppInteropArgConvertor.INSTANCE;
33
36
  case Language.JAVA: return new JavaInteropArgConvertor();
34
37
  case Language.CJ: return new CJInteropArgConvertor();
38
+ case Language.KOTLIN: return new CJInteropArgConvertor();
35
39
  }
36
40
  throw new Error(`InteropArgConvertor for language ${language} not implemented`);
37
41
  }
@@ -2,7 +2,7 @@ import * as idl from "../../idl";
2
2
  import { IndentedPrinter } from "../../IndentedPrinter";
3
3
  import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
4
4
  import { RuntimeType } from "../common";
5
- import { AssignStatement, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
5
+ import { AssignStatement, DelegationCall, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { Language } from "../../Language";
8
8
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
@@ -26,11 +26,11 @@ export declare class CJUnionCastExpression implements LanguageExpression {
26
26
  asString(): string;
27
27
  }
28
28
  export declare class CJMatchExpression implements LanguageExpression {
29
- matchValue: LanguageExpression;
29
+ matchValue: string;
30
30
  matchCases: LanguageExpression[];
31
31
  caseBlocks: LanguageExpression[];
32
32
  indentDepth?: number | undefined;
33
- constructor(matchValue: LanguageExpression, matchCases: LanguageExpression[], caseBlocks: LanguageExpression[], indentDepth?: number | undefined);
33
+ constructor(matchValue: string, matchCases: LanguageExpression[], caseBlocks: LanguageExpression[], indentDepth?: number | undefined);
34
34
  asString(): string;
35
35
  }
36
36
  export declare class CJTernaryExpression implements LanguageExpression {
@@ -91,7 +91,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
91
91
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
92
92
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
93
93
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
94
- writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
94
+ writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, delegationCall?: DelegationCall, modifiers?: MethodModifier[]): void;
95
95
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
96
96
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
97
97
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
@@ -132,7 +132,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
132
132
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
133
133
  getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
134
134
  makeUndefined(): LanguageExpression;
135
- makeUnwrapOptional(expression: LambdaExpression): LanguageExpression;
135
+ makeUnwrapOptional(expression: LanguageExpression): LanguageExpression;
136
136
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
137
137
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
138
138
  protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
@@ -31,7 +31,7 @@ class CJLambdaExpression extends LambdaExpression {
31
31
  return false;
32
32
  }
33
33
  asString() {
34
- const params = this.signature.args.map((it, i) => `${this.signature.argName(i)}: ${this.writer.getNodeName(it)}`);
34
+ const params = this.signature.args.map((it, i) => `${this.writer.escapeKeyword(this.signature.argName(i))}: ${this.writer.getNodeName(it)}`);
35
35
  return `{${params.join(", ")} => ${this.bodyAsString()} }`;
36
36
  }
37
37
  }
@@ -73,11 +73,11 @@ export class CJMatchExpression {
73
73
  asString() {
74
74
  var _a, _b, _c;
75
75
  let output = [];
76
- output.push(`match (${this.matchValue.asString()}) {`);
76
+ output.push(`match (${this.matchValue}) {`);
77
77
  for (let index in this.matchCases) {
78
78
  output.push(indentedBy(`case ${this.matchCases[index].asString()} => ${this.caseBlocks[index].asString()}`, ((_a = this.indentDepth) !== null && _a !== void 0 ? _a : 0) + 1));
79
79
  }
80
- output.push(indentedBy(`case _ => throw Exception(\"Unmatched pattern ${this.matchValue.asString()}\")`, ((_b = this.indentDepth) !== null && _b !== void 0 ? _b : 1) + 1));
80
+ output.push(indentedBy(`case _ => throw Exception(\"Unmatched pattern ${this.matchValue}\")`, ((_b = this.indentDepth) !== null && _b !== void 0 ? _b : 1) + 1));
81
81
  output.push(indentedBy(`}`, ((_c = this.indentDepth) !== null && _c !== void 0 ? _c : 1)));
82
82
  return output.join('\n');
83
83
  }
@@ -184,7 +184,7 @@ export class CJEnumWithGetter {
184
184
  }
185
185
  memberValue += 1;
186
186
  }
187
- let enumName = this.enumEntity.name;
187
+ let enumName = idl.getNamespaceName(this.enumEntity).concat(this.enumEntity.name);
188
188
  writer.writeClass(enumName, () => {
189
189
  const enumType = idl.createReferenceType(this.enumEntity);
190
190
  members.forEach(it => {
@@ -322,7 +322,7 @@ export class CJLanguageWriter extends LanguageWriter {
322
322
  super.writeMethodCall('thisObj', this.escapeKeyword(method), params, false);
323
323
  return;
324
324
  }
325
- this.printer.print(`if (let Some(${receiver}) <- ${receiver}) { ${receiver}.${method}(${params.join(", ")}) }`);
325
+ this.printer.print(`if (let Some(${receiver}) <- ${receiver}) { ${receiver}.${this.escapeKeyword(method)}(${params.join(", ")}) }`);
326
326
  }
327
327
  else {
328
328
  super.writeMethodCall(receiver, this.escapeKeyword(method), params, nullable);
@@ -337,26 +337,27 @@ export class CJLanguageWriter extends LanguageWriter {
337
337
  writeMethodDeclaration(name, signature, modifiers) {
338
338
  this.writeDeclaration(name, signature, modifiers);
339
339
  }
340
- writeConstructorImplementation(className, signature, op, superCall, modifiers) {
340
+ writeConstructorImplementation(className, signature, op, delegationCall, modifiers) {
341
341
  var _a;
342
342
  let i = 1;
343
343
  while (signature.isArgOptional(signature.args.length - i)) {
344
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(", ")}) {`);
345
+ this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init (${smallerSignature.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}) {`);
346
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(', ');
347
+ let lessArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => this.escapeKeyword(signature.argName(i))).join(', ');
348
348
  for (let idx = 0; idx < i; idx++) {
349
- smallerArgs = smallerArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
349
+ lessArgs = lessArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
350
350
  }
351
- this.print(`${className}(${smallerArgs})`);
351
+ this.print(`${className}(${lessArgs})`);
352
352
  this.popIndent();
353
353
  this.printer.print(`}`);
354
354
  i += 1;
355
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(", ")}) {`);
356
+ this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}${className}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
357
357
  this.pushIndent();
358
- if (superCall) {
359
- this.print(`super(${superCall.signature.args.map((_, i) => superCall === null || superCall === void 0 ? void 0 : superCall.signature.argName(i)).join(", ")})`);
358
+ if (delegationCall) {
359
+ // TBD: check delegationType to write "this" or "super"
360
+ this.print(`super(${delegationCall.delegationArgs.map(it => it.asString()).join(", ")})`);
360
361
  }
361
362
  op(this);
362
363
  this.popIndent();
@@ -415,7 +416,7 @@ export class CJLanguageWriter extends LanguageWriter {
415
416
  this.print('}');
416
417
  }
417
418
  writeSetterImplementation(method, op) {
418
- this.print(`set(${method.signature.argsNames.join(', ')}) {`);
419
+ this.print(`set(${method.signature.argsNames.map(arg => this.escapeKeyword(arg)).join(', ')}) {`);
419
420
  this.pushIndent();
420
421
  op(this);
421
422
  this.popIndent();
@@ -428,13 +429,14 @@ export class CJLanguageWriter extends LanguageWriter {
428
429
  this.popIndent();
429
430
  this.print('}');
430
431
  }
431
- writeDeclaration(name, signature, modifiers, postfix) {
432
+ writeDeclaration(name, signature, modifiers, postfix, generics) {
432
433
  let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
433
434
  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 : ""}`);
435
+ const typeParams = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : "";
436
+ 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)}${typeParams}(${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 : ""}`);
435
437
  }
436
438
  writeNativeFunctionCall(printer, name, signature) {
437
- printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
439
+ printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}`).join(", ")}) }`);
438
440
  }
439
441
  writeNativeMethodDeclaration(method) {
440
442
  let name = method.name;
@@ -446,7 +448,7 @@ export class CJLanguageWriter extends LanguageWriter {
446
448
  return this.makeString(`${value.asString()}.value`);
447
449
  }
448
450
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
449
- return new CJAssignStatement(variableName, type, expr, isDeclared, isConst);
451
+ return new CJAssignStatement(this.escapeKeyword(variableName), type, expr, isDeclared, isConst);
450
452
  }
451
453
  makeClassInit(type, parameters) {
452
454
  throw new Error(`makeClassInit`);
@@ -501,13 +503,13 @@ export class CJLanguageWriter extends LanguageWriter {
501
503
  return new CJMapForEachStatement(map, key, value, op);
502
504
  }
503
505
  makeDefinedCheck(value) {
504
- return new CJCheckDefinedExpression(value);
506
+ return new CJCheckDefinedExpression(this.escapeKeyword(value));
505
507
  }
506
508
  makeNewObject(objectName, params = []) {
507
509
  return new CJNewObjectExpression(objectName, params);
508
510
  }
509
511
  writePrintLog(message) {
510
- this.print(`println("${message}")`);
512
+ this.print(`println(\"${message}\")`);
511
513
  }
512
514
  makeCast(value, node, options) {
513
515
  var _a;
@@ -526,10 +528,10 @@ export class CJLanguageWriter extends LanguageWriter {
526
528
  return this.makeString("Option.None");
527
529
  }
528
530
  makeUnwrapOptional(expression) {
529
- return new CJMatchExpression(expression, [this.makeString(`Some(unwrap_value)`)], [this.makeString(`unwrap_value`)], this.indentDepth());
531
+ return new CJMatchExpression(this.escapeKeyword(expression.asString()), [this.makeString(`Some(unwrap_value)`)], [this.makeString(`unwrap_value`)], this.indentDepth());
530
532
  }
531
533
  makeValueFromOption(value, destinationConvertor) {
532
- return this.makeString(`${value}`);
534
+ return this.makeString(this.escapeKeyword(value));
533
535
  }
534
536
  makeRuntimeType(rt) {
535
537
  return this.makeString(`RuntimeType.${RuntimeType[rt]}.ordinal`);
@@ -589,7 +591,7 @@ export class CJLanguageWriter extends LanguageWriter {
589
591
  pushNamespace(namespace, options) { }
590
592
  popNamespace(options) { }
591
593
  castToInt(value, bitness) {
592
- return `Int${bitness}(${value})`;
594
+ return `Int${bitness}(${this.escapeKeyword(value)})`;
593
595
  }
594
596
  castToBoolean(value) {
595
597
  return `if (${value}) { Int32(1) } else { Int32(0) }`;
@@ -42,7 +42,7 @@ export declare abstract class CLikeLanguageWriter extends LanguageWriter {
42
42
  isDeclare?: boolean;
43
43
  }, op: (writer: LanguageWriter) => void): void;
44
44
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
45
- private writeDeclaration;
45
+ protected writeDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[], postfix?: string): void;
46
46
  protected stringifyMethodReturnType(type: idl.IDLType, _?: PrintHint): string;
47
47
  protected stringifyMethodArgType(type: idl.IDLType, _?: PrintHint): string;
48
48
  }
@@ -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 } from "../LanguageWriter";
4
+ import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs, DelegationCall, MethodStaticCallExpression } from "../LanguageWriter";
5
5
  import { CLikeLanguageWriter } from "./CLikeLanguageWriter";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
@@ -23,6 +23,9 @@ export declare class CppPointerPropertyAccessExpression implements LanguageExpre
23
23
  constructor(expression: string, name: string);
24
24
  asString(): string;
25
25
  }
26
+ export declare class CPPMethodStaticCallExpression extends MethodStaticCallExpression {
27
+ asString(): string;
28
+ }
26
29
  export declare class CppAssignStatement extends AssignStatement {
27
30
  variableName: string;
28
31
  type: IDLType | undefined;
@@ -36,16 +39,21 @@ export declare class CppAssignStatement extends AssignStatement {
36
39
  export declare class CppLanguageWriter extends CLikeLanguageWriter {
37
40
  private primitivesTypes;
38
41
  protected typeConvertor: IdlNameConvertor;
42
+ protected classMode: 'normal' | 'detached';
43
+ protected currentClass: string[];
39
44
  constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, primitivesTypes: PrimitiveTypeList);
45
+ changeModeTo(mode: typeof this.classMode): void;
40
46
  getNodeName(type: IDLNode): string;
41
47
  fork(options?: {
42
48
  resolver?: ReferenceResolver;
43
49
  }): LanguageWriter;
50
+ protected writeDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[], postfix?: string): void;
44
51
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[]): void;
45
52
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
46
53
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
54
+ writeStaticMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
47
55
  writeFieldDeclaration(name: string, type: IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
48
- writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
56
+ writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, delegationCall?: DelegationCall, modifiers?: MethodModifier[]): void;
49
57
  writeProperty(propName: string, propType: IDLType, modifiers: FieldModifier[], getter?: {
50
58
  method: Method;
51
59
  op: () => void;
@@ -84,6 +92,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
84
92
  makeUnionSelector(value: string, valueType: string): LanguageStatement;
85
93
  makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, convertorIndex: number): LanguageExpression;
86
94
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
95
+ makeStaticMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
87
96
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
88
97
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
89
98
  makeArrayInit(type: IDLContainerType): LanguageExpression;