Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/nb_func.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,8 @@ PyObject *nb_func_new(const func_data_prelim_base *f) noexcept {
bool has_scope = f->flags & (uint32_t) func_flags::has_scope,
has_name = f->flags & (uint32_t) func_flags::has_name,
has_args = f->flags & (uint32_t) func_flags::has_args,
has_var_args = f->flags & (uint32_t) func_flags::has_var_kwargs,
has_var_kwargs = f->flags & (uint32_t) func_flags::has_var_args,
has_var_args = f->flags & (uint32_t) func_flags::has_var_args,
has_var_kwargs = f->flags & (uint32_t) func_flags::has_var_kwargs,
can_mutate_args = f->flags & (uint32_t) func_flags::can_mutate_args,
has_doc = f->flags & (uint32_t) func_flags::has_doc,
has_signature = f->flags & (uint32_t) func_flags::has_signature,
Expand Down
7 changes: 7 additions & 0 deletions tests/test_classes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -680,13 +680,20 @@ NB_MODULE(test_classes_ext, m) {
// issue #786
struct NewNone {};
struct NewDflt { int value; };
struct NewStarPosOnly { size_t value; };
struct NewStar { size_t value; };
nb::class_<NewNone>(m, "NewNone")
.def(nb::new_([]() { return NewNone(); }));
nb::class_<NewDflt>(m, "NewDflt")
.def(nb::new_([](int value) { return NewDflt{value}; }),
"value"_a = 42)
.def_ro("value", &NewDflt::value);
nb::class_<NewStarPosOnly>(m, "NewStarPosOnly")
.def(nb::new_([](nb::args a, int value) {
return NewStarPosOnly{nb::len(a) + value};
}),
"args"_a, "value"_a = 42)
.def_ro("value", &NewStarPosOnly::value);
nb::class_<NewStar>(m, "NewStar")
.def(nb::new_([](nb::args a, int value, nb::kwargs k) {
return NewStar{nb::len(a) + value + 10 * nb::len(k)};
Expand Down
4 changes: 4 additions & 0 deletions tests/test_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -895,6 +895,10 @@ def test46_custom_new():
t.NewNone()
assert t.NewDflt().value == 42
assert t.NewDflt(10).value == 10
assert t.NewStarPosOnly().value == 42
assert t.NewStarPosOnly("hi").value == 43
assert t.NewStarPosOnly(value=10).value == 10
assert t.NewStarPosOnly("hi", "lo", value=10).value == 12
assert t.NewStar().value == 42
assert t.NewStar("hi").value == 43
assert t.NewStar(value=10).value == 10
Expand Down
6 changes: 6 additions & 0 deletions tests/test_classes_ext.pyi.ref
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,12 @@ class NewDflt:
@property
def value(self) -> int: ...

class NewStarPosOnly:
def __init__(self, *args, value: int = 42) -> None: ...

@property
def value(self) -> int: ...

class NewStar:
def __init__(self, *args, value: int = 42, **kwargs) -> None: ...

Expand Down