summaryrefslogtreecommitdiffstats
path: root/python_modules
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-07-01 17:55:33 +0200
committerAlexander Larsson <alexl@redhat.com>2010-07-07 23:58:33 +0200
commit5ac88aa79fa6445f96e5419d8bf4fce81da63b90 (patch)
treeae702a8569fda96e8bfe27c6b2655d90bcef7ce4 /python_modules
parent26c1a0767f3fdcd0211b6b4c91a63ac9bc7abc6f (diff)
downloadspice-5ac88aa79fa6445f96e5419d8bf4fce81da63b90.tar.gz
spice-5ac88aa79fa6445f96e5419d8bf4fce81da63b90.tar.xz
spice-5ac88aa79fa6445f96e5419d8bf4fce81da63b90.zip
Properly parse QXLImage to the new-world SpiceImage
SpiceImage now replaces RedImage and has all image types in it. All image data are now chunked (and as such not copied when demarshalling).
Diffstat (limited to 'python_modules')
-rw-r--r--python_modules/demarshal.py4
-rw-r--r--python_modules/ptypes.py31
-rw-r--r--python_modules/spice_parser.py2
3 files changed, 27 insertions, 10 deletions
diff --git a/python_modules/demarshal.py b/python_modules/demarshal.py
index 323fc70a..1ae1911b 100644
--- a/python_modules/demarshal.py
+++ b/python_modules/demarshal.py
@@ -93,7 +93,7 @@ def write_read_primitive(writer, start, container, name, scope):
writer.assign("pos", start + " + " + container.get_nw_offset(m, "", "__nw_size"))
writer.error_check("pos + %s > message_end" % m.member_type.get_fixed_nw_size())
- var = "%s__value" % (name)
+ var = "%s__value" % (name.replace(".", "_"))
if not scope.variable_defined(var):
scope.variable_def(m.member_type.c_type(), var)
writer.assign(var, "read_%s(pos)" % (m.member_type.primitive_type()))
@@ -112,7 +112,7 @@ def write_read_primitive_item(writer, item, scope):
assert(item.type.is_primitive())
writer.assign("pos", item.get_position())
writer.error_check("pos + %s > message_end" % item.type.get_fixed_nw_size())
- var = "%s__value" % (item.subprefix)
+ var = "%s__value" % (item.subprefix.replace(".", "_"))
scope.variable_def(item.type.c_type(), var)
writer.assign(var, "read_%s(pos)" % (item.type.primitive_type()))
return var
diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
index 68cf3dfe..715544fb 100644
--- a/python_modules/ptypes.py
+++ b/python_modules/ptypes.py
@@ -811,14 +811,31 @@ class ContainerType(Type):
return str(fixed)
def lookup_member(self, name):
+ dot = name.find('.')
+ rest = None
+ if dot >= 0:
+ rest = name[dot+1:]
+ name = name[:dot]
+
+ member = None
if self.members_by_name.has_key(name):
- return self.members_by_name[name]
- for m in self.members:
- if m.is_switch():
- member = m.lookup_case_member(name)
- if member:
- return member
- raise Exception, "No member called %s found" % name
+ member = self.members_by_name[name]
+ else:
+ for m in self.members:
+ if m.is_switch():
+ member = m.lookup_case_member(name)
+ if member != None:
+ break
+ if member != None:
+ break
+
+ if member == None:
+ raise Exception, "No member called %s found" % name
+
+ if rest != None:
+ return member.member_type.lookup_member(rest)
+
+ return member
class StructType(ContainerType):
def __init__(self, name, members, attribute_list):
diff --git a/python_modules/spice_parser.py b/python_modules/spice_parser.py
index 61ef458b..ac2da8dc 100644
--- a/python_modules/spice_parser.py
+++ b/python_modules/spice_parser.py
@@ -95,7 +95,7 @@ def SPICE_BNF():
switchCase = Group(Group(OneOrMore(default_.setParseAction(replaceWith(None)) + colon | case_.suppress() + identifier + colon)) + variableDef) \
.setParseAction(lambda toks: ptypes.SwitchCase(toks[0][0], toks[0][1]))
- switchBody = Group(switch_ + lparen + identifier + rparen + lbrace + Group(OneOrMore(switchCase)) + rbrace + identifier + attributes - semi) \
+ switchBody = Group(switch_ + lparen + delimitedList(identifier,delim='.', combine=True) + rparen + lbrace + Group(OneOrMore(switchCase)) + rbrace + identifier + attributes - semi) \
.setParseAction(lambda toks: ptypes.Switch(toks[0][1], toks[0][2], toks[0][3], toks[0][4]))
messageBody = structBody = Group(lbrace + ZeroOrMore(variableDef | switchBody) + rbrace)
structSpec = Group(struct_ + identifier + structBody + attributes).setParseAction(lambda toks: ptypes.StructType(toks[0][1], toks[0][2], toks[0][3]))