diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-07-01 17:55:33 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-07-07 23:58:33 +0200 |
commit | 5ac88aa79fa6445f96e5419d8bf4fce81da63b90 (patch) | |
tree | ae702a8569fda96e8bfe27c6b2655d90bcef7ce4 /python_modules | |
parent | 26c1a0767f3fdcd0211b6b4c91a63ac9bc7abc6f (diff) | |
download | spice-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.py | 4 | ||||
-rw-r--r-- | python_modules/ptypes.py | 31 | ||||
-rw-r--r-- | python_modules/spice_parser.py | 2 |
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])) |