Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added HPySlice_New #481

Merged
merged 4 commits into from
Jun 7, 2024
Merged
Show file tree
Hide file tree
Changes from 2 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
9 changes: 9 additions & 0 deletions hpy/tools/autogen/public_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -963,6 +963,15 @@ HPy HPyTuple_FromArray(HPyContext *ctx, const HPy items[], HPy_ssize_t n);
*
* :param ctx:
* The execution context.
*
* :param start:
* A pointer to a variable where to write the unpacked slice start. Must not
* be ``NULL``.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is just a copy-and-paste-error but those parameters are not pointers.
I would write something like: "A handle to an object to be used as slice start" or something (your English is better than mine 🙂). Also, we allow HPy_NULL !
(Same for the other params.)

* :param end:
* A pointer to a variable where to write the unpacked slice end. Must not
* :param step:
* A pointer to a variable where to write the unpacked slice step. Must not
* be ``NULL``.
*
fangerer marked this conversation as resolved.
Show resolved Hide resolved
* :returns:
* A handle to the new and empty Python slice object or ``HPy_NULL`` in case
Expand Down
29 changes: 29 additions & 0 deletions test/test_hpyslice.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,32 @@ def test_adjust_indices(self):
assert mod.f(10, 9, 0, -3) == (3, 9, 0, -3)
assert mod.f(10, -1, -10, -3) == (3, 9, 0, -3)
assert mod.f(10, 5, 5, -3) == (0, 5, 5, -3)

def test_new(self):
mod = self.make_module("""
HPyDef_METH(f, "f", HPyFunc_VARARGS)
static HPy f_impl(HPyContext *ctx, HPy self, const HPy *args, size_t nargs)
{
HPy start, stop, step;

if (nargs != 3) {
HPyErr_SetString(ctx, ctx->h_TypeError,
"expected exactly 3 arguments");
return HPy_NULL;
}

if (HPyArg_Parse(ctx, NULL, args, nargs, "OOO",
&start, &stop, &step) < 0) {
return HPy_NULL;
}
HPy length = HPySlice_New(ctx, start, stop, step);
return length;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor: this could just be return HPySlice_New(...)

}
@EXPORT(f)
@INIT
""")

assert mod.f(0, 10, 1) == slice(0, 10, 1)
assert mod.f(None, 10, 1) == slice(None, 10, 1)
assert mod.f(1, None, 1) == slice(1, None, 1)
assert mod.f(0, 10, None) == slice(0, 10, None)
Loading