summaryrefslogtreecommitdiffstats
path: root/python_modules
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-06-30 16:49:50 +0200
committerGerd Hoffmann <kraxel@redhat.com>2010-06-30 22:35:17 +0200
commit00e1caf45d1a5d40f428c3e43d2c79578c841e75 (patch)
tree40f290cde64de9a93e600522aed525749e78e13e /python_modules
parent62d0c076eb2eb0f9954c3870f31b4dd685e5f95c (diff)
downloadspice-00e1caf45d1a5d40f428c3e43d2c79578c841e75.tar.gz
spice-00e1caf45d1a5d40f428c3e43d2c79578c841e75.tar.xz
spice-00e1caf45d1a5d40f428c3e43d2c79578c841e75.zip
Simplify SpiceLineAttr by removing unsed stuff
Also in new protocol don't send style data if not needed.
Diffstat (limited to 'python_modules')
-rw-r--r--python_modules/demarshal.py11
-rw-r--r--python_modules/ptypes.py15
2 files changed, 21 insertions, 5 deletions
diff --git a/python_modules/demarshal.py b/python_modules/demarshal.py
index 48b4e73e..b8195134 100644
--- a/python_modules/demarshal.py
+++ b/python_modules/demarshal.py
@@ -62,7 +62,8 @@ def write_read_primitive(writer, start, container, name, scope):
writer.error_check("pos + %s > message_end" % m.member_type.get_fixed_nw_size())
var = "%s__value" % (name)
- scope.variable_def(m.member_type.c_type(), var)
+ 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()))
return var
@@ -639,7 +640,9 @@ def write_switch_parser(writer, container, switch, dest, scope):
elif t.is_pointer():
write_parse_pointer(writer, t, False, m.has_attr("c_ptr"), dest2, m.name, block)
elif t.is_primitive():
- if not m.has_attr("zero"):
+ if m.has_attr("zero"):
+ writer.statement("consume_%s(&in)" % (t.primitive_type()))
+ else:
writer.assign(dest2.get_ref(m.name), "consume_%s(&in)" % (t.primitive_type()))
#TODO validate e.g. flags and enums
elif t.is_array():
@@ -768,8 +771,8 @@ def write_member_parser(writer, container, member, dest, scope):
write_parse_pointer(writer, t, member.has_end_attr(), member.has_attr("c_ptr"), dest, member.name, scope)
elif t.is_primitive():
if member.has_attr("zero"):
- pass
- if member.has_end_attr():
+ writer.statement("consume_%s(&in)" % t.primitive_type())
+ elif member.has_end_attr():
writer.statement("*(%s *)end = consume_%s(&in)" % (t.c_type(), t.primitive_type()))
writer.increment("end", t.sizeof())
else:
diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
index bef54321..b7bcac94 100644
--- a/python_modules/ptypes.py
+++ b/python_modules/ptypes.py
@@ -610,6 +610,12 @@ class Switch(Containee):
def is_switch(self):
return True
+ def lookup_case_member(self, name):
+ for c in self.cases:
+ if c.member.name == name:
+ return c.member
+ return None
+
def has_switch_member(self, member):
for c in self.cases:
if c.member == member:
@@ -767,7 +773,14 @@ class ContainerType(Type):
return str(fixed)
def lookup_member(self, name):
- return self.members_by_name[name]
+ 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
class StructType(ContainerType):
def __init__(self, name, members, attribute_list):