@idlizer/core 2.1.0 → 2.1.2
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.
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +13 -0
- package/build/lib/src/LanguageWriters/ArgConvertors.js +66 -12
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +8 -1
- package/build/lib/src/LanguageWriters/LanguageWriter.js +3 -0
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +5 -3
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +0 -1
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -0
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +2 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +9 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +46 -28
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +7 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +3 -3
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +0 -1
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -3
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +8 -2
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +29 -6
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +7 -1
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +31 -5
- package/build/lib/src/LibraryInterface.d.ts +0 -1
- package/build/lib/src/config.d.ts +823 -0
- package/build/lib/src/config.js +9 -0
- package/build/lib/src/from-idl/DtsPrinter.js +2 -2
- package/build/lib/src/idl.d.ts +4 -2
- package/build/lib/src/idl.js +13 -2
- package/build/lib/src/idlize.d.ts +1 -0
- package/build/lib/src/idlize.js +3 -2
- package/build/lib/src/index.d.ts +2 -0
- package/build/lib/src/index.js +2 -0
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +1 -3
- package/build/lib/src/peer-generation/PeerLibrary.js +10 -9
- package/build/lib/src/peer-generation/isEnumType.d.ts +5 -0
- package/build/lib/src/peer-generation/isEnumType.js +29 -0
- package/build/lib/src/peer-generation/modules.d.ts +10 -0
- package/build/lib/src/peer-generation/modules.js +38 -0
- package/build/lib/src/util.d.ts +1 -0
- package/build/lib/src/util.js +6 -0
- package/package.json +2 -2
- package/build/lib/src/configMerge.d.ts +0 -2
- package/build/lib/src/configMerge.js +0 -42
- package/webidl2.js/LICENSE +0 -21
- package/webidl2.js/README.md +0 -827
- package/webidl2.js/dist/package.json +0 -3
|
@@ -15,6 +15,7 @@ export interface ArgConvertor {
|
|
|
15
15
|
convertorArg(param: string, writer: LanguageWriter): string;
|
|
16
16
|
convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
|
|
17
17
|
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
18
|
+
holdResource(resourceName: string, holder: string, writer: LanguageWriter): void;
|
|
18
19
|
interopType(): idl.IDLType;
|
|
19
20
|
nativeType(): idl.IDLType;
|
|
20
21
|
targetType(writer: LanguageWriter): string;
|
|
@@ -23,6 +24,7 @@ export interface ArgConvertor {
|
|
|
23
24
|
getMembers(): string[];
|
|
24
25
|
getObjectAccessor(languge: Language, value: string, args?: Record<string, string>, writer?: LanguageWriter): string;
|
|
25
26
|
}
|
|
27
|
+
export declare function isDirectConvertedType(originalType: idl.IDLType | undefined, library: PeerLibrary): boolean;
|
|
26
28
|
export declare function isVMContextMethod(method: Method): boolean;
|
|
27
29
|
export declare function isDirectMethod(method: Method, library: PeerLibrary): boolean;
|
|
28
30
|
export declare abstract class BaseArgConvertor implements ArgConvertor {
|
|
@@ -32,6 +34,7 @@ export declare abstract class BaseArgConvertor implements ArgConvertor {
|
|
|
32
34
|
useArray: boolean;
|
|
33
35
|
param: string;
|
|
34
36
|
protected constructor(idlType: idl.IDLType, runtimeTypes: RuntimeType[], isScoped: boolean, useArray: boolean, param: string);
|
|
37
|
+
holdResource(_resourceName: string, _holder: string, _writer: LanguageWriter): void;
|
|
35
38
|
nativeType(): idl.IDLType;
|
|
36
39
|
isPointerType(): boolean;
|
|
37
40
|
interopType(): idl.IDLType;
|
|
@@ -119,6 +122,16 @@ export declare class BigIntToU64Convertor extends BaseArgConvertor {
|
|
|
119
122
|
interopType(): idl.IDLType;
|
|
120
123
|
isPointerType(): boolean;
|
|
121
124
|
}
|
|
125
|
+
export declare class ObjectConvertor extends BaseArgConvertor {
|
|
126
|
+
constructor(param: string);
|
|
127
|
+
convertorArg(param: string, writer: LanguageWriter): string;
|
|
128
|
+
convertorSerialize(param: string, value: string, printer: LanguageWriter): void;
|
|
129
|
+
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
130
|
+
holdResource(name: string, holder: string, writer: LanguageWriter): void;
|
|
131
|
+
nativeType(): idl.IDLType;
|
|
132
|
+
interopType(): idl.IDLType;
|
|
133
|
+
isPointerType(): boolean;
|
|
134
|
+
}
|
|
122
135
|
export declare class PointerConvertor extends BaseArgConvertor {
|
|
123
136
|
constructor(param: string);
|
|
124
137
|
convertorArg(param: string, writer: LanguageWriter): string;
|
|
@@ -23,30 +23,35 @@ import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
|
|
|
23
23
|
import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
|
|
24
24
|
import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
|
|
25
25
|
import { qualifiedName } from "../peer-generation/idl/common";
|
|
26
|
-
function isDirectConvertedType(originalType, library) {
|
|
26
|
+
export function isDirectConvertedType(originalType, library) {
|
|
27
|
+
const debug = false;
|
|
27
28
|
if (originalType == undefined)
|
|
28
29
|
return true; // TODO: is it correct?
|
|
29
|
-
if (
|
|
30
|
+
if (debug)
|
|
31
|
+
console.log(`IDL type ${idl.DebugUtils.debugPrintType(originalType)}`);
|
|
32
|
+
if (originalType == idl.IDLInteropReturnBufferType) {
|
|
30
33
|
return false;
|
|
31
|
-
|
|
34
|
+
}
|
|
35
|
+
if (originalType == idl.IDLSerializerBuffer)
|
|
32
36
|
return true;
|
|
33
37
|
let convertor = library.typeConvertor("x", originalType, false);
|
|
34
38
|
// Resolve aliases.
|
|
35
39
|
while (convertor instanceof TypeAliasConvertor) {
|
|
36
40
|
convertor = convertor.convertor;
|
|
37
41
|
}
|
|
38
|
-
// Temporary!
|
|
39
42
|
if (convertor instanceof ArrayConvertor ||
|
|
40
|
-
convertor instanceof MapConvertor ||
|
|
41
43
|
convertor instanceof CustomTypeConvertor ||
|
|
44
|
+
convertor instanceof UnionConvertor ||
|
|
42
45
|
convertor instanceof CallbackConvertor ||
|
|
46
|
+
convertor instanceof MapConvertor ||
|
|
47
|
+
convertor instanceof TupleConvertor ||
|
|
43
48
|
convertor instanceof AggregateConvertor ||
|
|
44
|
-
convertor instanceof
|
|
45
|
-
// try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
|
|
49
|
+
convertor instanceof OptionConvertor) {
|
|
46
50
|
return false;
|
|
47
51
|
}
|
|
48
52
|
let type = convertor.interopType();
|
|
49
|
-
|
|
53
|
+
if (debug)
|
|
54
|
+
console.log(`converted type ${idl.DebugUtils.debugPrintType(originalType)}`);
|
|
50
55
|
let result = type == idl.IDLI8Type || type == idl.IDLU8Type
|
|
51
56
|
|| type == idl.IDLI16Type || type == idl.IDLU16Type
|
|
52
57
|
|| type == idl.IDLI32Type || type == idl.IDLU32Type
|
|
@@ -55,8 +60,11 @@ function isDirectConvertedType(originalType, library) {
|
|
|
55
60
|
|| type == idl.IDLPointerType
|
|
56
61
|
|| type == idl.IDLBooleanType
|
|
57
62
|
|| type == idl.IDLVoidType
|
|
58
|
-
|| type == idl.IDLUndefinedType
|
|
59
|
-
|
|
63
|
+
|| type == idl.IDLUndefinedType
|
|
64
|
+
|| type == idl.IDLSerializerBuffer
|
|
65
|
+
|| type == idl.IDLNumberType;
|
|
66
|
+
if (!result && debug)
|
|
67
|
+
console.log(`type ${idl.DebugUtils.debugPrintType(type)} is not direct`);
|
|
60
68
|
return result;
|
|
61
69
|
}
|
|
62
70
|
export function isVMContextMethod(method) {
|
|
@@ -66,11 +74,12 @@ export function isVMContextMethod(method) {
|
|
|
66
74
|
!!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT));
|
|
67
75
|
}
|
|
68
76
|
export function isDirectMethod(method, library) {
|
|
69
|
-
if (isVMContextMethod(method))
|
|
77
|
+
if (isVMContextMethod(method)) {
|
|
70
78
|
return false;
|
|
79
|
+
}
|
|
71
80
|
let result = isDirectConvertedType(method.signature.returnType, library) &&
|
|
72
81
|
method.signature.args.every((arg) => isDirectConvertedType(arg, library));
|
|
73
|
-
//if (!result) console.log(`method ${method.name} is not direct`)
|
|
82
|
+
// if (!result) console.log(`method ${method.name} is not direct`)
|
|
74
83
|
return result;
|
|
75
84
|
}
|
|
76
85
|
export class BaseArgConvertor {
|
|
@@ -81,6 +90,7 @@ export class BaseArgConvertor {
|
|
|
81
90
|
this.useArray = useArray;
|
|
82
91
|
this.param = param;
|
|
83
92
|
}
|
|
93
|
+
holdResource(_resourceName, _holder, _writer) { }
|
|
84
94
|
nativeType() {
|
|
85
95
|
throw new Error("Define");
|
|
86
96
|
}
|
|
@@ -311,6 +321,50 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
|
|
|
311
321
|
return false;
|
|
312
322
|
}
|
|
313
323
|
}
|
|
324
|
+
export class ObjectConvertor extends BaseArgConvertor {
|
|
325
|
+
constructor(param) {
|
|
326
|
+
super(idl.IDLAnyType, [
|
|
327
|
+
RuntimeType.BIGINT,
|
|
328
|
+
RuntimeType.BOOLEAN,
|
|
329
|
+
RuntimeType.FUNCTION,
|
|
330
|
+
RuntimeType.MATERIALIZED,
|
|
331
|
+
RuntimeType.NUMBER,
|
|
332
|
+
RuntimeType.OBJECT,
|
|
333
|
+
RuntimeType.STRING,
|
|
334
|
+
RuntimeType.SYMBOL,
|
|
335
|
+
RuntimeType.UNDEFINED
|
|
336
|
+
], false, true, param);
|
|
337
|
+
}
|
|
338
|
+
convertorArg(param, writer) {
|
|
339
|
+
return writer.escapeKeyword(param);
|
|
340
|
+
}
|
|
341
|
+
convertorSerialize(param, value, printer) {
|
|
342
|
+
if (printer.language === Language.CPP) {
|
|
343
|
+
printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
350
|
+
return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
|
|
351
|
+
}
|
|
352
|
+
holdResource(name, holder, writer) {
|
|
353
|
+
writer.writeStatement(writer.makeAssign(name, idl.createReferenceType(`CallbackResource`), writer.makeString(`{${this.param}.resource.resourceId, holdManagedCallbackResource, releaseManagedCallbackResource}`), true));
|
|
354
|
+
writer.writeExpressionStatement(writer.makeMethodCall(holder, 'holdCallbackResource', [
|
|
355
|
+
writer.makeString('&' + name)
|
|
356
|
+
]));
|
|
357
|
+
}
|
|
358
|
+
nativeType() {
|
|
359
|
+
return idl.IDLAnyType;
|
|
360
|
+
}
|
|
361
|
+
interopType() {
|
|
362
|
+
return idl.IDLAnyType;
|
|
363
|
+
}
|
|
364
|
+
isPointerType() {
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
314
368
|
export class PointerConvertor extends BaseArgConvertor {
|
|
315
369
|
constructor(param) {
|
|
316
370
|
// check numericPrimitiveTypes.include(type)
|
|
@@ -236,7 +236,13 @@ export declare abstract class LanguageWriter {
|
|
|
236
236
|
abstract writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
237
237
|
abstract writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
238
238
|
abstract writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
239
|
-
abstract writeProperty(propName: string, propType: idl.IDLType,
|
|
239
|
+
abstract writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
|
|
240
|
+
method: Method;
|
|
241
|
+
op?: () => void;
|
|
242
|
+
}, setter?: {
|
|
243
|
+
method: Method;
|
|
244
|
+
op: () => void;
|
|
245
|
+
}): void;
|
|
240
246
|
abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
241
247
|
abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
242
248
|
abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
@@ -347,6 +353,7 @@ export declare abstract class LanguageWriter {
|
|
|
347
353
|
discriminatorFromExpressions(value: string, runtimeType: RuntimeType, exprs: LanguageExpression[]): LanguageExpression;
|
|
348
354
|
makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
|
|
349
355
|
makeNot(expr: LanguageExpression): LanguageExpression;
|
|
356
|
+
makeSerializedBufferGetter(serializer: string): LanguageExpression;
|
|
350
357
|
makeEquals(args: LanguageExpression[]): LanguageExpression;
|
|
351
358
|
castToInt(value: string, bitness: 8 | 32): string;
|
|
352
359
|
castToBoolean(value: string): string;
|
|
@@ -663,6 +663,9 @@ export class LanguageWriter {
|
|
|
663
663
|
makeNot(expr) {
|
|
664
664
|
return this.makeString(`!(${expr.asString()})`);
|
|
665
665
|
}
|
|
666
|
+
makeSerializedBufferGetter(serializer) {
|
|
667
|
+
return this.makeMethodCall(serializer, `asBuffer`, []);
|
|
668
|
+
}
|
|
666
669
|
makeEquals(args) {
|
|
667
670
|
return this.makeNaryOp("===", args);
|
|
668
671
|
}
|
|
@@ -140,15 +140,16 @@ export class GenericCppConvertor {
|
|
|
140
140
|
case idl.IDLBooleanType: return this.make(`Boolean`);
|
|
141
141
|
case idl.IDLBigintType: return this.make(`UInt64`); // TODO add arbitrary precision numeric type
|
|
142
142
|
case idl.IDLPointerType: return this.make('NativePointer');
|
|
143
|
+
case idl.IDLCustomObjectType: return this.make('CustomObject');
|
|
143
144
|
case idl.IDLUnknownType:
|
|
144
|
-
case idl.
|
|
145
|
-
case idl.IDLAnyType: return this.make(`CustomObject`);
|
|
145
|
+
case idl.IDLAnyType: return this.make(`Object`);
|
|
146
146
|
case idl.IDLUndefinedType: return this.make(`Undefined`);
|
|
147
147
|
case idl.IDLLengthType: return this.make(`Length`);
|
|
148
148
|
case idl.IDLFunctionType: return this.make(`Function`);
|
|
149
149
|
case idl.IDLDate: return this.make(`Date`);
|
|
150
150
|
case idl.IDLBufferType: return this.make('Buffer');
|
|
151
151
|
case idl.IDLPointerType: return this.make('Pointer');
|
|
152
|
+
case idl.IDLSerializerBuffer: return { text: 'KSerializerBuffer', noPrefix: true };
|
|
152
153
|
}
|
|
153
154
|
throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
|
|
154
155
|
}
|
|
@@ -218,7 +219,8 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
|
|
|
218
219
|
case idl.IDLBooleanType: return PrimitiveTypesInstance.Boolean.getText();
|
|
219
220
|
case idl.IDLI32Type: return PrimitiveTypesInstance.Int32.getText();
|
|
220
221
|
case idl.IDLNumberType: return "KInteropNumber";
|
|
221
|
-
case idl.
|
|
222
|
+
case idl.IDLSerializerBuffer: return "KSerializerBuffer";
|
|
223
|
+
case idl.IDLBufferType: return "KInteropBuffer";
|
|
222
224
|
case idl.IDLLengthType: return "KLength";
|
|
223
225
|
case idl.IDLFunctionType: return PrimitiveTypesInstance.Int32.getText();
|
|
224
226
|
case idl.IDLDate: return PrimitiveTypesInstance.Int64.getText();
|
|
@@ -76,7 +76,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
|
|
|
76
76
|
return 'number';
|
|
77
77
|
case idl.IDLStringType: return 'string';
|
|
78
78
|
case idl.IDLFunctionType: return 'Object';
|
|
79
|
-
case idl.IDLBufferType: return 'NativeBuffer';
|
|
80
79
|
case idl.IDLBigintType: return 'long';
|
|
81
80
|
}
|
|
82
81
|
return super.convertPrimitiveType(type);
|
|
@@ -88,6 +88,9 @@ export class InteropReturnTypeConvertor {
|
|
|
88
88
|
}
|
|
89
89
|
return KInteropReturnBuffer;
|
|
90
90
|
}
|
|
91
|
+
if (idl.isEnum(decl)) {
|
|
92
|
+
return PrimitiveTypesInstance.Int32.getText();
|
|
93
|
+
}
|
|
91
94
|
}
|
|
92
95
|
return "void";
|
|
93
96
|
}
|
|
@@ -116,6 +119,7 @@ export class InteropArgConvertor {
|
|
|
116
119
|
case idl.IDLF32Type: return "KFloat";
|
|
117
120
|
case idl.IDLNumberType: return 'KInteropNumber';
|
|
118
121
|
case idl.IDLBigintType: return 'KLong';
|
|
122
|
+
case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
|
|
119
123
|
case idl.IDLBooleanType:
|
|
120
124
|
case idl.IDLFunctionType: return 'KInt';
|
|
121
125
|
case idl.IDLStringType: return 'KStringPtr';
|
|
@@ -122,6 +122,7 @@ export class TSTypeNameConvertor {
|
|
|
122
122
|
case idl.IDLAnyType: return 'any';
|
|
123
123
|
case idl.IDLUndefinedType: return 'undefined';
|
|
124
124
|
case idl.IDLPointerType: return 'KPointer';
|
|
125
|
+
case idl.IDLSerializerBuffer: return 'KSerializerBuffer';
|
|
125
126
|
case idl.IDLVoidType: return 'void';
|
|
126
127
|
case idl.IDLBooleanType: return 'boolean';
|
|
127
128
|
case idl.IDLI32Type:
|
|
@@ -145,7 +146,7 @@ export class TSTypeNameConvertor {
|
|
|
145
146
|
case idl.IDLDate:
|
|
146
147
|
return 'Date';
|
|
147
148
|
case idl.IDLBufferType:
|
|
148
|
-
return
|
|
149
|
+
return 'NativeBuffer';
|
|
149
150
|
case idl.IDLInteropReturnBufferType:
|
|
150
151
|
return `KInteropReturnBuffer`;
|
|
151
152
|
}
|
|
@@ -89,10 +89,18 @@ export declare class CJLanguageWriter extends LanguageWriter {
|
|
|
89
89
|
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
90
90
|
writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
91
91
|
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
92
|
-
writeProperty(propName: string, propType: idl.IDLType, mutable?: boolean, getterLambda?: (writer: this) => void, setterLambda?: (writer: this) => void): void;
|
|
93
92
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
94
93
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
95
94
|
writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
95
|
+
writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
|
|
96
|
+
method: Method;
|
|
97
|
+
op?: () => void;
|
|
98
|
+
}, setter?: {
|
|
99
|
+
method: Method;
|
|
100
|
+
op: () => void;
|
|
101
|
+
}): void;
|
|
102
|
+
writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
|
|
103
|
+
writeSetterImplementation(method: Method, op: (writer: this) => void): void;
|
|
96
104
|
writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
|
|
97
105
|
private writeDeclaration;
|
|
98
106
|
writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
|
|
@@ -348,33 +348,6 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
348
348
|
this.popIndent();
|
|
349
349
|
this.printer.print(`}`);
|
|
350
350
|
}
|
|
351
|
-
writeProperty(propName, propType, mutable, getterLambda, setterLambda) {
|
|
352
|
-
let shortName = propName.concat("_container");
|
|
353
|
-
if (!getterLambda) {
|
|
354
|
-
this.print(`private var ${shortName}: ${this.getNodeName(propType)}`);
|
|
355
|
-
}
|
|
356
|
-
this.print(`${mutable ? "mut " : ""}prop ${propName}: ${this.getNodeName(propType)} {`);
|
|
357
|
-
this.pushIndent();
|
|
358
|
-
this.print(`get() {`);
|
|
359
|
-
this.pushIndent();
|
|
360
|
-
if (getterLambda) {
|
|
361
|
-
getterLambda(this);
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
this.print(`return ${shortName}`);
|
|
365
|
-
}
|
|
366
|
-
this.popIndent();
|
|
367
|
-
this.print(`}`);
|
|
368
|
-
if (mutable) {
|
|
369
|
-
this.print(`set(x) { ${shortName} = x }`);
|
|
370
|
-
this.pushIndent();
|
|
371
|
-
if (setterLambda)
|
|
372
|
-
setterLambda(this);
|
|
373
|
-
this.popIndent();
|
|
374
|
-
}
|
|
375
|
-
this.popIndent();
|
|
376
|
-
this.print(`}`);
|
|
377
|
-
}
|
|
378
351
|
writeTypeDeclaration(decl) {
|
|
379
352
|
throw new Error(`writeTypeDeclaration not implemented`);
|
|
380
353
|
}
|
|
@@ -389,6 +362,51 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
389
362
|
this.popIndent();
|
|
390
363
|
this.printer.print(`}`);
|
|
391
364
|
}
|
|
365
|
+
writeProperty(propName, propType, modifiers, getter, setter) {
|
|
366
|
+
let containerName = propName.concat("_container");
|
|
367
|
+
let truePropName = this.escapeKeyword(propName);
|
|
368
|
+
if (getter) {
|
|
369
|
+
if (!getter.op) {
|
|
370
|
+
this.print(`private var ${containerName}: ${this.getNodeName(propType)}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
let isStatic = modifiers.includes(FieldModifier.STATIC);
|
|
374
|
+
let isMutable = !modifiers.includes(FieldModifier.READONLY);
|
|
375
|
+
this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}`);
|
|
376
|
+
if (getter) {
|
|
377
|
+
this.print('{');
|
|
378
|
+
this.pushIndent();
|
|
379
|
+
this.writeGetterImplementation(getter.method, getter.op);
|
|
380
|
+
if (isMutable) {
|
|
381
|
+
if (setter) {
|
|
382
|
+
this.writeSetterImplementation(setter.method, setter ? setter.op : (writer) => { this.print(`${containerName} = ${truePropName}`); });
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
this.print(`set(${truePropName}) {`);
|
|
386
|
+
this.pushIndent();
|
|
387
|
+
this.print(`${containerName} = ${truePropName}`);
|
|
388
|
+
this.popIndent();
|
|
389
|
+
this.print(`}`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
this.popIndent();
|
|
393
|
+
this.print('}');
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
writeGetterImplementation(method, op) {
|
|
397
|
+
this.print(`get() {`);
|
|
398
|
+
this.pushIndent();
|
|
399
|
+
op ? op(this) : this.print(`return ${method.signature.argsNames.map(arg => `${arg}_container`).join(', ')}`);
|
|
400
|
+
this.popIndent();
|
|
401
|
+
this.print('}');
|
|
402
|
+
}
|
|
403
|
+
writeSetterImplementation(method, op) {
|
|
404
|
+
this.print(`set(${method.signature.argsNames.join(', ')}) {`);
|
|
405
|
+
this.pushIndent();
|
|
406
|
+
op(this);
|
|
407
|
+
this.popIndent();
|
|
408
|
+
this.print('}');
|
|
409
|
+
}
|
|
392
410
|
writeCJForeign(op) {
|
|
393
411
|
this.print(`foreign {`);
|
|
394
412
|
this.pushIndent();
|
|
@@ -399,7 +417,7 @@ export class CJLanguageWriter extends LanguageWriter {
|
|
|
399
417
|
writeDeclaration(name, signature, modifiers, postfix) {
|
|
400
418
|
let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
|
|
401
419
|
prefix = prefix ? prefix + " " : "";
|
|
402
|
-
this.print(`${prefix}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 : ""}`);
|
|
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 : ""}`);
|
|
403
421
|
}
|
|
404
422
|
writeNativeFunctionCall(printer, name, signature) {
|
|
405
423
|
printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
|
|
@@ -46,7 +46,13 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
46
46
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
47
47
|
writeFieldDeclaration(name: string, type: IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
48
48
|
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
49
|
-
writeProperty(propName: string, propType: IDLType,
|
|
49
|
+
writeProperty(propName: string, propType: IDLType, modifiers: FieldModifier[], getter?: {
|
|
50
|
+
method: Method;
|
|
51
|
+
op: () => void;
|
|
52
|
+
}, setter?: {
|
|
53
|
+
method: Method;
|
|
54
|
+
op: () => void;
|
|
55
|
+
}): void;
|
|
50
56
|
writeTypeDeclaration(decl: IDLTypedef): void;
|
|
51
57
|
writeConstant(constName: string, constType: IDLType, constVal?: string): void;
|
|
52
58
|
/**
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* See the License for the specific language governing permissions and
|
|
13
13
|
* limitations under the License.
|
|
14
14
|
*/
|
|
15
|
-
import { createReferenceType, forceAsNamedNode, IDLU32Type,
|
|
15
|
+
import { createReferenceType, forceAsNamedNode, IDLU32Type, IDLVoidType } from '../../idl';
|
|
16
16
|
import { Language } from '../../Language';
|
|
17
17
|
import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
|
|
18
18
|
import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, NamedMethodSignature, StringExpression } from "../LanguageWriter";
|
|
@@ -217,7 +217,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
217
217
|
this.popIndent();
|
|
218
218
|
this.print(`}`);
|
|
219
219
|
}
|
|
220
|
-
writeProperty(propName, propType,
|
|
220
|
+
writeProperty(propName, propType, modifiers, getter, setter) {
|
|
221
221
|
throw new Error("writeProperty for c++ is not implemented yet.");
|
|
222
222
|
}
|
|
223
223
|
writeTypeDeclaration(decl) {
|
|
@@ -460,7 +460,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
|
|
|
460
460
|
}
|
|
461
461
|
makeSerializerConstructorSignatures() {
|
|
462
462
|
const fromBufferCtor = new NamedMethodSignature(IDLVoidType, [
|
|
463
|
-
|
|
463
|
+
idl.IDLSerializerBuffer,
|
|
464
464
|
IDLU32Type,
|
|
465
465
|
createReferenceType("CallbackResourceHolder")
|
|
466
466
|
], ["data", "dataLength", "resourceHolder"], [undefined, `0`, `nullptr`], [undefined, undefined, undefined, PrintHint.AsPointer]);
|
|
@@ -56,7 +56,6 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
56
56
|
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
57
57
|
isQuickType(type: IDLType): boolean;
|
|
58
58
|
writeNativeMethodDeclaration(method: Method): void;
|
|
59
|
-
writeProperty(propName: string, propType: IDLType): void;
|
|
60
59
|
makeUnionVariantCondition(convertor: ArgConvertor, valueName: string, valueType: string, type: string, convertorIndex: number, runtimeTypeIndex: number): LanguageExpression;
|
|
61
60
|
makeCastCustomObject(customName: string, isGenericType: boolean): LanguageExpression;
|
|
62
61
|
makeHasOwnProperty(value: string, valueTypeName: string, property: string, propertyTypeName: string): LanguageExpression;
|
|
@@ -227,9 +227,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
227
227
|
}
|
|
228
228
|
this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
|
|
229
229
|
}
|
|
230
|
-
writeProperty(propName, propType) {
|
|
231
|
-
throw new Error("writeProperty for ArkTS is not implemented yet.");
|
|
232
|
-
}
|
|
233
230
|
makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex, runtimeTypeIndex) {
|
|
234
231
|
if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
|
|
235
232
|
return this.instanceOf(convertor, valueName);
|
|
@@ -40,7 +40,13 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
40
40
|
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
41
41
|
writeNativeMethodDeclaration(method: Method): void;
|
|
42
42
|
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
43
|
-
writeProperty(propName: string, propType: idl.IDLType
|
|
43
|
+
writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
|
|
44
|
+
method: Method;
|
|
45
|
+
op: () => void;
|
|
46
|
+
}, setter?: {
|
|
47
|
+
method: Method;
|
|
48
|
+
op: () => void;
|
|
49
|
+
}): void;
|
|
44
50
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
45
51
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
46
52
|
makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
|
|
@@ -74,7 +80,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
74
80
|
makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
|
|
75
81
|
makeMapInit(type: idl.IDLType): LanguageExpression;
|
|
76
82
|
makeTupleAccess(value: string, index: number): LanguageExpression;
|
|
77
|
-
enumFromOrdinal(value: LanguageExpression,
|
|
83
|
+
enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
|
|
78
84
|
ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
|
|
79
85
|
makeValueFromOption(value: string): LanguageExpression;
|
|
80
86
|
runtimeType(param: ArgConvertor, valueType: string, value: string): void;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { Language } from '../../Language';
|
|
16
16
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
17
|
-
import { AssignStatement, CheckOptionalStatement, FieldModifier, LambdaExpression, MethodModifier, } from "../LanguageWriter";
|
|
17
|
+
import { AssignStatement, CheckOptionalStatement, FieldModifier, LambdaExpression, Method, MethodModifier, MethodSignature, NamedMethodSignature, } from "../LanguageWriter";
|
|
18
18
|
import { CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
|
|
19
19
|
import * as idl from '../../idl';
|
|
20
20
|
import { RuntimeType } from "../common";
|
|
@@ -149,8 +149,29 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
149
149
|
this.popIndent();
|
|
150
150
|
this.printer.print(`}`);
|
|
151
151
|
}
|
|
152
|
-
writeProperty(propName, propType) {
|
|
153
|
-
|
|
152
|
+
writeProperty(propName, propType, modifiers, getter, setter) {
|
|
153
|
+
let isStatic = modifiers.includes(FieldModifier.STATIC);
|
|
154
|
+
let isMutable = !modifiers.includes(FieldModifier.READONLY);
|
|
155
|
+
let containerName = propName.concat("_container");
|
|
156
|
+
if (getter) {
|
|
157
|
+
if (!getter.op) {
|
|
158
|
+
this.print(`private var ${this.getNodeName(propType)} ${containerName};`);
|
|
159
|
+
}
|
|
160
|
+
this.writeGetterImplementation(new Method(propName, new MethodSignature(propType, []), isStatic ? [MethodModifier.STATIC, MethodModifier.PUBLIC] : [MethodModifier.PUBLIC]), getter ? getter.op :
|
|
161
|
+
(writer) => {
|
|
162
|
+
writer.print(`return ${containerName}`);
|
|
163
|
+
});
|
|
164
|
+
if (isMutable) {
|
|
165
|
+
const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
|
|
166
|
+
this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC, MethodModifier.PUBLIC] : [MethodModifier.PUBLIC]), setter ? setter.op :
|
|
167
|
+
(writer) => {
|
|
168
|
+
writer.print(`${containerName} = ${propName};`);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.writeMethodDeclaration(propName, new MethodSignature(propType, []));
|
|
174
|
+
}
|
|
154
175
|
}
|
|
155
176
|
writeTypeDeclaration(decl) {
|
|
156
177
|
throw new Error(`Type declarations do not exist in Java, use something else`);
|
|
@@ -255,11 +276,13 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
|
255
276
|
makeTupleAccess(value, index) {
|
|
256
277
|
return this.makeString(`${value}.value${index}`);
|
|
257
278
|
}
|
|
258
|
-
enumFromOrdinal(value,
|
|
259
|
-
|
|
279
|
+
enumFromOrdinal(value, enumEntry) {
|
|
280
|
+
const enumName = idl.forceAsNamedNode(enumEntry).name;
|
|
281
|
+
const ordinal = value.asString();
|
|
282
|
+
return this.makeString(`${enumName}.values()[${ordinal}]`);
|
|
260
283
|
}
|
|
261
284
|
ordinalFromEnum(value, _) {
|
|
262
|
-
return this.makeString(`${value.asString()}.
|
|
285
|
+
return this.makeString(`${value.asString()}.ordinal()`);
|
|
263
286
|
}
|
|
264
287
|
makeValueFromOption(value) {
|
|
265
288
|
return this.makeString(`${value}`);
|
|
@@ -53,7 +53,13 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
53
53
|
writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
54
54
|
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
55
55
|
writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
56
|
-
writeProperty(propName: string, propType: idl.IDLType
|
|
56
|
+
writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
|
|
57
|
+
method: Method;
|
|
58
|
+
op: () => void;
|
|
59
|
+
}, setter?: {
|
|
60
|
+
method: Method;
|
|
61
|
+
op: () => void;
|
|
62
|
+
}): void;
|
|
57
63
|
writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
58
64
|
writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
59
65
|
private writeDeclaration;
|
|
@@ -16,10 +16,11 @@ import * as idl from '../../idl';
|
|
|
16
16
|
import { isOptionalType } from '../../idl';
|
|
17
17
|
import { Language } from '../../Language';
|
|
18
18
|
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
19
|
-
import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
|
|
19
|
+
import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
|
|
20
20
|
import { RuntimeType } from "../common";
|
|
21
21
|
import { rightmostIndexOf, throwException } from "../../util";
|
|
22
22
|
import { TSKeywords } from '../../languageSpecificKeywords';
|
|
23
|
+
import { isStringEnumType } from '../../peer-generation/isEnumType';
|
|
23
24
|
////////////////////////////////////////////////////////////////
|
|
24
25
|
// EXPRESSIONS //
|
|
25
26
|
////////////////////////////////////////////////////////////////
|
|
@@ -223,7 +224,7 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
223
224
|
this.writeDeclaration(name, signature, true, false, modifiers);
|
|
224
225
|
}
|
|
225
226
|
writeConstructorImplementation(className, signature, op, superCall, modifiers) {
|
|
226
|
-
this.writeDeclaration(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') : ''}
|
|
227
|
+
this.writeDeclaration(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}constructor`, signature, false, true);
|
|
227
228
|
this.pushIndent();
|
|
228
229
|
if (superCall) {
|
|
229
230
|
this.print(`super(${superCall.signature.args.map((_, i) => superCall === null || superCall === void 0 ? void 0 : superCall.signature.argName(i)).join(", ")})`);
|
|
@@ -239,8 +240,29 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
239
240
|
this.popIndent();
|
|
240
241
|
this.printer.print(`}`);
|
|
241
242
|
}
|
|
242
|
-
writeProperty(propName, propType) {
|
|
243
|
-
|
|
243
|
+
writeProperty(propName, propType, modifiers, getter, setter) {
|
|
244
|
+
let isStatic = modifiers.includes(FieldModifier.STATIC);
|
|
245
|
+
let isMutable = !modifiers.includes(FieldModifier.READONLY);
|
|
246
|
+
let containerName = propName.concat("_container");
|
|
247
|
+
if (getter) {
|
|
248
|
+
if (!getter.op) {
|
|
249
|
+
this.print(`private var ${this.getNodeName(propType)} ${containerName}`);
|
|
250
|
+
}
|
|
251
|
+
this.writeGetterImplementation(new Method(propName, new MethodSignature(propType, []), isStatic ? [MethodModifier.STATIC] : []), getter ? getter.op :
|
|
252
|
+
(writer) => {
|
|
253
|
+
writer.print(`return ${containerName}`);
|
|
254
|
+
});
|
|
255
|
+
if (isMutable) {
|
|
256
|
+
const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
|
|
257
|
+
this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
|
|
258
|
+
(writer) => {
|
|
259
|
+
writer.print(`${containerName} = ${propName}`);
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType));
|
|
265
|
+
}
|
|
244
266
|
}
|
|
245
267
|
writeTypeDeclaration(decl) {
|
|
246
268
|
var _a;
|
|
@@ -378,7 +400,11 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
378
400
|
return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.STATIC];
|
|
379
401
|
}
|
|
380
402
|
enumFromOrdinal(value, enumEntry) {
|
|
381
|
-
|
|
403
|
+
const enumName = idl.forceAsNamedNode(enumEntry).name;
|
|
404
|
+
const ordinal = value.asString();
|
|
405
|
+
return isStringEnumType(enumEntry, this.resolver)
|
|
406
|
+
? this.makeString(`Object.values(${enumName})[${ordinal}]`)
|
|
407
|
+
: this.makeString(`${ordinal}`);
|
|
382
408
|
}
|
|
383
409
|
ordinalFromEnum(value, enumEntry) {
|
|
384
410
|
const enumName = idl.forceAsNamedNode(enumEntry).name;
|
|
@@ -9,7 +9,6 @@ export interface LibraryFileInterface {
|
|
|
9
9
|
export interface LibraryInterface extends ReferenceResolver {
|
|
10
10
|
language: Language;
|
|
11
11
|
get files(): LibraryFileInterface[];
|
|
12
|
-
get libraryPackages(): string[] | undefined;
|
|
13
12
|
typeConvertor(param: string, type: idl.IDLType, isOptionalParam?: boolean): ArgConvertor;
|
|
14
13
|
declarationConvertor(param: string, type: idl.IDLReferenceType, declaration: idl.IDLEntry | undefined): ArgConvertor;
|
|
15
14
|
getInteropName(node: idl.IDLNode): string;
|