vppapigen: add support for empty options
Type: improvement
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: I59323447bee7bb4f0563251a5df80cbefb9bd89e
Signed-off-by: Ole Troan <ot@cisco.com>
diff --git a/extras/scripts/tests/test_crcchecker.sh b/extras/scripts/tests/test_crcchecker.sh
index e275bd9..07b6bbf 100755
--- a/extras/scripts/tests/test_crcchecker.sh
+++ b/extras/scripts/tests/test_crcchecker.sh
@@ -59,7 +59,7 @@
option version="1.0.0";
autoreply define crccheck
{
- option deprecated="v20.11";
+ option deprecated;
bool foo;
};
EOL
diff --git a/src/tools/vppapigen/test_vppapigen.py b/src/tools/vppapigen/test_vppapigen.py
index a8e5263..999addf 100755
--- a/src/tools/vppapigen/test_vppapigen.py
+++ b/src/tools/vppapigen/test_vppapigen.py
@@ -124,6 +124,16 @@
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
diff --git a/src/tools/vppapigen/vppapigen.py b/src/tools/vppapigen/vppapigen.py
index 8b6297e..e571f26 100755
--- a/src/tools/vppapigen/vppapigen.py
+++ b/src/tools/vppapigen/vppapigen.py
@@ -350,7 +350,7 @@
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 @@
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