 156402e504
			
		
	
	
		156402e504
		
	
	
	
	
		
			
			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())
 |