Exemple #1
0
	def flat_param(self, some_ast):
		type_ast = some_ast.the('target').the('type')
		type_ast = infogripper.find_alias_target(type_ast)
		meta_type = type_ast.get_single_attribute('meta_type')

		# And work out what to do with it
		if meta_type == 'basic':
			yield [some_ast]
		elif meta_type == 'struct':
			for struct_member_ast in self._flat_struct(type_ast):
				yield [some_ast] + struct_member_ast
		elif meta_type == 'union':
			# FIXME: We just pick the first element - we should probably
			# marshal it bytewise.
			first_member = type_ast.the('members').children[0]
			for union_member_ast in self.flat_param(first_member):
				yield [some_ast] + union_member_ast
		elif meta_type == 'enum':
			# It's essentially an int -- hmm
			yield [some_ast]
		else:
			type_ast.print_tree()
			raise Exception("Unexpected type encountered.")
Exemple #2
0
	def _get_type_from_param(self, param_ast):
		type_ast = param_ast.the('target').the('type')
		type_ast = infogripper.find_alias_target(type_ast)
		return type_ast
Exemple #3
0
def get_expr_type(ast):
	if ast.leaf == 'scoped_name':
		return infogripper.find_alias_target(ast.the('target').children[0])
	else:
		return ast.the('type')