From 53ec331a4b49bf45814be6a5a3b57a95392aaa1d Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Thu, 1 Mar 2012 12:26:15 +0000 Subject: [PATCH] libxl: Make IDL KeyedUnion keyvar an idl.Field This is more logical than having keyvar_name and keyvar_type members. Signed-off-by: Ian Campbell Acked-by: Ian Jackson --- tools/libxl/gentest.py | 2 +- tools/libxl/gentypes.py | 4 ++-- tools/libxl/idl.py | 5 +++-- tools/libxl/idl.txt | 5 ++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/libxl/gentest.py b/tools/libxl/gentest.py index 5de7a070c7..04248ee8b1 100644 --- a/tools/libxl/gentest.py +++ b/tools/libxl/gentest.py @@ -31,7 +31,7 @@ def gen_rand_init(ty, v, indent = " ", parent = None): elif isinstance(ty, idl.KeyedUnion): if parent is None: raise Exception("KeyedUnion type must have a parent") - s += "switch (%s) {\n" % (parent + ty.keyvar_name) + s += "switch (%s) {\n" % (parent + ty.keyvar.name) for f in ty.fields: (nparent,fexpr) = ty.member(v, f, parent is None) s += "case %s:\n" % f.enumname diff --git a/tools/libxl/gentypes.py b/tools/libxl/gentypes.py index ae4a6b6a7a..4a2d0cecca 100644 --- a/tools/libxl/gentypes.py +++ b/tools/libxl/gentypes.py @@ -56,7 +56,7 @@ def libxl_C_type_dispose(ty, v, indent = " ", parent = None): if isinstance(ty, idl.KeyedUnion): if parent is None: raise Exception("KeyedUnion type must have a parent") - s += "switch (%s) {\n" % (parent + ty.keyvar_name) + s += "switch (%s) {\n" % (parent + ty.keyvar.name) for f in ty.fields: (nparent,fexpr) = ty.member(v, f, parent is None) s += "case %s:\n" % f.enumname @@ -86,7 +86,7 @@ def libxl_C_type_gen_json(ty, v, indent = " ", parent = None): elif isinstance(ty, idl.KeyedUnion): if parent is None: raise Exception("KeyedUnion type must have a parent") - s += "switch (%s) {\n" % (parent + ty.keyvar_name) + s += "switch (%s) {\n" % (parent + ty.keyvar.name) for f in ty.fields: (nparent,fexpr) = ty.member(v, f, parent is None) s += "case %s:\n" % f.enumname diff --git a/tools/libxl/idl.py b/tools/libxl/idl.py index 880b7ca71d..b31956d92e 100644 --- a/tools/libxl/idl.py +++ b/tools/libxl/idl.py @@ -206,8 +206,9 @@ class KeyedUnion(Aggregate): if not isinstance(keyvar_type, Enumeration): raise ValueError - self.keyvar_name = keyvar_name - self.keyvar_type = keyvar_type + kv_kwargs = dict([(x.lstrip('keyvar_'),y) for (x,y) in kwargs.items() if x.startswith('keyvar_')]) + + self.keyvar = Field(keyvar_type, keyvar_name, **kv_kwargs) for f in fields: # (name, enum, type) diff --git a/tools/libxl/idl.txt b/tools/libxl/idl.txt index ddcd0b0050..183e4fb4ca 100644 --- a/tools/libxl/idl.txt +++ b/tools/libxl/idl.txt @@ -128,10 +128,9 @@ idl.KeyedUnion where the currently valid member of the union can be determined based upon another member in the containing type. - The KeyedUnion.keyvar_name must contain the name of the member of the + The KeyedUnion.keyvar contains an idl.type the member of the containing type which determines the valid member of the union. The - member referenced by KeyedUnion.keyvar_name has type - KeyedUnion.keyvar_type which must be an instance of the Enumeration type. + must be an instance of the Enumeration type. Standard Types -------------- -- 2.30.2