From 7307fccb71ad55911800d2e183d4a8f879ffdb01 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Wed, 22 Jun 2011 13:23:47 +0200 Subject: 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 --- python_modules/ptypes.py | 4 +++- python_modules/spice_parser.py | 2 +- 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])) -- cgit v1.2.3