[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3 of 9] libxl: IDL: handle generation of pass-by-reference arguments
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1310646156 -3600 # Node ID 3b2827da23585a7fa93d1e6fc4db4d196706ebf8 # Parent 7e8ce32eda26230ce34476172d8a5f77596bb62b 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> diff -r 7e8ce32eda26 -r 3b2827da2358 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 @@ if __name__ == '__main__': 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 @@ if __name__ == '__main__': """ % " ".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 7e8ce32eda26 -r 3b2827da2358 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 7e8ce32eda26 -r 3b2827da2358 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 @@ class Type(object): 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-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |