Eric Blake <ebl...@redhat.com> writes: > From: Fam Zheng <f...@redhat.com> > > 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 <f...@redhat.com> > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > scripts/qapi.py | 21 ++++++++++++++++++--- > tests/qapi-schema/bad-type-bool.err | 2 +- > tests/qapi-schema/bad-type-bool.json | 1 - > 3 files changed, 19 insertions(+), 5 deletions(-) > > diff --git a/scripts/qapi.py b/scripts/qapi.py > index 5d0dc91..6ed6a34 100644 > --- a/scripts/qapi.py > +++ b/scripts/qapi.py > @@ -158,6 +158,20 @@ class QAPISchema: > return > else: > 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': > if self.cursor == len(self.src): > self.tok = None > @@ -197,8 +211,9 @@ class QAPISchema: > if self.tok == ']': > self.accept() > return expr > - if not self.tok in [ '{', '[', "'" ]: > - raise QAPISchemaError(self, 'Expected "{", "[", "]" or string') > + if not self.tok in "{['tfn": > + raise QAPISchemaError(self, 'Expected "{", "[", "]", string, ' > + 'boolean or "null"') > while True: > expr.append(self.get_expr(True)) > if self.tok == ']': > @@ -217,7 +232,7 @@ class QAPISchema: > elif self.tok == '[': > self.accept() > expr = self.get_values() > - elif self.tok == "'": > + elif self.tok in "'tfn": > expr = self.val > self.accept() > else:
Exploiting that the three literal names start with different letters is a a hack, but it'll do. Reviewed-by: Markus Armbruster <arm...@redhat.com> [...]