Skip to content
  • Douglas Gregor's avatar
    Introduce a representation for types that we referred to via a · 5253768a
    Douglas Gregor authored
    qualified name, e.g., 
    
      foo::x
    
    so that we retain the nested-name-specifier as written in the source
    code and can reproduce that qualified name when printing the types
    back (e.g., in diagnostics). This is PR3493, which won't be complete
    until finished the other tasks mentioned near the end of this commit.
    
    The parser's representation of nested-name-specifiers, CXXScopeSpec,
    is now a bit fatter, because it needs to contain the scopes that
    precede each '::' and keep track of whether the global scoping
    operator '::' was at the beginning. For example, we need to keep track
    of the leading '::', 'foo', and 'bar' in
     
      ::foo::bar::x
    
    The Action's CXXScopeTy * is no longer a DeclContext *. It's now the
    opaque version of the new NestedNameSpecifier, which contains a single
    component of a nested-name-specifier (either a DeclContext * or a Type
    *, bitmangled). 
    
    The new sugar type QualifiedNameType composes a sequence of
    NestedNameSpecifiers with a representation of the type we're actually
    referring to. At present, we only build QualifiedNameType nodes within
    Sema::getTypeName. This will be extended to other type-constructing
    actions (e.g., ActOnClassTemplateId).
    
    Also on the way: QualifiedDeclRefExprs will also store a sequence of
    NestedNameSpecifiers, so that we can print out the property
    nested-name-specifier. I expect to also use this for handling
    dependent names like Fibonacci<I - 1>::value.
    
    llvm-svn: 67265
    5253768a
Loading