From 9e87ec4b541adb7927e88c23d8460f5d13d68f51 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 19 Feb 2018 13:37:31 -0500 Subject: [PATCH] qapi: Prepare for catching more semantic parse errors This patch widens the scope of a try block (with the attending reindentation required by Python) in preparation for a future patch adding more instances of QAPIExprError inside the block. It's easier to separate indentation from semantic changes, so this patch has no real behavior change. Backports commit 268a1c5eb10832c2e4476d3fe199ea547dabecb7 from qemu --- qemu/scripts/qapi.py | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/qemu/scripts/qapi.py b/qemu/scripts/qapi.py index 902010a7..16c5076a 100644 --- a/qemu/scripts/qapi.py +++ b/qemu/scripts/qapi.py @@ -398,6 +398,7 @@ def check_exprs(schema): check_event(expr, info) def parse_schema(input_file): + # First pass: read entire file into memory try: schema = QAPISchema(open(input_file, "r")) except (QAPISchemaError, QAPIExprError), e: @@ -406,24 +407,26 @@ def parse_schema(input_file): exprs = [] - for expr_elem in schema.exprs: - expr = expr_elem['expr'] - if expr.has_key('enum'): - add_enum(expr['enum'], expr.get('data')) - elif expr.has_key('union'): - add_union(expr) - elif expr.has_key('type'): - add_struct(expr) - exprs.append(expr) - - # Try again for hidden UnionKind enum - for expr_elem in schema.exprs: - expr = expr_elem['expr'] - if expr.has_key('union'): - if not discriminator_find_enum_define(expr): - add_enum('%sKind' % expr['union']) - try: + # Next pass: learn the types. + for expr_elem in schema.exprs: + expr = expr_elem['expr'] + if expr.has_key('enum'): + add_enum(expr['enum'], expr.get('data')) + elif expr.has_key('union'): + add_union(expr) + elif expr.has_key('type'): + add_struct(expr) + exprs.append(expr) + + # Try again for hidden UnionKind enum + for expr_elem in schema.exprs: + expr = expr_elem['expr'] + if expr.has_key('union'): + if not discriminator_find_enum_define(expr): + add_enum('%sKind' % expr['union']) + + # Final pass - validate that exprs make sense check_exprs(schema) except QAPIExprError, e: print >>sys.stderr, e