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

[Xen-changelog] [xen-unstable] libxl: IDL: handle generation of pass-by-reference arguments.



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1310646156 -3600
# Node ID 4bb89ae75a3a2288b4996908fc11b71d36a169d3
# Parent  ea3ac13a4e61e45d7a5c619a3e247c39f7bee658
libxl: IDL: handle generation of pass-by-reference arguments.

Up until now everything with a destructor function happened to be
pass-by-reference so the current code worked but this will not be the case for
*_to_string and *_to_json. Put some infrastructure in place and use it.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
---


diff -r ea3ac13a4e61 -r 4bb89ae75a3a tools/libxl/gentypes.py
--- a/tools/libxl/gentypes.py   Thu Jul 14 13:22:36 2011 +0100
+++ b/tools/libxl/gentypes.py   Thu Jul 14 13:22:36 2011 +0100
@@ -178,10 +178,10 @@
     for ty in types:
         f.write(libxl_C_type_define(ty) + ";\n")
         if ty.destructor_fn is not None:
-            f.write("void %s(%s *p);\n" % (ty.destructor_fn, ty.typename))
+            f.write("void %s(%s);\n" % (ty.destructor_fn, ty.make_arg("p")))
         if isinstance(ty, libxltypes.Enumeration):
-            f.write("const char *%s_to_string(%s e);\n" % (ty.typename, 
ty.typename))
-            f.write("int %s_from_string(const char *s, %s *e);\n" % 
(ty.typename, ty.typename))
+            f.write("const char *%s_to_string(%s);\n" % (ty.typename, 
ty.make_arg("p")))
+            f.write("int %s_from_string(const char *s, %s);\n" % (ty.typename, 
ty.make_arg("e", passby=libxltypes.PASS_BY_REFERENCE)))
             f.write("extern libxl_enum_string_table %s_string_table[];\n" % 
(ty.typename))
         f.write("\n")
 
@@ -213,7 +213,7 @@
 """ % " ".join(sys.argv))
 
     for ty in [t for t in types if t.destructor_fn is not None and 
t.autogenerate_destructor]:
-        f.write("void %s(%s *p)\n" % (ty.destructor_fn, ty.typename))
+        f.write("void %s(%s)\n" % (ty.destructor_fn, ty.make_arg("p")))
         f.write("{\n")
         f.write(libxl_C_type_destroy(ty, "p"))
         f.write("    memset(p, LIBXL_DTOR_POISON, sizeof(*p));\n")
diff -r ea3ac13a4e61 -r 4bb89ae75a3a tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Thu Jul 14 13:22:36 2011 +0100
+++ b/tools/libxl/libxl.idl     Thu Jul 14 13:22:36 2011 +0100
@@ -4,8 +4,8 @@
 #
 
 libxl_domid = Builtin("domid")
-libxl_uuid = Builtin("uuid")
-libxl_mac = Builtin("mac")
+libxl_uuid = Builtin("uuid", passby=PASS_BY_REFERENCE)
+libxl_mac = Builtin("mac", passby=PASS_BY_REFERENCE)
 libxl_cpumap = Builtin("cpumap", destructor_fn="libxl_cpumap_destroy", 
passby=PASS_BY_REFERENCE)
 libxl_cpuarray = Builtin("cpuarray", destructor_fn="libxl_cpuarray_destroy", 
passby=PASS_BY_REFERENCE)
 libxl_cpuid_policy_list = Builtin("cpuid_policy_list", 
destructor_fn="libxl_cpuid_destroy", passby=PASS_BY_REFERENCE)
diff -r ea3ac13a4e61 -r 4bb89ae75a3a tools/libxl/libxltypes.py
--- a/tools/libxl/libxltypes.py Thu Jul 14 13:22:36 2011 +0100
+++ b/tools/libxl/libxltypes.py Thu Jul 14 13:22:36 2011 +0100
@@ -42,6 +42,14 @@
     def marshal_out(self):
         return self.dir in [DIR_OUT, DIR_BOTH]
 
+    def make_arg(self, n, passby=None):
+        if passby is None: passby = self.passby
+        
+        if passby == PASS_BY_REFERENCE:
+            return "%s *%s" % (self.typename, n)
+        else:
+            return "%s %s" % (self.typename, n)
+        
 class Builtin(Type):
     """Builtin type"""
     def __init__(self, typename, **kwargs):

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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