Skip to content

Commit

Permalink
[embind] Fix custom registered types used with field bindings. (#21949)
Browse files Browse the repository at this point in the history
* fix friend declaration in val.h

The code as it was trying to declare a template instantiation as a friend, and then specialize it later, which caused a build break. This fix just declares the whole template as a friend.

* [embind] Add test for custom registered types used with field bindings.

---------

Co-authored-by: walkingeyerobot <mitch@thefoley.net>
  • Loading branch information
brendandahl and walkingeyerobot committed May 20, 2024
1 parent 2e3d7f1 commit 1336355
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 24 deletions.
3 changes: 2 additions & 1 deletion system/include/emscripten/val.h
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,8 @@ class val {
pthread_t thread;
EM_VAL handle;

friend struct internal::BindingType<val>;
template <typename T, typename>
friend struct ::emscripten::internal::BindingType;
};

struct val::iterator {
Expand Down
9 changes: 6 additions & 3 deletions test/other/embind_tsgen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,13 @@ struct ValArr {
int x, y, z;
};

EMSCRIPTEN_DECLARE_VAL_TYPE(CallbackType);

struct ValObj {
Foo foo;
Bar bar;
CallbackType callback;
ValObj() : callback(val::undefined()) {}
};

class ClassWithConstructor {
Expand All @@ -81,8 +85,6 @@ int smart_ptr_function(std::shared_ptr<ClassWithSmartPtrConstructor>) {
return 0;
}

EMSCRIPTEN_DECLARE_VAL_TYPE(CallbackType);

int function_with_callback_param(CallbackType ct) {
ct(val("hello"));
return 0;
Expand Down Expand Up @@ -165,7 +167,8 @@ EMSCRIPTEN_BINDINGS(Test) {

value_object<ValObj>("ValObj")
.field("foo", &ValObj::foo)
.field("bar", &ValObj::bar);
.field("bar", &ValObj::bar)
.field("callback", &ValObj::callback);

register_vector<int>("IntVec");

Expand Down
11 changes: 6 additions & 5 deletions test/other/embind_tsgen.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,6 @@ export interface Foo {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar
};

export interface ClassWithConstructor {
fn(_0: number): number;
delete(): void;
Expand All @@ -84,6 +79,12 @@ export interface ClassWithSmartPtrConstructor {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar,
callback: (message: string) => void
};

export interface BaseClass {
fn(_0: number): number;
delete(): void;
Expand Down
11 changes: 6 additions & 5 deletions test/other/embind_tsgen_ignore_1.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,6 @@ export interface Foo {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar
};

export interface ClassWithConstructor {
fn(_0: number): number;
delete(): void;
Expand All @@ -93,6 +88,12 @@ export interface ClassWithSmartPtrConstructor {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar,
callback: (message: string) => void
};

export interface BaseClass {
fn(_0: number): number;
delete(): void;
Expand Down
11 changes: 6 additions & 5 deletions test/other/embind_tsgen_ignore_2.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,6 @@ export interface Foo {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar
};

export interface ClassWithConstructor {
fn(_0: number): number;
delete(): void;
Expand All @@ -70,6 +65,12 @@ export interface ClassWithSmartPtrConstructor {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar,
callback: (message: string) => void
};

export interface BaseClass {
fn(_0: number): number;
delete(): void;
Expand Down
11 changes: 6 additions & 5 deletions test/other/embind_tsgen_ignore_3.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,6 @@ export interface Foo {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar
};

export interface ClassWithConstructor {
fn(_0: number): number;
delete(): void;
Expand All @@ -84,6 +79,12 @@ export interface ClassWithSmartPtrConstructor {
delete(): void;
}

export type ValObj = {
foo: Foo,
bar: Bar,
callback: (message: string) => void
};

export interface BaseClass {
fn(_0: number): number;
delete(): void;
Expand Down

0 comments on commit 1336355

Please sign in to comment.