OSDN Git Service

qapi: New QAPISchema intermediate reperesentation
authorMarkus Armbruster <armbru@redhat.com>
Wed, 16 Sep 2015 11:06:05 +0000 (13:06 +0200)
committerMarkus Armbruster <armbru@redhat.com>
Mon, 21 Sep 2015 07:31:29 +0000 (09:31 +0200)
commitac88219a6c78302c693fb60fe6cf04358540fbce
tree40653063ef930e38a44fb7b0a3f96ae92f8ef55c
parenta4bcb2080d5c1d08bab512d76fb260296e2cae74
qapi: New QAPISchema intermediate reperesentation

The QAPI code generators work with a syntax tree (nested dictionaries)
plus a few symbol tables (also dictionaries) on the side.

They have clearly outgrown these simple data structures.  There's lots
of rummaging around in dictionaries, and information is recomputed on
the fly.  For the work I'm going to do, I want more clearly defined
and more convenient interfaces.

Going forward, I also want less coupling between the back-ends and the
syntax tree, to make messing with the syntax easier.

Create a bunch of classes to represent QAPI schemata.

Have the QAPISchema initializer call the parser, then walk the syntax
tree to create the new internal representation, and finally perform
semantic analysis.

Shortcut: the semantic analysis still relies on existing check_exprs()
to do the actual semantic checking.  All this code needs to move into
the classes.  Mark as TODO.

Simple unions are lowered to flat unions.  Flat unions and structs are
represented as a more general object type.

Catching name collisions in generated code would be nice.  Mark as
TODO.

We generate array types eagerly, even though most of them aren't used.
Mark as TODO.

Nothing uses the new intermediate representation just yet, thus no
change to generated files.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
scripts/qapi-commands.py
scripts/qapi-event.py
scripts/qapi-types.py
scripts/qapi-visit.py
scripts/qapi.py
tests/qapi-schema/test-qapi.py