qapi: Allow true, false and null in schema json
In the near term, we will use it for a sensible-looking 'gen':false inside command declarations, instead of the current ugly 'gen':'no'. In the long term, it will allow conversion from shorthand with defaults mentioned only in side-band documentation: 'data':{'*flag':'bool', '*string':'str'} into an explicit default value documentation, as in: 'data':{'flag':{'type':'bool', 'optional':true, 'default':true}, 'string':{'type':'str', 'optional':true, 'default':null}} We still don't parse integer values (also necessary before we can allow explicit defaults), but that can come in a later series. Update the testsuite to match an improved error message. Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
4dc2e6906e
commit
e53188ada5
@ -158,6 +158,20 @@ class QAPISchema:
|
|||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
string += ch
|
string += ch
|
||||||
|
elif self.tok in "tfn":
|
||||||
|
val = self.src[self.cursor - 1:]
|
||||||
|
if val.startswith("true"):
|
||||||
|
self.val = True
|
||||||
|
self.cursor += 3
|
||||||
|
return
|
||||||
|
elif val.startswith("false"):
|
||||||
|
self.val = False
|
||||||
|
self.cursor += 4
|
||||||
|
return
|
||||||
|
elif val.startswith("null"):
|
||||||
|
self.val = None
|
||||||
|
self.cursor += 3
|
||||||
|
return
|
||||||
elif self.tok == '\n':
|
elif self.tok == '\n':
|
||||||
if self.cursor == len(self.src):
|
if self.cursor == len(self.src):
|
||||||
self.tok = None
|
self.tok = None
|
||||||
@ -197,8 +211,9 @@ class QAPISchema:
|
|||||||
if self.tok == ']':
|
if self.tok == ']':
|
||||||
self.accept()
|
self.accept()
|
||||||
return expr
|
return expr
|
||||||
if not self.tok in [ '{', '[', "'" ]:
|
if not self.tok in "{['tfn":
|
||||||
raise QAPISchemaError(self, 'Expected "{", "[", "]" or string')
|
raise QAPISchemaError(self, 'Expected "{", "[", "]", string, '
|
||||||
|
'boolean or "null"')
|
||||||
while True:
|
while True:
|
||||||
expr.append(self.get_expr(True))
|
expr.append(self.get_expr(True))
|
||||||
if self.tok == ']':
|
if self.tok == ']':
|
||||||
@ -217,7 +232,7 @@ class QAPISchema:
|
|||||||
elif self.tok == '[':
|
elif self.tok == '[':
|
||||||
self.accept()
|
self.accept()
|
||||||
expr = self.get_values()
|
expr = self.get_values()
|
||||||
elif self.tok == "'":
|
elif self.tok in "'tfn":
|
||||||
expr = self.val
|
expr = self.val
|
||||||
self.accept()
|
self.accept()
|
||||||
else:
|
else:
|
||||||
|
@ -1 +1 @@
|
|||||||
tests/qapi-schema/bad-type-bool.json:3:11: Stray "t"
|
tests/qapi-schema/bad-type-bool.json:2: 'type' key must have a string value
|
||||||
|
@ -1,3 +1,2 @@
|
|||||||
# we reject an expression with a metatype that is not a string
|
# we reject an expression with a metatype that is not a string
|
||||||
# FIXME: once the parser understands bool inputs, improve the error message
|
|
||||||
{ 'type': true, 'data': { } }
|
{ 'type': true, 'data': { } }
|
||||||
|
Loading…
Reference in New Issue
Block a user