qapi/parser: enforce all top-level expressions must be dict in _parse()
authorJohn Snow <jsnow@redhat.com>
Wed, 19 May 2021 18:39:42 +0000 (14:39 -0400)
committerMarkus Armbruster <armbru@redhat.com>
Thu, 20 May 2021 09:28:28 +0000 (11:28 +0200)
commit9cd0205d553bc27a66454782dfc5d7e8d2324e34
treef5465aeacfc9aab0130e399bc4645679245daf9e
parent7c610ce6a9950a49148fc3d37ed353958ca8d776
qapi/parser: enforce all top-level expressions must be dict in _parse()

Instead of using get_expr nested=False, allow get_expr to always return
any expression. In exchange, add a new error message to the top-level
parser that explains the semantic error: Top-level expressions must
always be JSON objects.

This helps mypy understand the rest of this function which assumes that
get_expr did indeed return a dict.

The exception type changes from QAPIParseError to QAPISemError as a
result, and the error message in two tests now changes.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20210519183951.3946870-7-jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
scripts/qapi/parser.py
tests/qapi-schema/non-objects.err
tests/qapi-schema/quoted-structural-chars.err