From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38021) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YbBdz-0006D7-Vs for qemu-devel@nongnu.org; Thu, 26 Mar 2015 13:32:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YbBdu-0001Ns-Mv for qemu-devel@nongnu.org; Thu, 26 Mar 2015 13:32:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38048) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YbBdu-0001NW-CT for qemu-devel@nongnu.org; Thu, 26 Mar 2015 13:32:30 -0400 From: Markus Armbruster References: <1427227433-5030-1-git-send-email-eblake@redhat.com> <1427227433-5030-18-git-send-email-eblake@redhat.com> Date: Thu, 26 Mar 2015 18:32:26 +0100 In-Reply-To: <1427227433-5030-18-git-send-email-eblake@redhat.com> (Eric Blake's message of "Tue, 24 Mar 2015 14:03:42 -0600") Message-ID: <87384ry89h.fsf@blackfin.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v5 17/28] qapi: Allow true, false and null in schema json List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: kwolf@redhat.com, lcapitulino@redhat.com, famz@redhat.com, qemu-devel@nongnu.org, wenchaoqemu@gmail.com Eric Blake writes: > From: Fam Zheng > > 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 > Signed-off-by: Eric Blake > --- > 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 [...]