@idlizer/core 2.0.23 → 2.0.25

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.
@@ -106,6 +106,15 @@ export declare class NumericConvertor extends BaseArgConvertor {
106
106
  interopType(): idl.IDLType;
107
107
  isPointerType(): boolean;
108
108
  }
109
+ export declare class BigIntToU64Convertor extends BaseArgConvertor {
110
+ constructor(param: string);
111
+ convertorArg(param: string, writer: LanguageWriter): string;
112
+ convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
113
+ convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
114
+ nativeType(): idl.IDLType;
115
+ interopType(): idl.IDLType;
116
+ isPointerType(): boolean;
117
+ }
109
118
  export declare class PointerConvertor extends BaseArgConvertor {
110
119
  constructor(param: string);
111
120
  convertorArg(param: string, writer: LanguageWriter): string;
@@ -242,6 +242,29 @@ export class NumericConvertor extends BaseArgConvertor {
242
242
  return false;
243
243
  }
244
244
  }
245
+ export class BigIntToU64Convertor extends BaseArgConvertor {
246
+ constructor(param) {
247
+ super(idl.IDLBigintType, [RuntimeType.BIGINT], false, false, param);
248
+ }
249
+ convertorArg(param, writer) {
250
+ return writer.escapeKeyword(param);
251
+ }
252
+ convertorSerialize(param, value, printer) {
253
+ printer.writeMethodCall(`${param}Serializer`, "writeUInt64", [value]);
254
+ }
255
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
256
+ return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readUInt64()`), this.idlType, { optional: false }));
257
+ }
258
+ nativeType() {
259
+ return idl.IDLU64Type;
260
+ }
261
+ interopType() {
262
+ return idl.IDLU64Type;
263
+ }
264
+ isPointerType() {
265
+ return false;
266
+ }
267
+ }
245
268
  export class PointerConvertor extends BaseArgConvertor {
246
269
  constructor(param) {
247
270
  // check numericPrimitiveTypes.include(type)
@@ -887,7 +910,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
887
910
  throw new Error("Must never be used");
888
911
  }
889
912
  isPointerType() {
890
- return true;
913
+ return false;
891
914
  }
892
915
  unionDiscriminator(value, index, writer, duplicates) {
893
916
  if (idl.isInterface(this.declaration)) {
@@ -1,7 +1,8 @@
1
1
  import * as idl from '../../idl';
2
2
  import { IdlNameConvertor } from "../nameConvertor";
3
- import { InteropConvertor } from './InteropConvertors';
3
+ import { InteropConvertor, InteropReturnTypeConvertor } from './InteropConvertors';
4
4
  import { InteropArgConvertor } from './InteropConvertors';
5
+ import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
5
6
  export declare class CppInteropConvertor extends InteropConvertor implements IdlNameConvertor {
6
7
  private unwrap;
7
8
  convert(node: idl.IDLNode): string;
@@ -11,4 +12,9 @@ export declare class CppInteropArgConvertor extends InteropArgConvertor {
11
12
  convertOptional(type: idl.IDLOptionalType): string;
12
13
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
13
14
  }
15
+ export declare class CppReturnTypeConvertor extends InteropReturnTypeConvertor {
16
+ protected resolver: ReferenceResolver;
17
+ constructor(resolver: ReferenceResolver);
18
+ convertTypeReference(type: idl.IDLReferenceType): string;
19
+ }
14
20
  //# sourceMappingURL=CppConvertors.d.ts.map
@@ -14,9 +14,10 @@
14
14
  */
15
15
  import * as idl from '../../idl';
16
16
  import { generatorConfiguration } from "../../config";
17
- import { InteropConvertor } from './InteropConvertors';
17
+ import { InteropConvertor, InteropReturnTypeConvertor } from './InteropConvertors';
18
18
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
19
  import { InteropArgConvertor } from './InteropConvertors';
20
+ import { isMaterialized } from '../../peer-generation/Materialized';
20
21
  export class CppInteropConvertor extends InteropConvertor {
21
22
  unwrap(type, result) {
22
23
  const conf = generatorConfiguration();
@@ -55,4 +56,16 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
55
56
  }
56
57
  }
57
58
  CppInteropArgConvertor.INSTANCE = new CppInteropArgConvertor();
59
+ export class CppReturnTypeConvertor extends InteropReturnTypeConvertor {
60
+ constructor(resolver) {
61
+ super();
62
+ this.resolver = resolver;
63
+ }
64
+ convertTypeReference(type) {
65
+ const resolved = this.resolver.resolveTypeReference(type);
66
+ if (resolved && idl.isInterface(resolved) && isMaterialized(resolved, this.resolver))
67
+ return generatorConfiguration().param("TypePrefix") + type.name;
68
+ return super.convertTypeReference(type);
69
+ }
70
+ }
58
71
  //# sourceMappingURL=CppConvertors.js.map
@@ -135,6 +135,7 @@ export class InteropConvertor {
135
135
  case idl.IDLNumberType: return this.make(`Number`);
136
136
  case idl.IDLStringType: return this.make(`String`);
137
137
  case idl.IDLBooleanType: return this.make(`Boolean`);
138
+ case idl.IDLBigintType: return this.make(`UInt64`); // TODO add arbitrary precision numeric type
138
139
  case idl.IDLPointerType: return this.make('NativePointer');
139
140
  case idl.IDLUnknownType:
140
141
  case idl.IDLCustomObjectType:
@@ -211,6 +212,7 @@ export class InteropReturnTypeConvertor {
211
212
  case idl.IDLF64Type:
212
213
  case idl.IDLNumberType: return PrimitiveTypesInstance.Int32.getText();
213
214
  case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
215
+ case idl.IDLBigintType: return PrimitiveTypesInstance.Int64.getText();
214
216
  case idl.IDLAnyType:
215
217
  case idl.IDLBufferType:
216
218
  case idl.IDLStringType:
@@ -152,7 +152,7 @@ class CPPThrowErrorStatement {
152
152
  this.message = message;
153
153
  }
154
154
  write(writer) {
155
- writer.print(`throw "${this.message}";`);
155
+ writer.print(`INTEROP_FATAL("${this.message}");`);
156
156
  }
157
157
  }
158
158
  ////////////////////////////////////////////////////////////////
@@ -302,6 +302,7 @@ export declare function getFQName(a: IDLEntry): string;
302
302
  export declare function createVersion(value: string[], extendedAttributes?: IDLExtendedAttribute[], fileName?: string): IDLVersion;
303
303
  export declare function fetchNamespaceFrom(pointOfView?: IDLNode): IDLNamespace | undefined;
304
304
  export declare function createReferenceType(name: string, typeArguments?: IDLType[], pointOfView?: IDLNode): IDLReferenceType;
305
+ export declare function createReferenceType(source: IDLEntry, typeArguments?: IDLType[]): IDLReferenceType;
305
306
  export declare function createUnspecifiedGenericType(name: string, typeArguments: IDLType[]): IDLUnspecifiedGenericType;
306
307
  export declare function entityToType(entity: IDLNode): IDLType;
307
308
  export declare function createContainerType(container: IDLContainerKind, element: IDLType[]): IDLContainerType;
@@ -409,12 +409,22 @@ export function fetchNamespaceFrom(pointOfView) {
409
409
  }
410
410
  return undefined;
411
411
  }
412
- export function createReferenceType(name, typeArguments, pointOfView) {
412
+ export function createReferenceType(nameOrSource, typeArguments, pointOfView) {
413
+ let name;
414
+ let namespace;
415
+ if (typeof nameOrSource === 'string') {
416
+ name = nameOrSource;
417
+ namespace = fetchNamespaceFrom(pointOfView);
418
+ }
419
+ else {
420
+ name = nameOrSource.name;
421
+ namespace = fetchNamespaceFrom(nameOrSource);
422
+ }
413
423
  return {
414
424
  kind: IDLKind.ReferenceType,
415
425
  name,
416
426
  typeArguments,
417
- namespace: fetchNamespaceFrom(pointOfView),
427
+ namespace: namespace,
418
428
  _idlNodeBrand: innerIdlSymbol,
419
429
  _idlTypeBrand: innerIdlSymbol,
420
430
  _idlNamedNodeBrand: innerIdlSymbol,
@@ -19,7 +19,7 @@ export declare class MaterializedMethod extends PeerMethod {
19
19
  get peerMethodName(): string;
20
20
  get implNamespaceName(): string;
21
21
  get toStringName(): string;
22
- get dummyReturnValue(): string | undefined;
22
+ dummyReturnValue(resolver: ReferenceResolver): string | undefined;
23
23
  get receiverType(): string;
24
24
  get apiCall(): string;
25
25
  get apiKind(): string;
@@ -14,17 +14,20 @@
14
14
  */
15
15
  import { generatorConfiguration } from '../config';
16
16
  import * as idl from '../idl';
17
+ import { CppReturnTypeConvertor } from '../LanguageWriters/convertors/CppConvertors';
17
18
  import { copyMethod, Method, MethodModifier, NamedMethodSignature } from '../LanguageWriters/LanguageWriter';
18
19
  import { capitalize } from '../util';
19
20
  import { isBuilderClass } from './BuilderClass';
20
21
  import { qualifiedName } from './idl/common';
21
22
  import { PeerMethod } from './PeerMethod';
22
23
  export function isMaterialized(declaration, resolver) {
23
- if (idl.isHandwritten(declaration) ||
24
- isBuilderClass(declaration) ||
25
- declaration.subkind === idl.IDLInterfaceSubkind.AnonymousInterface ||
26
- declaration.subkind === idl.IDLInterfaceSubkind.Tuple) {
24
+ if (!idl.isInterfaceSubkind(declaration) && !idl.isClassSubkind(declaration))
27
25
  return false;
26
+ if (idl.isHandwritten(declaration) || isBuilderClass(declaration))
27
+ return false;
28
+ for (const forceMaterialized of generatorConfiguration().param("forceMaterialized")) {
29
+ if (declaration.name == forceMaterialized)
30
+ return true;
28
31
  }
29
32
  for (const ignore of generatorConfiguration().param("ignoreMaterialized")) {
30
33
  if (declaration.name.endsWith(ignore))
@@ -32,7 +35,7 @@ export function isMaterialized(declaration, resolver) {
32
35
  }
33
36
  // A materialized class is a class or an interface with methods
34
37
  // excluding components and related classes
35
- if (declaration.methods.length > 0)
38
+ if (declaration.methods.length > 0 || declaration.constructors.length > 0)
36
39
  return true;
37
40
  // Or a class or an interface derived from materialized class
38
41
  if (idl.hasSuperType(declaration)) {
@@ -72,7 +75,7 @@ export class MaterializedMethod extends PeerMethod {
72
75
  default: return super.toStringName;
73
76
  }
74
77
  }
75
- get dummyReturnValue() {
78
+ dummyReturnValue(resolver) {
76
79
  var _a;
77
80
  if (this.method.name === "ctor")
78
81
  return `(${this.originalParentName}Peer*) 100`;
@@ -85,7 +88,8 @@ export class MaterializedMethod extends PeerMethod {
85
88
  if (this.method.signature.returnType === idl.IDLBooleanType) {
86
89
  return '0';
87
90
  }
88
- return `(void*) 300`;
91
+ const convertor = new CppReturnTypeConvertor(resolver);
92
+ return `(${convertor.convert(this.returnType)}) 300`;
89
93
  }
90
94
  if (idl.isReferenceType(this.method.signature.returnType)) {
91
95
  return "{}";
@@ -16,7 +16,7 @@ import { warn } from 'console';
16
16
  import * as idl from '../idl';
17
17
  import { Language } from '../Language';
18
18
  import { createLanguageWriter } from '../LanguageWriters';
19
- import { BufferConvertor, CallbackConvertor, DateConvertor, MapConvertor, PointerConvertor, TupleConvertor, TypeAliasConvertor, AggregateConvertor, StringConvertor, ClassConvertor, ArrayConvertor, FunctionConvertor, OptionConvertor, NumberConvertor, NumericConvertor, CustomTypeConvertor, UnionConvertor, MaterializedClassConvertor, BooleanConvertor, EnumConvertor, UndefinedConvertor, VoidConvertor, ImportTypeConvertor, InterfaceConvertor, } from "../LanguageWriters/ArgConvertors";
19
+ import { BufferConvertor, CallbackConvertor, DateConvertor, MapConvertor, PointerConvertor, TupleConvertor, TypeAliasConvertor, AggregateConvertor, StringConvertor, ClassConvertor, ArrayConvertor, FunctionConvertor, OptionConvertor, NumberConvertor, NumericConvertor, CustomTypeConvertor, UnionConvertor, MaterializedClassConvertor, BooleanConvertor, EnumConvertor, UndefinedConvertor, VoidConvertor, ImportTypeConvertor, InterfaceConvertor, BigIntToU64Convertor, } from "../LanguageWriters/ArgConvertors";
20
20
  import { InteropNameConvertor } from '../LanguageWriters/convertors/InteropConvertors';
21
21
  import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
22
22
  import { CppInteropConvertor } from '../LanguageWriters/convertors/CppConvertors';
@@ -185,6 +185,7 @@ export class PeerLibrary {
185
185
  case idl.IDLF16Type: return new NumericConvertor(param, type);
186
186
  case idl.IDLF32Type: return new NumericConvertor(param, type);
187
187
  case idl.IDLF64Type: return new NumericConvertor(param, type);
188
+ case idl.IDLBigintType: return new BigIntToU64Convertor(param);
188
189
  case idl.IDLPointerType: return new PointerConvertor(param);
189
190
  case idl.IDLBufferType: return new BufferConvertor(param);
190
191
  case idl.IDLBooleanType: return new BooleanConvertor(param);
@@ -2,6 +2,7 @@ import { IDLType } from "../idl";
2
2
  import { IdlNameConvertor } from "../LanguageWriters";
3
3
  import { ArgConvertor } from "../LanguageWriters/ArgConvertors";
4
4
  import { Method } from "../LanguageWriters/LanguageWriter";
5
+ import { ReferenceResolver } from "./ReferenceResolver";
5
6
  export declare class PeerMethod {
6
7
  originalParentName: string;
7
8
  argConvertors: ArgConvertor[];
@@ -17,7 +18,7 @@ export declare class PeerMethod {
17
18
  get implNamespaceName(): string;
18
19
  get implName(): string;
19
20
  get toStringName(): string;
20
- get dummyReturnValue(): string | undefined;
21
+ dummyReturnValue(resolver: ReferenceResolver): string | undefined;
21
22
  get receiverType(): string;
22
23
  get apiCall(): string;
23
24
  get apiKind(): string;
@@ -48,7 +48,7 @@ export class PeerMethod {
48
48
  get toStringName() {
49
49
  return this.method.name;
50
50
  }
51
- get dummyReturnValue() {
51
+ dummyReturnValue(resolver) {
52
52
  return undefined;
53
53
  }
54
54
  get receiverType() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.0.23",
3
+ "version": "2.0.25",
4
4
  "description": "",
5
5
  "types": "build/lib/src/index.d.ts",
6
6
  "exports": {
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "keywords": [],
36
36
  "dependencies": {
37
- "@koalaui/interop": "1.5.0",
37
+ "@koalaui/interop": "1.5.1",
38
38
  "typescript": "4.9.5",
39
39
  "@types/node": "^18.0.0"
40
40
  },