def global_type_add(name, obj):
'''Add new type to the dictionary of types '''
type_name = 'vl_api_' + name + '_t'
- if type_name in global_types:
- raise KeyError('Type is already defined: {}'.format(name))
global_types[type_name] = obj
else:
p[0] = p[1]
+ def p_field_options(self, p):
+ '''field_options : field_option
+ | field_options field_option'''
+ if len(p) == 2:
+ p[0] = p[1]
+ else:
+ p[0] = { **p[1], **p[2] }
+
+ def p_field_option(self, p):
+ '''field_option : ID '=' assignee ','
+ | ID '=' assignee
+ '''
+ p[0] = { p[1]: p[3] }
+
def p_declaration(self, p):
'''declaration : type_specifier ID ';'
- | type_specifier ID '[' ID '=' assignee ']' ';' '''
- if len(p) == 9:
- p[0] = Field(p[1], p[2], {p[4]: p[6]})
+ | type_specifier ID '[' field_options ']' ';' '''
+ if len(p) == 7:
+ p[0] = Field(p[1], p[2], p[4])
elif len(p) == 4:
p[0] = Field(p[1], p[2])
else:
self._parse_error('ERROR')
self.fields.append(p[2])
-
def p_declaration_array(self, p):
'''declaration : type_specifier ID '[' NUM ']' ';'
| type_specifier ID '[' ID ']' ';' '''