vppapigen: add support for empty options 04/28204/4
authorOle Troan <ot@cisco.com>
Mon, 10 Aug 2020 15:06:44 +0000 (17:06 +0200)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Tue, 11 Aug 2020 14:55:41 +0000 (14:55 +0000)
Type: improvement
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: I59323447bee7bb4f0563251a5df80cbefb9bd89e
Signed-off-by: Ole Troan <ot@cisco.com>
extras/scripts/tests/test_crcchecker.sh
src/tools/vppapigen/test_vppapigen.py
src/tools/vppapigen/vppapigen.py

index e275bd9..07b6bbf 100755 (executable)
@@ -59,7 +59,7 @@ cat >crccheck.api <<EOL
 option version="1.0.0";
 autoreply define crccheck
 {
-  option deprecated="v20.11";
+  option deprecated;
   bool foo;
 };
 EOL
index a8e5263..999addf 100755 (executable)
@@ -124,6 +124,16 @@ class TestDefine(unittest.TestCase):
         with self.assertRaises(ParseError):
             self.parser.parse_string(test_string)
 
+    def test_options(self):
+        test_string = '''
+          define foo { option deprecated; u8 foo; };
+          define foo_reply {u32 context; i32 retval; };
+        '''
+        r = self.parser.parse_string(test_string)
+        self.assertIsNotNone(r)
+        s = self.parser.process(r)
+        self.assertIsNotNone(s)
+
 
 class TestService(unittest.TestCase):
     @classmethod
index 8b6297e..e571f26 100755 (executable)
@@ -350,7 +350,7 @@ class Import():
 
 
 class Option():
-    def __init__(self, option, value):
+    def __init__(self, option, value=None):
         self.type = 'Option'
         self.option = option
         self.value = value
@@ -686,8 +686,12 @@ class VPPAPIParser(object):
         p[0] = Array(p[1], p[2], p[4])
 
     def p_option(self, p):
-        '''option : OPTION ID '=' assignee ';' '''
-        p[0] = Option(p[2], p[4])
+        '''option : OPTION ID '=' assignee ';'
+                  | OPTION ID ';' '''
+        if len(p) == 4:
+            p[0] = Option(p[2])
+        else:
+            p[0] = Option(p[2], p[4])
 
     def p_assignee(self, p):
         '''assignee : NUM