summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2011-06-22 13:23:47 +0200
committerMarc-André Lureau <marcandre.lureau@gmail.com>2012-03-20 15:31:30 +0100
commit7307fccb71ad55911800d2e183d4a8f879ffdb01 (patch)
tree809fed73cb33caab17ab7757b60180aaf7f2cfcf
parenteb01d2fc46430bcd6dd9f9017b0c7f0e9169285d (diff)
allow attributes on channel elements in .proto files
We want to be able to add an @ifdef annotation to optional messages For example, we want to compile in the smartcard messages only if libcacard is available
-rw-r--r--python_modules/ptypes.py4
-rw-r--r--python_modules/spice_parser.py2
2 files changed, 4 insertions, 2 deletions
diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
index 7b30311..132ba99 100644
--- a/python_modules/ptypes.py
+++ b/python_modules/ptypes.py
@@ -915,12 +915,14 @@ class ChannelMember(Containee):
return "%s (%s)" % (str(self.name), str(self.message_type))
class ChannelType(Type):
- def __init__(self, name, base, members):
+ def __init__(self, name, base, members, attribute_list):
Type.__init__(self)
self.name = name
self.base = base
self.member_name = None
self.members = members
+ for attr in attribute_list:
+ self.attributes[attr[0][1:]] = attr[1:]
def __str__(self):
if self.name == None:
diff --git a/python_modules/spice_parser.py b/python_modules/spice_parser.py
index d0aabb0..44456ab 100644
--- a/python_modules/spice_parser.py
+++ b/python_modules/spice_parser.py
@@ -124,7 +124,7 @@ def SPICE_BNF():
enumDef = Group(enum_ + identifier + enumBody + attributes - semi).setParseAction(lambda toks: ptypes.EnumType(toks[0][0], toks[0][1], toks[0][2], toks[0][3]))
flagsDef = Group(flags_ + identifier + flagsBody + attributes - semi).setParseAction(lambda toks: ptypes.FlagsType(toks[0][0], toks[0][1], toks[0][2], toks[0][3]))
messageDef = Group(message_ + identifier + messageBody + attributes - semi).setParseAction(lambda toks: ptypes.MessageType(toks[0][1], toks[0][2], toks[0][3]))
- channelDef = Group(channel_ + identifier + channelBody - semi).setParseAction(lambda toks: ptypes.ChannelType(toks[0][1], toks[0][2], toks[0][3]))
+ channelDef = Group(channel_ + identifier + channelBody + attributes - semi).setParseAction(lambda toks: ptypes.ChannelType(toks[0][1], toks[0][2], toks[0][3], toks[0][4]))
structDef = Group(struct_ + identifier + structBody + attributes - semi).setParseAction(lambda toks: ptypes.StructType(toks[0][1], toks[0][2], toks[0][3]))
typedefDef = Group(typedef_ + identifier + typeSpec + attributes - semi).setParseAction(lambda toks: ptypes.TypeAlias(toks[0][1], toks[0][2], toks[0][3]))