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.")
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
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')