[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tools/libxl: Make gentypes.py compatible with older Python


  • To: Anthony PERARD <anthony@xxxxxxxxxxxxxx>, Jason Andryuk <jason.andryuk@xxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Tue, 21 Oct 2025 17:31:30 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1SdSXyLrSvM8ncmCAP1pz+qYDIyNcDbgZ4liEgKk3Uk=; b=Z/HKoyvJuHIpV87PBIiY1hLhl4GWQaKe8Uf2Gv0fXjftrSO+foP32HMYLMGZUCgrTUzigzSRwfpwB+adq5I4iRn1T3fVhJqAEq4HvRpls8SzTRNNmpskq489ER+9Oef+815lJxhsNPjy+impH+iPtUQi5TQCpW8gPrQX5yQKi7xo8skVuzsbOA0G0wEKT2H8lEd1zGa9fPgwLIX826yq9FYaKjVl7X25iIcPwaTcN3Oh77IF1UwQxKkCkJGOeBsur82b/kC+BBWMjJZcc6CUaiOfcGqqSrpflXSQy6sfRVGmhwvDoBYShfbqlqF7Py0hCs2jB60E/t/80UZ2uDCHZw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r9URm5qOg1lm+yYnnrcsD+Wxet1k6PomYClq7N31H5yuUrYCYkRuIGkG+hP04VNtuUarjQ4KymVUP8x84mN/62yxvj7065Mr/gFmNad4Z5G1D8qsIxhnYqaZoYyGSe31dl9IBD5KWncv6QUUHVGEKiCU6ORwIEpbDI6CsaadLYqH5Vlo8y2enNRKXZT0JwSL0Q1h8P3g7dPspAzgd8C/ZjJSu8BW+Vd3LGfcCQvc37H9crlffK+8ch30gPIeJ916DZQl/VGAMWVmXT+b5g3HxEJdSdldIkEzJeYHkebozxWPSnuGIUlMjYX74RiGuPgdF0CYYLMlePlpJx9ZhsMNhA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: jbeulich@xxxxxxxx, anthony.perard@xxxxxxxxxx, jgross@xxxxxxxx, oleksii.kurochko@xxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Tue, 21 Oct 2025 16:31:53 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 21/10/2025 5:23 pm, Anthony PERARD wrote:
> 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>

Thanks.  I'll take this version, and take the liberty of assuming that
the Release Ack is transferable to whichever solution the maintainers
prefer in the end.

>
>>  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.

That makes the code even more simple, because it takes out the else. 
The net hunk is:

@@ -377,15 +377,14 @@ 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"
-    else:
-        sub_scope_object = "jso_sub_%d" % 
(1+int(scope_object.removeprefix("jso_sub_")))
 
+    depth += 1
+    sub_scope_object = "jso_sub_%d" % depth
     if isinstance(ty, idl.Array):
         if parent is None:
             raise Exception("Array type must have a parent")


~Andrew



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.