|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] tools/libxl: Make gentypes.py compatible with older Python
On Thu, Oct 16, 2025 at 10:06:13PM -0400, Jason Andryuk wrote:
> removeprefix is only added in Python 3.9.
>
> Instead of the prefix removal, switch to passing in a "depth" parameter,
> and incrementing it for each level.
>
> There is a slight change in the generated _libxl_types.c. instances of
> KeyedUnion increment depth without outputing any code. The net result
> is some cases where jso_sub_1 is followed by jso_sub_3. As an example:
>
> _libxl_types.c
> _libxl_types.c
> @@ -5535,12 +5535,12 @@
> if (!jso_sub_1)
> goto out;
> if (!libxl__string_is_default(&p->u.pty.path)) {
> - json_object *jso_sub_2 = NULL;
> - rc = libxl__string_gen_jso(&jso_sub_2, p->u.pty.path);
> + json_object *jso_sub_3 = NULL;
> + rc = libxl__string_gen_jso(&jso_sub_3, p->u.pty.path);
> if (rc)
> goto out;
> - if (json_object_object_add(jso_sub_1, "path",
> jso_sub_2)) {
> - json_object_put(jso_sub_2);
> + if (json_object_object_add(jso_sub_1, "path",
> jso_sub_3)) {
> + json_object_put(jso_sub_3);
> goto out;
> }
> }
>
> Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx>
> ---
> Here's an alternative approach to workaround removeprefix.
Yeah, this version is less obscure about what's going on. Let's go for
it.
Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> tools/libs/light/gentypes.py | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/tools/libs/light/gentypes.py b/tools/libs/light/gentypes.py
> index 006bea170a..0e45c04f49 100644
> --- a/tools/libs/light/gentypes.py
> +++ b/tools/libs/light/gentypes.py
> @@ -377,15 +377,16 @@ def get_default_expr(f, nparent, fexpr):
> return "%s" % fexpr
>
> # For json-c gen_json functions
> -def libxl_C_type_gen_jso(ty, v, indent = " ", parent = None, scope_object
> = "jso"):
> +def libxl_C_type_gen_jso(ty, v, indent = " ", parent = None, scope_object
> = "jso", depth = 0):
> s = ""
> if parent is None:
> s += "json_object *jso;\n"
> s += "int rc;\n"
> - sub_scope_object = "jso_sub_1"
> + depth = 1
> else:
> - sub_scope_object = "jso_sub_%d" %
> (1+int(scope_object.removeprefix("jso_sub_")))
> + depth += 1
We could simply do `depth += 1` regardless of the value of parent, it
would have the same effect, since depth start at 0. We just need to
create a new variable name that is different from the one created by the
callers (`depth=random.randrange(9999, 99999999)` actually works :-D,
but no guaranty of having different values). Anyway, the code is fine as
is, no need to make last minute edit.
Cheers,
--
Anthony PERARD
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |