Skip to content
  • Greg Clayton's avatar
    Fixed the forward declaration issue that was present in the DWARF parser after · 1be10fca
    Greg Clayton authored
    adding methods to C++ and objective C classes. In order to make methods, we
    need the function prototype which means we need the arguments. Parsing these
    could cause a circular reference that caused an  assertion.
    
    Added a new typedef for the clang opaque types which are just void pointers:
    lldb::clang_type_t. This appears in lldb-types.h.
    
    This was fixed by enabling struct, union, class, and enum types to only get
    a forward declaration when we make the clang opaque qual type for these
    types. When they need to actually be resolved, lldb_private::Type will call
    a new function in the SymbolFile protocol to resolve a clang type when it is
    not fully defined (clang::TagDecl::getDefinition() returns NULL). This allows
    us to be a lot more lazy when parsing clang types and keeps down the amount
    of data that gets parsed into the ASTContext for each module. 
    
    Getting the clang type from a "lldb_private::Type" object now takes a boolean
    that indicates if a forward declaration is ok:
    
        clang_type_t lldb_private::Type::GetClangType (bool forward_decl_is_ok);
        
    So function prototypes that define parameters that are "const T&" can now just
    parse the forward declaration for type 'T' and we avoid circular references in
    the type system.
    
    llvm-svn: 115012
    1be10fca
Loading