qapi: Better error messages for bad expressions
authorEric Blake <eblake@redhat.com>
Mon, 4 May 2015 15:05:15 +0000 (09:05 -0600)
committerMarkus Armbruster <armbru@redhat.com>
Tue, 5 May 2015 16:39:01 +0000 (18:39 +0200)
commit0545f6b8874c28d97369f2c83e5077e0461d4f12
tree592dd6fc1b34696a048038cb582f6b13089a6787
parent9050c65b71ac1d197330e6db221f63189e21bad5
qapi: Better error messages for bad expressions

The previous commit demonstrated that the generator overlooked some
fairly basic broken expressions:
- missing metataype
- metatype key has a non-string value
- unknown key in relation to the metatype
- conflicting metatype (this patch treats the second metatype as an
unknown key of the first key visited, which is not necessarily the
first key the user typed)

Add check_keys to cover these situations, and update testcases to
match.  A couple other tests (enum-missing-data, indented-expr) had
to change since the validation added here occurs so early.
Conversely, changes to ident-with-escape results show that we still
have problems where our handling of escape sequences differs from
true JSON, which will matter down the road if we allow arbitrary
default string values for optional parameters (but for now is not
too bad, as we currently can avoid unicode escaping as we don't
need to represent anything beyond C identifier material).

While valid .json files won't trigger any of these cases, we might
as well be nicer to developers that make a typo while trying to add
new QAPI code.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
24 files changed:
scripts/qapi.py
tests/qapi-schema/alternate-base.err
tests/qapi-schema/bad-type-dict.err
tests/qapi-schema/bad-type-dict.exit
tests/qapi-schema/bad-type-dict.json
tests/qapi-schema/bad-type-dict.out
tests/qapi-schema/double-type.err
tests/qapi-schema/double-type.exit
tests/qapi-schema/double-type.json
tests/qapi-schema/double-type.out
tests/qapi-schema/enum-missing-data.err
tests/qapi-schema/ident-with-escape.err
tests/qapi-schema/ident-with-escape.exit
tests/qapi-schema/ident-with-escape.out
tests/qapi-schema/indented-expr.json
tests/qapi-schema/indented-expr.out
tests/qapi-schema/missing-type.err
tests/qapi-schema/missing-type.exit
tests/qapi-schema/missing-type.json
tests/qapi-schema/missing-type.out
tests/qapi-schema/unknown-expr-key.err
tests/qapi-schema/unknown-expr-key.exit
tests/qapi-schema/unknown-expr-key.json
tests/qapi-schema/unknown-expr-key.out