The old code prints the result of parsing (list of expression dictionaries), and partial results of semantic analysis (list of enum dictionaries, list of struct dictionaries). The new code prints a trace of a schema visit, i.e. what the back-ends are going to use. Built-in and array types are omitted, because they're boring. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Daniel P. Berrange <berrange@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
# QAPI parser test harness
 | 
						|
#
 | 
						|
# Copyright (c) 2013 Red Hat Inc.
 | 
						|
#
 | 
						|
# Authors:
 | 
						|
#  Markus Armbruster <armbru@redhat.com>
 | 
						|
#
 | 
						|
# This work is licensed under the terms of the GNU GPL, version 2 or later.
 | 
						|
# See the COPYING file in the top-level directory.
 | 
						|
#
 | 
						|
 | 
						|
from qapi import *
 | 
						|
from pprint import pprint
 | 
						|
import os
 | 
						|
import sys
 | 
						|
 | 
						|
 | 
						|
class QAPISchemaTestVisitor(QAPISchemaVisitor):
 | 
						|
    def visit_enum_type(self, name, info, values, prefix):
 | 
						|
        print 'enum %s %s' % (name, values)
 | 
						|
        if prefix:
 | 
						|
            print '    prefix %s' % prefix
 | 
						|
 | 
						|
    def visit_object_type(self, name, info, base, members, variants):
 | 
						|
        print 'object %s' % name
 | 
						|
        if base:
 | 
						|
            print '    base %s' % base.name
 | 
						|
        for m in members:
 | 
						|
            print '    member %s: %s optional=%s' % \
 | 
						|
                (m.name, m.type.name, m.optional)
 | 
						|
        self._print_variants(variants)
 | 
						|
 | 
						|
    def visit_alternate_type(self, name, info, variants):
 | 
						|
        print 'alternate %s' % name
 | 
						|
        self._print_variants(variants)
 | 
						|
 | 
						|
    def visit_command(self, name, info, arg_type, ret_type,
 | 
						|
                      gen, success_response):
 | 
						|
        print 'command %s %s -> %s' % \
 | 
						|
            (name, arg_type and arg_type.name, ret_type and ret_type.name)
 | 
						|
        print '   gen=%s success_response=%s' % (gen, success_response)
 | 
						|
 | 
						|
    def visit_event(self, name, info, arg_type):
 | 
						|
        print 'event %s %s' % (name, arg_type and arg_type.name)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def _print_variants(variants):
 | 
						|
        if variants:
 | 
						|
            if variants.tag_name:
 | 
						|
                print '    tag %s' % variants.tag_name
 | 
						|
            for v in variants.variants:
 | 
						|
                print '    case %s: %s' % (v.name, v.type.name)
 | 
						|
 | 
						|
schema = QAPISchema(sys.argv[1])
 | 
						|
schema.visit(QAPISchemaTestVisitor())
 |