+ if tags[0] == 'annotation':
+ assert tags[1] == '('
+ assert tags[3] == ')'
+ tags = tags[2]
+ assert tags[0] == '"'
+ assert tags[-1] == '"'
+ tags = tags[1:-1]
+ tags = parse_sal_annotation(tags)
+ token = self.lookahead()
+ if token[0] == '_' and (token[1] == '_' or token[-1] == '_'):
+ # Parse __in, __out, etc tags
+ tag = self.consume()
+ if self.match('('):
+ tag += self.consume()
+ while not self.match(')'):
+ tag += self.consume()
+ tag += self.consume(')')
+ tags.extend(self.parse_sal_annotation(tag))
+ return tags
+
+ def parse_sal_annotation(self, tags):
+ try:
+ tags, args = tags.split('(')
+ except ValueError:
+ pass
+ assert tags[0] == '_'
+ if tags[1] == '_':
+ tags = tags[2:]
+ if tags[-1] == '_':
+ tags = tags[1:-1]
+ tags = tags.lower()
+ tags = tags.split('_')