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>
This commit is contained in:
Ole Troan
2020-08-10 17:06:44 +02:00
committed by Andrew Yourtchenko
parent 710fe10462
commit 68ebcd50bf
3 changed files with 18 additions and 4 deletions

View File

@ -59,7 +59,7 @@ cat >crccheck.api <<EOL
option version="1.0.0"; option version="1.0.0";
autoreply define crccheck autoreply define crccheck
{ {
option deprecated="v20.11"; option deprecated;
bool foo; bool foo;
}; };
EOL EOL

View File

@ -124,6 +124,16 @@ class TestDefine(unittest.TestCase):
with self.assertRaises(ParseError): with self.assertRaises(ParseError):
self.parser.parse_string(test_string) 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): class TestService(unittest.TestCase):
@classmethod @classmethod

View File

@ -350,7 +350,7 @@ class Import():
class Option(): class Option():
def __init__(self, option, value): def __init__(self, option, value=None):
self.type = 'Option' self.type = 'Option'
self.option = option self.option = option
self.value = value self.value = value
@ -686,8 +686,12 @@ class VPPAPIParser(object):
p[0] = Array(p[1], p[2], p[4]) p[0] = Array(p[1], p[2], p[4])
def p_option(self, p): def p_option(self, p):
'''option : OPTION ID '=' assignee ';' ''' '''option : OPTION ID '=' assignee ';'
p[0] = Option(p[2], p[4]) | OPTION ID ';' '''
if len(p) == 4:
p[0] = Option(p[2])
else:
p[0] = Option(p[2], p[4])
def p_assignee(self, p): def p_assignee(self, p):
'''assignee : NUM '''assignee : NUM