summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOle Troan <ot@cisco.com>2020-08-10 17:06:44 +0200
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-08-11 14:55:41 +0000
commit68ebcd50bfb9eee419b3efabfde3411550160d03 (patch)
tree506a894cbc527f6075be9ef3bac4b3bb00dae97e
parent710fe104620683755de71e2bb5d97c438987df74 (diff)
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>
-rwxr-xr-xextras/scripts/tests/test_crcchecker.sh2
-rwxr-xr-xsrc/tools/vppapigen/test_vppapigen.py10
-rwxr-xr-xsrc/tools/vppapigen/vppapigen.py10
3 files changed, 18 insertions, 4 deletions
diff --git a/extras/scripts/tests/test_crcchecker.sh b/extras/scripts/tests/test_crcchecker.sh
index e275bd9d6bf..07b6bbf7f4b 100755
--- a/extras/scripts/tests/test_crcchecker.sh
+++ b/extras/scripts/tests/test_crcchecker.sh
@@ -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
diff --git a/src/tools/vppapigen/test_vppapigen.py b/src/tools/vppapigen/test_vppapigen.py
index a8e52637d48..999addfccd2 100755
--- a/src/tools/vppapigen/test_vppapigen.py
+++ b/src/tools/vppapigen/test_vppapigen.py
@@ -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
diff --git a/src/tools/vppapigen/vppapigen.py b/src/tools/vppapigen/vppapigen.py
index 8b6297e728d..e571f26a5ac 100755
--- a/src/tools/vppapigen/vppapigen.py
+++ b/src/tools/vppapigen/vppapigen.py
@@ -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