mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
ocaml/gen: fix ocaml type/code generator from IDL
This patch adds support for union members which have their own type name. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com> Acked-by: David Scott <dave@recoil.org>
This commit is contained in:
1 parent
bfd9a2095f
commit
7faae10654
1 file changed
+2
-2
@@ -155,7 +155,7 @@ def gen_ocaml_keyedunions(ty, interface, indent, parent = None):
|
||||
u.append("%s" % (f.name.capitalize()))
|
||||
elif isinstance(f.type, idl.Struct):
|
||||
if f.type.rawname is not None:
|
||||
u.append("%s of %s" % (f.name.capitalize(), f.type.rawname.capitalize()))
|
||||
u.append("%s of %s.t" % (f.name.capitalize(), f.type.rawname.capitalize()))
|
||||
elif f.type.has_fields():
|
||||
u.append("%s of %s_%s" % (f.name.capitalize(), nparent, f.name))
|
||||
else:
|
||||
@@ -325,7 +325,7 @@ def c_val(ty, c, o, indent="", parent = None):
|
||||
s += "\t\t case %d:\n" % (n)
|
||||
s += "\t\t %s = %s;\n" % (parent + ty.keyvar.name, f.enumname)
|
||||
(nparent,fexpr) = ty.member(c, f, False)
|
||||
s += "%s" % c_val(f.type, fexpr, "Field(%s, 0)" % o, indent=indent+"\t\t ")
|
||||
s += "%s" % c_val(f.type, fexpr, "Field(%s, 0)" % o, parent=nparent, indent=indent+"\t\t ")
|
||||
s += "break;\n"
|
||||
n += 1
|
||||
s += "\t\t default: failwith_xl(ERROR_FAIL, \"variant handling bug %s%s (block)\"); break;\n" % (parent, ty.keyvar.name)
|
||||
|
||||