fib: fib api updates
[vpp.git] / src / tools / vppapigen / vppapigen.py
index c60e43e..576fa54 100755 (executable)
@@ -23,8 +23,6 @@ global_types = {}
 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
 
 
@@ -509,18 +507,31 @@ class VPPAPIParser(object):
         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 ']' ';' '''