diff options
author | Ole Troan <ot@cisco.com> | 2020-08-10 17:06:44 +0200 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2020-08-11 14:55:41 +0000 |
commit | 68ebcd50bfb9eee419b3efabfde3411550160d03 (patch) | |
tree | 506a894cbc527f6075be9ef3bac4b3bb00dae97e | |
parent | 710fe104620683755de71e2bb5d97c438987df74 (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-x | extras/scripts/tests/test_crcchecker.sh | 2 | ||||
-rwxr-xr-x | src/tools/vppapigen/test_vppapigen.py | 10 | ||||
-rwxr-xr-x | src/tools/vppapigen/vppapigen.py | 10 |
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 |