qapi: Prepare new QAPISchemaMember base class
We want to share some clash detection code between enum values and object type members. To assist with that, split off part of QAPISchemaObjectTypeMember into a new base class QAPISchemaMember that tracks name, owner, and common clash detection code; while the former keeps the additional fields for type and optional flag. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1449033659-25497-11-git-send-email-eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
		
							parent
							
								
									29637a6ee9
								
							
						
					
					
						commit
						d44f9ac80c
					
				| @ -1018,28 +1018,18 @@ class QAPISchemaObjectType(QAPISchemaType): | ||||
|                                        self.members, self.variants) | ||||
| 
 | ||||
| 
 | ||||
| class QAPISchemaObjectTypeMember(object): | ||||
| class QAPISchemaMember(object): | ||||
|     role = 'member' | ||||
| 
 | ||||
|     def __init__(self, name, typ, optional): | ||||
|     def __init__(self, name): | ||||
|         assert isinstance(name, str) | ||||
|         assert isinstance(typ, str) | ||||
|         assert isinstance(optional, bool) | ||||
|         self.name = name | ||||
|         self._type_name = typ | ||||
|         self.type = None | ||||
|         self.optional = optional | ||||
|         self.owner = None | ||||
| 
 | ||||
|     def set_owner(self, name): | ||||
|         assert not self.owner | ||||
|         self.owner = name | ||||
| 
 | ||||
|     def check(self, schema): | ||||
|         assert self.owner | ||||
|         self.type = schema.lookup_type(self._type_name) | ||||
|         assert self.type | ||||
| 
 | ||||
|     def check_clash(self, info, seen): | ||||
|         cname = c_name(self.name) | ||||
|         if cname in seen: | ||||
| @ -1066,6 +1056,21 @@ class QAPISchemaObjectTypeMember(object): | ||||
|         return "'%s' %s" % (self.name, self._pretty_owner()) | ||||
| 
 | ||||
| 
 | ||||
| class QAPISchemaObjectTypeMember(QAPISchemaMember): | ||||
|     def __init__(self, name, typ, optional): | ||||
|         QAPISchemaMember.__init__(self, name) | ||||
|         assert isinstance(typ, str) | ||||
|         assert isinstance(optional, bool) | ||||
|         self._type_name = typ | ||||
|         self.type = None | ||||
|         self.optional = optional | ||||
| 
 | ||||
|     def check(self, schema): | ||||
|         assert self.owner | ||||
|         self.type = schema.lookup_type(self._type_name) | ||||
|         assert self.type | ||||
| 
 | ||||
| 
 | ||||
| class QAPISchemaObjectTypeVariants(object): | ||||
|     def __init__(self, tag_name, tag_member, variants): | ||||
|         # Flat unions pass tag_name but not tag_member. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Eric Blake
						Eric Blake