@idlizer/core 2.1.0 → 2.1.5
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 +15 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.js +93 -33
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +34 -14
- package/build/lib/src/LanguageWriters/LanguageWriter.js +29 -52
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +2 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -5
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +25 -15
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +7 -18
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +13 -3
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +49 -29
- package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
- package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +21 -10
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +56 -65
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +16 -10
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +18 -27
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -9
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +18 -21
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +11 -7
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +42 -18
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +14 -6
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +49 -44
- package/build/lib/src/LibraryInterface.d.ts +1 -5
- package/build/lib/src/config.d.ts +1029 -66
- package/build/lib/src/config.js +15 -2
- package/build/lib/src/configDescriber.d.ts +30 -3
- package/build/lib/src/configDescriber.js +99 -1
- package/build/lib/src/from-idl/DtsPrinter.js +32 -20
- package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
- package/build/lib/src/from-idl/IDLLinter.js +211 -25
- package/build/lib/src/from-idl/common.js +1 -1
- package/build/lib/src/from-idl/deserialize.d.ts +4 -1
- package/build/lib/src/from-idl/deserialize.js +434 -346
- package/build/lib/src/idl.d.ts +28 -18
- package/build/lib/src/idl.js +376 -111
- package/build/lib/src/idlize.d.ts +3 -1
- package/build/lib/src/idlize.js +85 -28
- package/build/lib/src/index.d.ts +6 -3
- package/build/lib/src/index.js +5 -2
- package/build/lib/src/options.d.ts +1 -1
- package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
- package/build/lib/src/peer-generation/BuilderClass.js +0 -8
- package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
- package/build/lib/src/peer-generation/LayoutManager.js +3 -2
- package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
- package/build/lib/src/peer-generation/Materialized.js +2 -2
- package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
- package/build/lib/src/peer-generation/PeerClass.js +0 -1
- package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
- package/build/lib/src/peer-generation/PeerFile.js +1 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -9
- package/build/lib/src/peer-generation/PeerLibrary.js +136 -71
- package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
- package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
- package/build/lib/src/peer-generation/idl/common.d.ts +2 -1
- package/build/lib/src/peer-generation/idl/common.js +13 -2
- 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/isMaterialized.js +25 -8
- 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/peer-generation/unions.d.ts +3 -2
- package/build/lib/src/peer-generation/unions.js +6 -2
- package/build/lib/src/resolveNamedNode.d.ts +3 -0
- package/build/lib/src/resolveNamedNode.js +105 -0
- package/build/lib/src/util.d.ts +7 -0
- package/build/lib/src/util.js +39 -0
- package/build/lib/src/visitor.d.ts +0 -1
- package/build/lib/src/visitor.js +1 -7
- package/package.json +2 -2
- package/webidl2.js/dist/webidl2.js +35 -7
- package/build/lib/src/configMerge.d.ts +0 -2
- package/build/lib/src/configMerge.js +0 -42
|
@@ -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, type: idl.IDLType);
|
|
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;
|
|
@@ -280,8 +293,7 @@ export declare class UnionConvertor extends BaseArgConvertor {
|
|
|
280
293
|
}
|
|
281
294
|
export declare class FunctionConvertor extends BaseArgConvertor {
|
|
282
295
|
private library;
|
|
283
|
-
|
|
284
|
-
constructor(library: LibraryInterface, param: string, type: idl.IDLReferenceType);
|
|
296
|
+
constructor(library: LibraryInterface, param: string);
|
|
285
297
|
convertorArg(param: string, writer: LanguageWriter): string;
|
|
286
298
|
convertorSerialize(param: string, value: string, writer: LanguageWriter): void;
|
|
287
299
|
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
|
|
@@ -321,6 +333,7 @@ export declare class CallbackConvertor extends BaseArgConvertor {
|
|
|
321
333
|
convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter, useSyncVersion?: boolean): LanguageStatement;
|
|
322
334
|
nativeType(): idl.IDLType;
|
|
323
335
|
isPointerType(): boolean;
|
|
336
|
+
unionDiscriminator(value: string, index: number, writer: LanguageWriter, duplicates: Set<string>): LanguageExpression | undefined;
|
|
324
337
|
}
|
|
325
338
|
export declare const CallbackKind = "CallbackKind";
|
|
326
339
|
export declare function generateCallbackKindName(callback: idl.IDLCallback): string;
|
|
@@ -16,37 +16,46 @@ import * as idl from "../idl";
|
|
|
16
16
|
import { Language } from "../Language";
|
|
17
17
|
import { BlockStatement, PrintHint, StringExpression, MethodModifier } from "./LanguageWriter";
|
|
18
18
|
import { RuntimeType } from "./common";
|
|
19
|
-
import { generatorTypePrefix } from "../config";
|
|
19
|
+
import { generatorConfiguration, generatorTypePrefix } from "../config";
|
|
20
20
|
import { hashCodeFromString, warn } from "../util";
|
|
21
21
|
import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
|
|
22
22
|
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?
|
|
30
|
+
if (debug)
|
|
31
|
+
console.log(`IDL type ${idl.DebugUtils.debugPrintType(originalType)}`);
|
|
29
32
|
if (originalType == idl.IDLInteropReturnBufferType)
|
|
30
33
|
return false;
|
|
31
34
|
if (originalType == idl.IDLThisType)
|
|
35
|
+
return true; /* Because this type for native is pointer, right? */
|
|
36
|
+
if (originalType == idl.IDLSerializerBuffer)
|
|
32
37
|
return true;
|
|
33
38
|
let convertor = library.typeConvertor("x", originalType, false);
|
|
34
39
|
// Resolve aliases.
|
|
35
40
|
while (convertor instanceof TypeAliasConvertor) {
|
|
36
41
|
convertor = convertor.convertor;
|
|
37
42
|
}
|
|
38
|
-
// Temporary!
|
|
39
43
|
if (convertor instanceof ArrayConvertor ||
|
|
40
|
-
convertor instanceof MapConvertor ||
|
|
41
44
|
convertor instanceof CustomTypeConvertor ||
|
|
45
|
+
convertor instanceof UnionConvertor ||
|
|
42
46
|
convertor instanceof CallbackConvertor ||
|
|
47
|
+
convertor instanceof MapConvertor ||
|
|
48
|
+
convertor instanceof TupleConvertor ||
|
|
43
49
|
convertor instanceof AggregateConvertor ||
|
|
44
|
-
convertor instanceof UnionConvertor
|
|
50
|
+
convertor instanceof UnionConvertor ||
|
|
51
|
+
convertor instanceof OptionConvertor ||
|
|
52
|
+
convertor instanceof ImportTypeConvertor) {
|
|
45
53
|
// try { console.log(`convertor is ${convertor.constructor.name} for ${JSON.stringify(originalType)}`) } catch (e) {}
|
|
46
54
|
return false;
|
|
47
55
|
}
|
|
48
56
|
let type = convertor.interopType();
|
|
49
|
-
|
|
57
|
+
if (debug)
|
|
58
|
+
console.log(`converted type ${idl.DebugUtils.debugPrintType(originalType)}`);
|
|
50
59
|
let result = type == idl.IDLI8Type || type == idl.IDLU8Type
|
|
51
60
|
|| type == idl.IDLI16Type || type == idl.IDLU16Type
|
|
52
61
|
|| type == idl.IDLI32Type || type == idl.IDLU32Type
|
|
@@ -55,22 +64,27 @@ function isDirectConvertedType(originalType, library) {
|
|
|
55
64
|
|| type == idl.IDLPointerType
|
|
56
65
|
|| type == idl.IDLBooleanType
|
|
57
66
|
|| type == idl.IDLVoidType
|
|
58
|
-
|| type == idl.IDLUndefinedType
|
|
59
|
-
|
|
67
|
+
|| type == idl.IDLUndefinedType
|
|
68
|
+
|| type == idl.IDLSerializerBuffer
|
|
69
|
+
|| type == idl.IDLNumberType;
|
|
70
|
+
if (!result && debug)
|
|
71
|
+
console.log(`type ${idl.DebugUtils.debugPrintType(type)} is not direct`);
|
|
60
72
|
return result;
|
|
61
73
|
}
|
|
62
74
|
export function isVMContextMethod(method) {
|
|
63
75
|
var _a, _b;
|
|
64
76
|
return !!idl.asPromise(method.signature.returnType) ||
|
|
65
77
|
!!((_a = method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.THROWS)) ||
|
|
66
|
-
!!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT))
|
|
78
|
+
!!((_b = method.modifiers) === null || _b === void 0 ? void 0 : _b.includes(MethodModifier.FORCE_CONTEXT)) ||
|
|
79
|
+
generatorConfiguration().forceContext.includes(method.name);
|
|
67
80
|
}
|
|
68
81
|
export function isDirectMethod(method, library) {
|
|
69
|
-
if (isVMContextMethod(method))
|
|
82
|
+
if (isVMContextMethod(method)) {
|
|
70
83
|
return false;
|
|
84
|
+
}
|
|
71
85
|
let result = isDirectConvertedType(method.signature.returnType, library) &&
|
|
72
86
|
method.signature.args.every((arg) => isDirectConvertedType(arg, library));
|
|
73
|
-
//if (!result) console.log(`method ${method.name} is not direct`)
|
|
87
|
+
// if (!result) console.log(`method ${method.name} is not direct`)
|
|
74
88
|
return result;
|
|
75
89
|
}
|
|
76
90
|
export class BaseArgConvertor {
|
|
@@ -81,6 +95,7 @@ export class BaseArgConvertor {
|
|
|
81
95
|
this.useArray = useArray;
|
|
82
96
|
this.param = param;
|
|
83
97
|
}
|
|
98
|
+
holdResource(_resourceName, _holder, _writer) { }
|
|
84
99
|
nativeType() {
|
|
85
100
|
throw new Error("Define");
|
|
86
101
|
}
|
|
@@ -208,20 +223,18 @@ export class EnumConvertor extends BaseArgConvertor {
|
|
|
208
223
|
this.enumEntry = enumEntry;
|
|
209
224
|
}
|
|
210
225
|
convertorArg(param, writer) {
|
|
211
|
-
return writer.
|
|
226
|
+
return writer.i32FromEnum(writer.makeString(writer.escapeKeyword(param)), this.enumEntry).asString();
|
|
212
227
|
}
|
|
213
228
|
convertorSerialize(param, value, writer) {
|
|
214
|
-
writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.
|
|
229
|
+
writer.writeMethodCall(`${param}Serializer`, "writeInt32", [writer.i32FromEnum(writer.makeString(value), this.enumEntry).asString()]);
|
|
215
230
|
}
|
|
216
231
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
217
232
|
const readExpr = writer.makeMethodCall(`${deserializerName}`, "readInt32", []);
|
|
218
|
-
const enumExpr =
|
|
219
|
-
? writer.enumFromOrdinal(readExpr, idl.createReferenceType(this.enumEntry))
|
|
220
|
-
: writer.makeCast(readExpr, idl.createReferenceType(this.enumEntry));
|
|
233
|
+
const enumExpr = writer.enumFromI32(readExpr, this.enumEntry);
|
|
221
234
|
return assigneer(enumExpr);
|
|
222
235
|
}
|
|
223
236
|
nativeType() {
|
|
224
|
-
return
|
|
237
|
+
return this.idlType;
|
|
225
238
|
}
|
|
226
239
|
interopType() {
|
|
227
240
|
return idl.IDLI32Type;
|
|
@@ -296,21 +309,64 @@ export class BigIntToU64Convertor extends BaseArgConvertor {
|
|
|
296
309
|
return writer.escapeKeyword(param);
|
|
297
310
|
}
|
|
298
311
|
convertorSerialize(param, value, printer) {
|
|
299
|
-
printer.writeMethodCall(`${param}Serializer`, "
|
|
312
|
+
printer.writeMethodCall(`${param}Serializer`, "writeInt64", [value]);
|
|
300
313
|
}
|
|
301
314
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
302
|
-
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.
|
|
315
|
+
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readInt64()`), this.idlType, { optional: false }));
|
|
303
316
|
}
|
|
304
317
|
nativeType() {
|
|
305
|
-
return idl.
|
|
318
|
+
return idl.IDLI64Type;
|
|
306
319
|
}
|
|
307
320
|
interopType() {
|
|
308
|
-
return idl.
|
|
321
|
+
return idl.IDLI64Type;
|
|
309
322
|
}
|
|
310
323
|
isPointerType() {
|
|
311
324
|
return false;
|
|
312
325
|
}
|
|
313
326
|
}
|
|
327
|
+
export class ObjectConvertor extends BaseArgConvertor {
|
|
328
|
+
constructor(param, type) {
|
|
329
|
+
super(type, [
|
|
330
|
+
RuntimeType.BIGINT,
|
|
331
|
+
RuntimeType.BOOLEAN,
|
|
332
|
+
RuntimeType.FUNCTION,
|
|
333
|
+
RuntimeType.MATERIALIZED,
|
|
334
|
+
RuntimeType.NUMBER,
|
|
335
|
+
RuntimeType.OBJECT,
|
|
336
|
+
RuntimeType.STRING,
|
|
337
|
+
RuntimeType.SYMBOL,
|
|
338
|
+
], false, true, param);
|
|
339
|
+
}
|
|
340
|
+
convertorArg(param, writer) {
|
|
341
|
+
return writer.escapeKeyword(param);
|
|
342
|
+
}
|
|
343
|
+
convertorSerialize(param, value, printer) {
|
|
344
|
+
if (printer.language === Language.CPP) {
|
|
345
|
+
printer.writeMethodCall(`${param}Serializer`, "writeObject", [value]);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
printer.writeMethodCall(`${param}Serializer`, "holdAndWriteObject", [value]);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
352
|
+
return assigneer(writer.makeCast(writer.makeMethodCall(deserializerName, 'readObject', []), this.idlType, { optional: false }));
|
|
353
|
+
}
|
|
354
|
+
holdResource(name, holder, writer) {
|
|
355
|
+
writer.writeStatement(writer.makeAssign(name, idl.createReferenceType(`CallbackResource`), writer.makeString(`{${this.param}.resource.resourceId, holdManagedCallbackResource, releaseManagedCallbackResource}`), true));
|
|
356
|
+
writer.writeExpressionStatement(writer.makeMethodCall(holder, 'holdCallbackResource', [
|
|
357
|
+
writer.makeString('&' + name)
|
|
358
|
+
]));
|
|
359
|
+
}
|
|
360
|
+
nativeType() {
|
|
361
|
+
return idl.IDLAnyType;
|
|
362
|
+
}
|
|
363
|
+
interopType() {
|
|
364
|
+
return idl.IDLAnyType;
|
|
365
|
+
}
|
|
366
|
+
isPointerType() {
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
314
370
|
export class PointerConvertor extends BaseArgConvertor {
|
|
315
371
|
constructor(param) {
|
|
316
372
|
// check numericPrimitiveTypes.include(type)
|
|
@@ -409,7 +465,7 @@ export class AggregateConvertor extends BaseArgConvertor {
|
|
|
409
465
|
* todo: check UnionType name creation for union of unnamed nodes (isNamedNode() == false)
|
|
410
466
|
*/
|
|
411
467
|
const memberType = prop.isOptional
|
|
412
|
-
? idl.createUnionType([idl.IDLUndefinedType, prop.type]
|
|
468
|
+
? idl.createUnionType([idl.IDLUndefinedType, prop.type])
|
|
413
469
|
: prop.type;
|
|
414
470
|
return writer.makeAssign(`${bufferName}_${prop.name}`, memberType, expr, true, true);
|
|
415
471
|
}, writer));
|
|
@@ -504,7 +560,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
|
|
|
504
560
|
interopType() {
|
|
505
561
|
// Actually shouldn't be used!
|
|
506
562
|
// throw new Error("Must never be used")
|
|
507
|
-
return idl.
|
|
563
|
+
return idl.IDLSerializerBuffer;
|
|
508
564
|
}
|
|
509
565
|
isPointerType() {
|
|
510
566
|
return true;
|
|
@@ -547,7 +603,7 @@ export class ArrayConvertor extends BaseArgConvertor {
|
|
|
547
603
|
printer.writeStatement(printer.makeLoop(loopCounter, valueLength));
|
|
548
604
|
printer.pushIndent();
|
|
549
605
|
printer.writeStatement(printer.makeAssign(`${value}_element`, this.elementType, printer.makeArrayAccess(value, loopCounter), true));
|
|
550
|
-
this.elementConvertor.convertorSerialize(param,
|
|
606
|
+
this.elementConvertor.convertorSerialize(param, `${value}_element`, printer);
|
|
551
607
|
printer.popIndent();
|
|
552
608
|
printer.print(`}`);
|
|
553
609
|
}
|
|
@@ -766,7 +822,7 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
766
822
|
throw new Error("Must never be used");
|
|
767
823
|
}
|
|
768
824
|
convertorSerialize(param, value, printer) {
|
|
769
|
-
const valueType = `${value}_type
|
|
825
|
+
const valueType = `${value}_type`.replaceAll('.', '_');
|
|
770
826
|
const serializedType = (printer.language == Language.JAVA ? undefined : idl.IDLI32Type);
|
|
771
827
|
printer.writeStatement(printer.makeAssign(valueType, serializedType, printer.makeRuntimeType(RuntimeType.UNDEFINED), true, false));
|
|
772
828
|
if (printer.language != Language.CJ) {
|
|
@@ -778,8 +834,9 @@ export class OptionConvertor extends BaseArgConvertor {
|
|
|
778
834
|
if (printer.language == Language.CJ) {
|
|
779
835
|
printer.writeMethodCall(`${param}Serializer`, "writeInt8", ["RuntimeType.OBJECT.ordinal"]); // everything is object, except None<T>
|
|
780
836
|
}
|
|
781
|
-
|
|
782
|
-
|
|
837
|
+
const valueValue = `${value}_value`.replaceAll('.', '_');
|
|
838
|
+
printer.writeStatement(printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true));
|
|
839
|
+
this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer);
|
|
783
840
|
printer.popIndent();
|
|
784
841
|
printer.print(`}`);
|
|
785
842
|
if (printer.language == Language.CJ) {
|
|
@@ -904,11 +961,10 @@ export class UnionConvertor extends BaseArgConvertor {
|
|
|
904
961
|
}
|
|
905
962
|
}
|
|
906
963
|
export class FunctionConvertor extends BaseArgConvertor {
|
|
907
|
-
constructor(library, param
|
|
964
|
+
constructor(library, param) {
|
|
908
965
|
// TODO: pass functions as integers to native side.
|
|
909
966
|
super(idl.IDLFunctionType, [RuntimeType.FUNCTION], false, false, param);
|
|
910
967
|
this.library = library;
|
|
911
|
-
this.type = type;
|
|
912
968
|
}
|
|
913
969
|
convertorArg(param, writer) {
|
|
914
970
|
return writer.language == Language.CPP ? `makeArkFunctionFromId(${param})` : `registerCallback(${param})`;
|
|
@@ -917,7 +973,7 @@ export class FunctionConvertor extends BaseArgConvertor {
|
|
|
917
973
|
writer.writeMethodCall(`${param}Serializer`, "writeFunction", [value]);
|
|
918
974
|
}
|
|
919
975
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
920
|
-
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`),
|
|
976
|
+
return assigneer(writer.makeCast(writer.makeString(`${deserializerName}.readFunction()`), idl.IDLFunctionType, { optional: true }));
|
|
921
977
|
}
|
|
922
978
|
nativeType() {
|
|
923
979
|
return idl.IDLFunctionType;
|
|
@@ -937,7 +993,7 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
937
993
|
convertorArg(param, writer) {
|
|
938
994
|
switch (writer.language) {
|
|
939
995
|
case Language.CPP:
|
|
940
|
-
return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_")}>(${param})`;
|
|
996
|
+
return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
|
|
941
997
|
case Language.JAVA:
|
|
942
998
|
case Language.CJ:
|
|
943
999
|
return `MaterializedBase.toPeerPtr(${param})`;
|
|
@@ -946,12 +1002,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
|
|
|
946
1002
|
}
|
|
947
1003
|
}
|
|
948
1004
|
convertorSerialize(param, value, printer) {
|
|
949
|
-
printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_")}`, [
|
|
1005
|
+
printer.writeStatement(printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, `write${qualifiedName(this.declaration, "_", "namespace.name")}`, [
|
|
950
1006
|
printer.makeString(value)
|
|
951
1007
|
])));
|
|
952
1008
|
}
|
|
953
1009
|
convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
|
|
954
|
-
const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_")}`, []),
|
|
1010
|
+
const readStatement = writer.makeCast(writer.makeMethodCall(`${deserializerName}`, `read${qualifiedName(this.declaration, "_", "namespace.name")}`, []), this.declaration);
|
|
955
1011
|
return assigneer(readStatement);
|
|
956
1012
|
}
|
|
957
1013
|
nativeType() {
|
|
@@ -1054,6 +1110,10 @@ export class CallbackConvertor extends BaseArgConvertor {
|
|
|
1054
1110
|
isPointerType() {
|
|
1055
1111
|
return true;
|
|
1056
1112
|
}
|
|
1113
|
+
unionDiscriminator(value, index, writer, duplicates) {
|
|
1114
|
+
// We serialize callbacks as table offsets, so don't need to discriminate them. Runtime type check is enough
|
|
1115
|
+
return writer.makeUnionVariantCondition(this, value, `${value}_type`, RuntimeType[RuntimeType.FUNCTION]);
|
|
1116
|
+
}
|
|
1057
1117
|
}
|
|
1058
1118
|
////////////////////////////////////////////////////////////////////////////////
|
|
1059
1119
|
// UTILS
|
|
@@ -114,8 +114,11 @@ export declare class CheckOptionalStatement implements LanguageStatement {
|
|
|
114
114
|
}
|
|
115
115
|
export declare class TsEnumEntityStatement implements LanguageStatement {
|
|
116
116
|
private readonly enumEntity;
|
|
117
|
-
private readonly
|
|
118
|
-
constructor(enumEntity: idl.IDLEnum,
|
|
117
|
+
private readonly options;
|
|
118
|
+
constructor(enumEntity: idl.IDLEnum, options: {
|
|
119
|
+
isExport: boolean;
|
|
120
|
+
isDeclare: boolean;
|
|
121
|
+
});
|
|
119
122
|
write(writer: LanguageWriter): void;
|
|
120
123
|
private maybeQuoted;
|
|
121
124
|
}
|
|
@@ -134,6 +137,9 @@ export declare abstract class LambdaExpression implements LanguageExpression {
|
|
|
134
137
|
abstract asString(): string;
|
|
135
138
|
bodyAsString(): string;
|
|
136
139
|
}
|
|
140
|
+
export declare enum ArgumentModifier {
|
|
141
|
+
OPTIONAL = 0
|
|
142
|
+
}
|
|
137
143
|
export declare enum FieldModifier {
|
|
138
144
|
READONLY = 0,
|
|
139
145
|
PRIVATE = 1,
|
|
@@ -191,16 +197,18 @@ export declare class MethodSignature {
|
|
|
191
197
|
defaults: stringOrNone[] | undefined;
|
|
192
198
|
printHints?: MethodArgPrintHintOrNone[] | undefined;
|
|
193
199
|
argNames?: string[] | undefined;
|
|
194
|
-
|
|
200
|
+
argsModifiers: ArgumentModifier[][] | undefined;
|
|
201
|
+
constructor(returnType: idl.IDLType, args: idl.IDLType[], defaults?: stringOrNone[] | undefined, argsModifiers?: (ArgumentModifier[] | ArgumentModifier | undefined)[] | undefined, printHints?: MethodArgPrintHintOrNone[] | undefined, argNames?: string[] | undefined);
|
|
195
202
|
argName(index: number): string;
|
|
196
203
|
argDefault(index: number): string | undefined;
|
|
204
|
+
isArgOptional(index: number): boolean;
|
|
197
205
|
retHint(): PrintHint | undefined;
|
|
198
206
|
argHint(index: number): PrintHint | undefined;
|
|
199
207
|
toString(): string;
|
|
200
208
|
}
|
|
201
209
|
export declare class NamedMethodSignature extends MethodSignature {
|
|
202
210
|
argsNames: string[];
|
|
203
|
-
constructor(returnType: idl.IDLType, args?: idl.IDLType[], argsNames?: string[], defaults?: stringOrNone[] | undefined, printHints?: MethodArgPrintHintOrNone[]);
|
|
211
|
+
constructor(returnType: idl.IDLType, args?: idl.IDLType[], argsNames?: string[], defaults?: stringOrNone[] | undefined, argsModifiers?: (ArgumentModifier[] | ArgumentModifier | undefined)[] | undefined, printHints?: MethodArgPrintHintOrNone[]);
|
|
204
212
|
static make(returnType: idl.IDLType, args: {
|
|
205
213
|
name: string;
|
|
206
214
|
type: idl.IDLType;
|
|
@@ -228,7 +236,10 @@ export declare abstract class LanguageWriter {
|
|
|
228
236
|
alias?: string;
|
|
229
237
|
stringId: string | undefined;
|
|
230
238
|
numberId: number;
|
|
231
|
-
}[],
|
|
239
|
+
}[], options: {
|
|
240
|
+
isExport: boolean;
|
|
241
|
+
isDeclare?: boolean;
|
|
242
|
+
}, op?: (writer: this) => void): void;
|
|
232
243
|
abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
|
|
233
244
|
abstract writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
234
245
|
abstract writeFunctionDeclaration(name: string, signature: MethodSignature): void;
|
|
@@ -236,7 +247,13 @@ export declare abstract class LanguageWriter {
|
|
|
236
247
|
abstract writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
|
|
237
248
|
abstract writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
238
249
|
abstract writeMethodImplementation(method: Method, op: (writer: this) => void): void;
|
|
239
|
-
abstract writeProperty(propName: string, propType: idl.IDLType,
|
|
250
|
+
abstract writeProperty(propName: string, propType: idl.IDLType, modifiers: FieldModifier[], getter?: {
|
|
251
|
+
method: Method;
|
|
252
|
+
op?: () => void;
|
|
253
|
+
}, setter?: {
|
|
254
|
+
method: Method;
|
|
255
|
+
op: () => void;
|
|
256
|
+
}): void;
|
|
240
257
|
abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
|
|
241
258
|
abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
|
|
242
259
|
abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
|
|
@@ -246,7 +263,7 @@ export declare abstract class LanguageWriter {
|
|
|
246
263
|
abstract makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
|
|
247
264
|
abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
248
265
|
abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
249
|
-
abstract makeCast(value: LanguageExpression,
|
|
266
|
+
abstract makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
|
|
250
267
|
makeTypeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
|
|
251
268
|
abstract writePrintLog(message: string): void;
|
|
252
269
|
abstract makeUndefined(): LanguageExpression;
|
|
@@ -263,9 +280,8 @@ export declare abstract class LanguageWriter {
|
|
|
263
280
|
abstract makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
|
|
264
281
|
abstract get supportedModifiers(): MethodModifier[];
|
|
265
282
|
abstract get supportedFieldModifiers(): FieldModifier[];
|
|
266
|
-
abstract
|
|
267
|
-
abstract
|
|
268
|
-
abstract makeEnumCast(enumEntry: idl.IDLEnum, enumName: string): string;
|
|
283
|
+
abstract enumFromI32(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
|
|
284
|
+
abstract i32FromEnum(value: LanguageExpression, enumEntry: idl.IDLEnum): LanguageExpression;
|
|
269
285
|
abstract getNodeName(type: idl.IDLNode): string;
|
|
270
286
|
abstract fork(options?: {
|
|
271
287
|
resolver?: ReferenceResolver;
|
|
@@ -307,7 +323,6 @@ export declare abstract class LanguageWriter {
|
|
|
307
323
|
makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, _convertorIndex?: number, _runtimeTypeIndex?: number): LanguageExpression;
|
|
308
324
|
makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
|
|
309
325
|
makeUnionTypeDefaultInitializer(): LanguageExpression;
|
|
310
|
-
makeRuntimeTypeGetterCall(value: string): LanguageExpression;
|
|
311
326
|
makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
|
|
312
327
|
makeMapResize(mapTypeName: string, keyType: idl.IDLType, valueType: idl.IDLType, map: string, size: string, deserializer: string): LanguageStatement;
|
|
313
328
|
makeMapSize(map: string): LanguageExpression;
|
|
@@ -339,7 +354,10 @@ export declare abstract class LanguageWriter {
|
|
|
339
354
|
targetType: (writer: LanguageWriter) => string;
|
|
340
355
|
}, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
|
|
341
356
|
makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
|
|
342
|
-
makeEnumEntity(enumEntity: idl.IDLEnum,
|
|
357
|
+
makeEnumEntity(enumEntity: idl.IDLEnum, options: {
|
|
358
|
+
isExport: boolean;
|
|
359
|
+
isDeclare?: boolean;
|
|
360
|
+
}): LanguageStatement;
|
|
343
361
|
makeFieldModifiersList(modifiers: FieldModifier[] | undefined, customFieldFilter?: (field: FieldModifier) => boolean): string;
|
|
344
362
|
escapeKeyword(keyword: string): string;
|
|
345
363
|
makeCastCustomObject(customName: string, _isGenericType: boolean): LanguageExpression;
|
|
@@ -347,14 +365,13 @@ export declare abstract class LanguageWriter {
|
|
|
347
365
|
discriminatorFromExpressions(value: string, runtimeType: RuntimeType, exprs: LanguageExpression[]): LanguageExpression;
|
|
348
366
|
makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
|
|
349
367
|
makeNot(expr: LanguageExpression): LanguageExpression;
|
|
368
|
+
makeSerializedBufferGetter(serializer: string): LanguageExpression;
|
|
350
369
|
makeEquals(args: LanguageExpression[]): LanguageExpression;
|
|
351
370
|
castToInt(value: string, bitness: 8 | 32): string;
|
|
352
371
|
castToBoolean(value: string): string;
|
|
353
372
|
makeCallIsObject(value: string): LanguageExpression;
|
|
354
373
|
instanceOf(convertor: ArgConvertor, value: string, _duplicateMembers?: Set<string>): LanguageExpression;
|
|
355
374
|
typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
|
|
356
|
-
makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
|
|
357
|
-
makeLengthDeserializer(deserializer: string): LanguageStatement | undefined;
|
|
358
375
|
stringifyTypeOrEmpty(type: idl.IDLType | undefined): string;
|
|
359
376
|
/**
|
|
360
377
|
* Writes `namespace <namespace> {` and adds extra indent
|
|
@@ -365,6 +382,9 @@ export declare abstract class LanguageWriter {
|
|
|
365
382
|
* Writes closing brace of namespace block and removes one level of indent
|
|
366
383
|
*/
|
|
367
384
|
popNamespace(ident?: boolean): void;
|
|
385
|
+
static _isReferenceRelativeToNamespaces: boolean;
|
|
386
|
+
static get isReferenceRelativeToNamespaces(): boolean;
|
|
387
|
+
static relativeReferences<T>(isRelative: boolean, op: () => T): T;
|
|
368
388
|
}
|
|
369
389
|
export declare function mangleMethodName(method: Method, id?: number): string;
|
|
370
390
|
export declare function printMethodDeclaration(printer: IndentedPrinter, retType: string, methodName: string, apiParameters: string[], postfix?: string): void;
|
|
@@ -231,14 +231,13 @@ export class CheckOptionalStatement {
|
|
|
231
231
|
}
|
|
232
232
|
// maybe rename or move of fix
|
|
233
233
|
export class TsEnumEntityStatement {
|
|
234
|
-
constructor(enumEntity,
|
|
234
|
+
constructor(enumEntity, options) {
|
|
235
235
|
this.enumEntity = enumEntity;
|
|
236
|
-
this.
|
|
236
|
+
this.options = options;
|
|
237
237
|
}
|
|
238
238
|
write(writer) {
|
|
239
239
|
// writer.print(this.enumEntity.comment)
|
|
240
|
-
|
|
241
|
-
writer.print(`${this.isExport ? "export " : ""}enum ${this.enumEntity.name} {`);
|
|
240
|
+
writer.print(`${this.options.isExport ? "export " : ""}${this.options.isDeclare ? "declare " : ""}enum ${this.enumEntity.name} {`);
|
|
242
241
|
writer.pushIndent();
|
|
243
242
|
this.enumEntity.elements.forEach((member, index) => {
|
|
244
243
|
// writer.print(member.comment)
|
|
@@ -253,7 +252,6 @@ export class TsEnumEntityStatement {
|
|
|
253
252
|
});
|
|
254
253
|
writer.popIndent();
|
|
255
254
|
writer.print(`}`);
|
|
256
|
-
idl.getNamespacesPathFor(this.enumEntity).forEach(it => writer.popNamespace());
|
|
257
255
|
}
|
|
258
256
|
maybeQuoted(value) {
|
|
259
257
|
if (typeof value == "string")
|
|
@@ -294,6 +292,10 @@ export class LambdaExpression {
|
|
|
294
292
|
////////////////////////////////////////////////////////////////
|
|
295
293
|
// SIGNATURES //
|
|
296
294
|
////////////////////////////////////////////////////////////////
|
|
295
|
+
export var ArgumentModifier;
|
|
296
|
+
(function (ArgumentModifier) {
|
|
297
|
+
ArgumentModifier[ArgumentModifier["OPTIONAL"] = 0] = "OPTIONAL";
|
|
298
|
+
})(ArgumentModifier || (ArgumentModifier = {}));
|
|
297
299
|
export var FieldModifier;
|
|
298
300
|
(function (FieldModifier) {
|
|
299
301
|
FieldModifier[FieldModifier["READONLY"] = 0] = "READONLY";
|
|
@@ -354,12 +356,13 @@ PrintHint.AsConstPointer = new PrintHint('AsConstPointer');
|
|
|
354
356
|
PrintHint.AsValue = new PrintHint('AsValue');
|
|
355
357
|
PrintHint.AsConstReference = new PrintHint('AsConstReference');
|
|
356
358
|
export class MethodSignature {
|
|
357
|
-
constructor(returnType, args, defaults = undefined, printHints, argNames) {
|
|
359
|
+
constructor(returnType, args, defaults = undefined, argsModifiers = undefined, printHints, argNames) {
|
|
358
360
|
this.returnType = returnType;
|
|
359
361
|
this.args = args;
|
|
360
362
|
this.defaults = defaults;
|
|
361
363
|
this.printHints = printHints;
|
|
362
364
|
this.argNames = argNames;
|
|
365
|
+
this.argsModifiers = argsModifiers === null || argsModifiers === void 0 ? void 0 : argsModifiers.map(it => it === undefined ? [] : Array.isArray(it) ? it : [it]);
|
|
363
366
|
}
|
|
364
367
|
argName(index) {
|
|
365
368
|
var _a, _b;
|
|
@@ -369,6 +372,10 @@ export class MethodSignature {
|
|
|
369
372
|
var _a;
|
|
370
373
|
return (_a = this.defaults) === null || _a === void 0 ? void 0 : _a[index];
|
|
371
374
|
}
|
|
375
|
+
isArgOptional(index) {
|
|
376
|
+
var _a, _b, _c;
|
|
377
|
+
return (_c = (_b = (_a = this.argsModifiers) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.includes(ArgumentModifier.OPTIONAL)) !== null && _c !== void 0 ? _c : false;
|
|
378
|
+
}
|
|
372
379
|
retHint() {
|
|
373
380
|
var _a;
|
|
374
381
|
return (_a = this.printHints) === null || _a === void 0 ? void 0 : _a[0];
|
|
@@ -382,8 +389,8 @@ export class MethodSignature {
|
|
|
382
389
|
}
|
|
383
390
|
}
|
|
384
391
|
export class NamedMethodSignature extends MethodSignature {
|
|
385
|
-
constructor(returnType, args = [], argsNames = [], defaults = undefined, printHints) {
|
|
386
|
-
super(returnType, args, defaults, printHints);
|
|
392
|
+
constructor(returnType, args = [], argsNames = [], defaults = undefined, argsModifiers = undefined, printHints) {
|
|
393
|
+
super(returnType, args, defaults, argsModifiers, printHints);
|
|
387
394
|
this.argsNames = argsNames;
|
|
388
395
|
}
|
|
389
396
|
static make(returnType, args) {
|
|
@@ -538,9 +545,6 @@ export class LanguageWriter {
|
|
|
538
545
|
makeUnionTypeDefaultInitializer() {
|
|
539
546
|
return this.makeRuntimeType(RuntimeType.UNDEFINED);
|
|
540
547
|
}
|
|
541
|
-
makeRuntimeTypeGetterCall(value) {
|
|
542
|
-
return this.makeFunctionCall("runtimeType", [this.makeString(value)]);
|
|
543
|
-
}
|
|
544
548
|
makeArrayResize(array, arrayType, length, deserializer) {
|
|
545
549
|
return new ExpressionStatement(new StringExpression(""));
|
|
546
550
|
}
|
|
@@ -627,8 +631,8 @@ export class LanguageWriter {
|
|
|
627
631
|
makeIsTypeCall(value, decl) {
|
|
628
632
|
return this.makeString(`is${decl.name}(${value})`);
|
|
629
633
|
}
|
|
630
|
-
makeEnumEntity(enumEntity,
|
|
631
|
-
return new TsEnumEntityStatement(enumEntity, isExport);
|
|
634
|
+
makeEnumEntity(enumEntity, options) {
|
|
635
|
+
return new TsEnumEntityStatement(enumEntity, { isExport: options.isExport, isDeclare: !!options.isDeclare });
|
|
632
636
|
}
|
|
633
637
|
makeFieldModifiersList(modifiers, customFieldFilter) {
|
|
634
638
|
let allowedModifiers = this.supportedFieldModifiers;
|
|
@@ -663,6 +667,9 @@ export class LanguageWriter {
|
|
|
663
667
|
makeNot(expr) {
|
|
664
668
|
return this.makeString(`!(${expr.asString()})`);
|
|
665
669
|
}
|
|
670
|
+
makeSerializedBufferGetter(serializer) {
|
|
671
|
+
return this.makeMethodCall(serializer, `asBuffer`, []);
|
|
672
|
+
}
|
|
666
673
|
makeEquals(args) {
|
|
667
674
|
return this.makeNaryOp("===", args);
|
|
668
675
|
}
|
|
@@ -678,45 +685,6 @@ export class LanguageWriter {
|
|
|
678
685
|
typeInstanceOf(type, value, members) {
|
|
679
686
|
return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
|
|
680
687
|
}
|
|
681
|
-
makeLengthSerializer(serializer, value) {
|
|
682
|
-
const valueType = "valueType";
|
|
683
|
-
return this.makeBlock([
|
|
684
|
-
this.makeAssign(valueType, undefined, this.makeFunctionCall("runtimeType", [this.makeString(value)]), true),
|
|
685
|
-
this.makeStatement(this.makeMethodCall(serializer, "writeInt8", [this.makeString(valueType)])),
|
|
686
|
-
this.makeMultiBranchCondition([
|
|
687
|
-
{
|
|
688
|
-
expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER),
|
|
689
|
-
stmt: this.makeStatement(this.makeMethodCall(serializer, "writeFloat32", [this.makeString(`${value} as float32`)]))
|
|
690
|
-
},
|
|
691
|
-
{
|
|
692
|
-
expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING),
|
|
693
|
-
stmt: this.makeStatement(this.makeMethodCall(serializer, "writeString", [this.makeString(`${value} as string`)]))
|
|
694
|
-
},
|
|
695
|
-
{
|
|
696
|
-
expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT),
|
|
697
|
-
stmt: this.makeStatement(this.makeMethodCall(serializer, "writeInt32", [this.makeString(`(${value} as Resource).id as int32`)]))
|
|
698
|
-
},
|
|
699
|
-
]),
|
|
700
|
-
], false);
|
|
701
|
-
}
|
|
702
|
-
makeLengthDeserializer(deserializer) {
|
|
703
|
-
const valueType = "valueType";
|
|
704
|
-
return this.makeBlock([
|
|
705
|
-
this.makeAssign(valueType, undefined, this.makeMethodCall(deserializer, "readInt8", []), true),
|
|
706
|
-
this.makeMultiBranchCondition([{
|
|
707
|
-
expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.NUMBER),
|
|
708
|
-
stmt: this.makeReturn(this.makeString(`${deserializer}.readFloat32() as number`))
|
|
709
|
-
},
|
|
710
|
-
{
|
|
711
|
-
expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.STRING),
|
|
712
|
-
stmt: this.makeReturn(this.makeMethodCall(deserializer, "readString", []))
|
|
713
|
-
},
|
|
714
|
-
{
|
|
715
|
-
expr: this.makeRuntimeTypeCondition(valueType, true, RuntimeType.OBJECT),
|
|
716
|
-
stmt: this.makeReturn(this.makeString(`({id: ${deserializer}.readInt32(), bundleName: "", moduleName: ""}) as Resource`))
|
|
717
|
-
}], this.makeReturn(this.makeUndefined())),
|
|
718
|
-
], false);
|
|
719
|
-
}
|
|
720
688
|
stringifyTypeOrEmpty(type) {
|
|
721
689
|
if (type === undefined)
|
|
722
690
|
return "";
|
|
@@ -740,7 +708,16 @@ export class LanguageWriter {
|
|
|
740
708
|
this.popIndent();
|
|
741
709
|
this.print(`}`);
|
|
742
710
|
}
|
|
711
|
+
static get isReferenceRelativeToNamespaces() { return this._isReferenceRelativeToNamespaces; }
|
|
712
|
+
static relativeReferences(isRelative, op) {
|
|
713
|
+
const prevIsRelative = this.isReferenceRelativeToNamespaces;
|
|
714
|
+
this._isReferenceRelativeToNamespaces = isRelative;
|
|
715
|
+
const result = op();
|
|
716
|
+
this._isReferenceRelativeToNamespaces = prevIsRelative;
|
|
717
|
+
return result;
|
|
718
|
+
}
|
|
743
719
|
}
|
|
720
|
+
LanguageWriter._isReferenceRelativeToNamespaces = false;
|
|
744
721
|
export function mangleMethodName(method, id) {
|
|
745
722
|
return `${method.name}${id !== null && id !== void 0 ? id : ""}`;
|
|
746
723
|
}
|
|
@@ -17,7 +17,8 @@ export declare class CJTypeNameConvertor implements NodeConvertor<string>, IdlNa
|
|
|
17
17
|
convertCallback(type: idl.IDLCallback): string;
|
|
18
18
|
convertMethod(node: idl.IDLMethod): string;
|
|
19
19
|
convertConstant(node: idl.IDLConstant): string;
|
|
20
|
-
convertImport(type: idl.
|
|
20
|
+
convertImport(type: idl.IDLImport): string;
|
|
21
|
+
convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
|
|
21
22
|
convertTypeReference(type: idl.IDLReferenceType): string;
|
|
22
23
|
convertTypeParameter(type: idl.IDLTypeParameterType): string;
|
|
23
24
|
convertPrimitiveType(type: idl.IDLPrimitiveType): string;
|