diff --git a/src/embind/embind_gen.js b/src/embind/embind_gen.js index cf8b8d594fac6..130e128e600e0 100644 --- a/src/embind/embind_gen.js +++ b/src/embind/embind_gen.js @@ -172,6 +172,8 @@ var LibraryEmbind = { out.push(`export interface ${this.name}`); if (this.base) { out.push(` extends ${this.base.name}`); + } else { + out.push(' extends ClassHandle'); } out.push(' {\n'); for (const property of this.properties) { @@ -186,7 +188,6 @@ var LibraryEmbind = { method.printFunction(nameMap, out); out.push(';\n'); } - out.push(' delete(): void;\n'); out.push('}\n\n'); } @@ -402,6 +403,24 @@ var LibraryEmbind = { print() { const out = []; + let hadClass = false; + for (const def of this.definitions) { + if (def instanceof ClassDefinition) { + hadClass = true; + break; + } + } + if (hadClass) { + out.push( + 'export interface ClassHandle {\n', + ' isAliasOf(other: ClassHandle): boolean;\n', + ' delete(): void;\n', + ' deleteLater(): this;\n', + ' isDeleted(): boolean;\n', + ' clone(): this;\n', + '}\n', + ); + } for (const def of this.definitions) { if (!def.print) { continue; diff --git a/test/other/embind_tsgen.d.ts b/test/other/embind_tsgen.d.ts index 1ec9a753088b9..367232ae5f178 100644 --- a/test/other/embind_tsgen.d.ts +++ b/test/other/embind_tsgen.d.ts @@ -17,7 +17,14 @@ interface WasmModule { } type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string; -export interface Test { +export interface ClassHandle { + isAliasOf(other: ClassHandle): boolean; + delete(): void; + deleteLater(): this; + isDeleted(): boolean; + clone(): this; +} +export interface Test extends ClassHandle { x: number; readonly y: number; get stringProperty(): string; @@ -30,11 +37,9 @@ export interface Test { longFn(_0: number): number; functionThree(_0: EmbindString): number; functionSix(str: EmbindString): number; - delete(): void; } -export interface Obj { - delete(): void; +export interface Obj extends ClassHandle { } export interface BarValue { @@ -49,40 +54,34 @@ export type EmptyEnum = never/* Empty Enumerator */; export type ValArrIx = [ Bar, Bar, Bar, Bar ]; -export interface IntVec { +export interface IntVec extends ClassHandle { push_back(_0: number): void; resize(_0: number, _1: number): void; size(): number; get(_0: number): number | undefined; set(_0: number, _1: number): boolean; - delete(): void; } -export interface MapIntInt { +export interface MapIntInt extends ClassHandle { keys(): IntVec; get(_0: number): number | undefined; set(_0: number, _1: number): void; size(): number; - delete(): void; } -export interface Foo { +export interface Foo extends ClassHandle { process(_0: Test): void; - delete(): void; } -export interface ClassWithConstructor { +export interface ClassWithConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } -export interface ClassWithTwoConstructors { - delete(): void; +export interface ClassWithTwoConstructors extends ClassHandle { } -export interface ClassWithSmartPtrConstructor { +export interface ClassWithSmartPtrConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } export type ValObj = { @@ -91,24 +90,20 @@ export type ValObj = { callback: (message: string) => void }; -export interface BaseClass { +export interface BaseClass extends ClassHandle { fn(_0: number): number; - delete(): void; } export interface DerivedClass extends BaseClass { fn2(_0: number): number; - delete(): void; } -export interface Interface { +export interface Interface extends ClassHandle { invoke(_0: EmbindString): void; - delete(): void; } export interface InterfaceWrapper extends Interface { notifyOnDestruction(): void; - delete(): void; } export type ValArr = [ number, number, number ]; diff --git a/test/other/embind_tsgen_ignore_1.d.ts b/test/other/embind_tsgen_ignore_1.d.ts index 47618dc6dc203..d7a513215c143 100644 --- a/test/other/embind_tsgen_ignore_1.d.ts +++ b/test/other/embind_tsgen_ignore_1.d.ts @@ -26,7 +26,14 @@ interface WasmModule { } type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string; -export interface Test { +export interface ClassHandle { + isAliasOf(other: ClassHandle): boolean; + delete(): void; + deleteLater(): this; + isDeleted(): boolean; + clone(): this; +} +export interface Test extends ClassHandle { x: number; readonly y: number; get stringProperty(): string; @@ -39,11 +46,9 @@ export interface Test { longFn(_0: number): number; functionThree(_0: EmbindString): number; functionSix(str: EmbindString): number; - delete(): void; } -export interface Obj { - delete(): void; +export interface Obj extends ClassHandle { } export interface BarValue { @@ -58,40 +63,34 @@ export type EmptyEnum = never/* Empty Enumerator */; export type ValArrIx = [ Bar, Bar, Bar, Bar ]; -export interface IntVec { +export interface IntVec extends ClassHandle { push_back(_0: number): void; resize(_0: number, _1: number): void; size(): number; get(_0: number): number | undefined; set(_0: number, _1: number): boolean; - delete(): void; } -export interface MapIntInt { +export interface MapIntInt extends ClassHandle { keys(): IntVec; get(_0: number): number | undefined; set(_0: number, _1: number): void; size(): number; - delete(): void; } -export interface Foo { +export interface Foo extends ClassHandle { process(_0: Test): void; - delete(): void; } -export interface ClassWithConstructor { +export interface ClassWithConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } -export interface ClassWithTwoConstructors { - delete(): void; +export interface ClassWithTwoConstructors extends ClassHandle { } -export interface ClassWithSmartPtrConstructor { +export interface ClassWithSmartPtrConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } export type ValObj = { @@ -100,24 +99,20 @@ export type ValObj = { callback: (message: string) => void }; -export interface BaseClass { +export interface BaseClass extends ClassHandle { fn(_0: number): number; - delete(): void; } export interface DerivedClass extends BaseClass { fn2(_0: number): number; - delete(): void; } -export interface Interface { +export interface Interface extends ClassHandle { invoke(_0: EmbindString): void; - delete(): void; } export interface InterfaceWrapper extends Interface { notifyOnDestruction(): void; - delete(): void; } export type ValArr = [ number, number, number ]; diff --git a/test/other/embind_tsgen_ignore_2.d.ts b/test/other/embind_tsgen_ignore_2.d.ts index 3d4cce80a2a24..7e2923be3c762 100644 --- a/test/other/embind_tsgen_ignore_2.d.ts +++ b/test/other/embind_tsgen_ignore_2.d.ts @@ -3,7 +3,14 @@ interface WasmModule { } type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string; -export interface Test { +export interface ClassHandle { + isAliasOf(other: ClassHandle): boolean; + delete(): void; + deleteLater(): this; + isDeleted(): boolean; + clone(): this; +} +export interface Test extends ClassHandle { x: number; readonly y: number; get stringProperty(): string; @@ -16,11 +23,9 @@ export interface Test { longFn(_0: number): number; functionThree(_0: EmbindString): number; functionSix(str: EmbindString): number; - delete(): void; } -export interface Obj { - delete(): void; +export interface Obj extends ClassHandle { } export interface BarValue { @@ -35,40 +40,34 @@ export type EmptyEnum = never/* Empty Enumerator */; export type ValArrIx = [ Bar, Bar, Bar, Bar ]; -export interface IntVec { +export interface IntVec extends ClassHandle { push_back(_0: number): void; resize(_0: number, _1: number): void; size(): number; get(_0: number): number | undefined; set(_0: number, _1: number): boolean; - delete(): void; } -export interface MapIntInt { +export interface MapIntInt extends ClassHandle { keys(): IntVec; get(_0: number): number | undefined; set(_0: number, _1: number): void; size(): number; - delete(): void; } -export interface Foo { +export interface Foo extends ClassHandle { process(_0: Test): void; - delete(): void; } -export interface ClassWithConstructor { +export interface ClassWithConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } -export interface ClassWithTwoConstructors { - delete(): void; +export interface ClassWithTwoConstructors extends ClassHandle { } -export interface ClassWithSmartPtrConstructor { +export interface ClassWithSmartPtrConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } export type ValObj = { @@ -77,24 +76,20 @@ export type ValObj = { callback: (message: string) => void }; -export interface BaseClass { +export interface BaseClass extends ClassHandle { fn(_0: number): number; - delete(): void; } export interface DerivedClass extends BaseClass { fn2(_0: number): number; - delete(): void; } -export interface Interface { +export interface Interface extends ClassHandle { invoke(_0: EmbindString): void; - delete(): void; } export interface InterfaceWrapper extends Interface { notifyOnDestruction(): void; - delete(): void; } export type ValArr = [ number, number, number ]; diff --git a/test/other/embind_tsgen_ignore_3.d.ts b/test/other/embind_tsgen_ignore_3.d.ts index 1ec9a753088b9..367232ae5f178 100644 --- a/test/other/embind_tsgen_ignore_3.d.ts +++ b/test/other/embind_tsgen_ignore_3.d.ts @@ -17,7 +17,14 @@ interface WasmModule { } type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string; -export interface Test { +export interface ClassHandle { + isAliasOf(other: ClassHandle): boolean; + delete(): void; + deleteLater(): this; + isDeleted(): boolean; + clone(): this; +} +export interface Test extends ClassHandle { x: number; readonly y: number; get stringProperty(): string; @@ -30,11 +37,9 @@ export interface Test { longFn(_0: number): number; functionThree(_0: EmbindString): number; functionSix(str: EmbindString): number; - delete(): void; } -export interface Obj { - delete(): void; +export interface Obj extends ClassHandle { } export interface BarValue { @@ -49,40 +54,34 @@ export type EmptyEnum = never/* Empty Enumerator */; export type ValArrIx = [ Bar, Bar, Bar, Bar ]; -export interface IntVec { +export interface IntVec extends ClassHandle { push_back(_0: number): void; resize(_0: number, _1: number): void; size(): number; get(_0: number): number | undefined; set(_0: number, _1: number): boolean; - delete(): void; } -export interface MapIntInt { +export interface MapIntInt extends ClassHandle { keys(): IntVec; get(_0: number): number | undefined; set(_0: number, _1: number): void; size(): number; - delete(): void; } -export interface Foo { +export interface Foo extends ClassHandle { process(_0: Test): void; - delete(): void; } -export interface ClassWithConstructor { +export interface ClassWithConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } -export interface ClassWithTwoConstructors { - delete(): void; +export interface ClassWithTwoConstructors extends ClassHandle { } -export interface ClassWithSmartPtrConstructor { +export interface ClassWithSmartPtrConstructor extends ClassHandle { fn(_0: number): number; - delete(): void; } export type ValObj = { @@ -91,24 +90,20 @@ export type ValObj = { callback: (message: string) => void }; -export interface BaseClass { +export interface BaseClass extends ClassHandle { fn(_0: number): number; - delete(): void; } export interface DerivedClass extends BaseClass { fn2(_0: number): number; - delete(): void; } -export interface Interface { +export interface Interface extends ClassHandle { invoke(_0: EmbindString): void; - delete(): void; } export interface InterfaceWrapper extends Interface { notifyOnDestruction(): void; - delete(): void; } export type ValArr = [ number, number, number ];