def _scan_type_forward_decl(type_, has_seen): '''Scan type for forward declarations.''' if type_.is_user_defined_type(): tree = type_.get_declaration() if tree.is_user_defined_type_decl() and tree not in has_seen: tree.annotate(annotations.FORWARD_DECLARATION, True) return stripped_type = strip_type(type_) if stripped_type: _scan_type_forward_decl(stripped_type, has_seen)
def _scan_tree(tree, root): '''Scan this tree for __va_list_tag.''' if not tree.get_annotation(annotations.REQUIRED, False): return type_ = tree.type while True: if tree.name == '__va_list_tag': root.annotate(annotations.USE_VA_LIST_TAG, tree) raise StopIteration() # Return from deeply recursion while True: type_ = strip_type(type_) if not type_: return if type_.is_user_defined_type(): tree = type_.get_declaration() break
def _scan_type_definition(type_, todo, visited): """Scan type definition.""" if type_.is_user_defined_type(): tree = type_.get_declaration() if not tree.is_user_defined_type_decl(): return if tree in visited: return todo.append(tree) visited.add(tree) for field in tree.get_field_declaration(): _scan_type_definition(field.type, todo, visited) return stripped_type = strip_type(type_) if stripped_type: _scan_type_definition(stripped_type, todo, visited)
def _scan_type_definition(type_, todo, visited): '''Scan type definition.''' if type_.is_user_defined_type(): tree = type_.get_declaration() if not tree.is_user_defined_type_decl(): return if tree in visited: return todo.append(tree) visited.add(tree) for field in tree.get_field_declaration(): _scan_type_definition(field.type, todo, visited) return stripped_type = strip_type(type_) if stripped_type: _scan_type_definition(stripped_type, todo, visited)