Patchwork [16/28] qapi: qapi.py, make json parser more robust

login
register
mail settings
Submitter Michael Roth
Date Oct. 31, 2012, 10:36 p.m.
Message ID <1351722972-17801-17-git-send-email-mdroth@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/196059/
State New
Headers show

Comments

Michael Roth - Oct. 31, 2012, 10:36 p.m.
Currently the QAPI JSON parser expects a very particular style of code
indentation, the major one being that terminating curly/square brackets are
not on placed on a seperate line. This is incompatible with most
pretty-print formats, so make it a little more robust by supporting
these cases.

Also add support for parsing numerical fields. Currently they are
ignored.

QIDL will make use of both of these changes with the schemas it
generates.

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 scripts/qapi.py |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Patch

diff --git a/scripts/qapi.py b/scripts/qapi.py
index 555d823..333f375 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -37,6 +37,12 @@  def tokenize(data):
                 else:
                     string += ch
             yield string
+        elif ch.isdigit():
+            number = ch
+            while data[0].isdigit():
+                number += data[0]
+                data = data[1:]
+            yield number
 
 def parse(tokens):
     if tokens[0] == '{':
@@ -81,7 +87,7 @@  def parse_schema(fp):
         if line.startswith('#') or line == '\n':
             continue
 
-        if line.startswith(' '):
+        if line[0] in ['}', ']', ' ', '\t']:
             expr += line
         elif expr:
             expr_eval = evaluate(expr)