diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-03-27 23:10:48 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-03-27 23:10:48 +0000 |
commit | 333489bba35d91e4ddb101f441087177c492d090 (patch) | |
tree | 6b658646aed7c601a730536e09816cecc7ff0c65 /clang/lib/AST/NestedNameSpecifier.cpp | |
parent | 669f1d0b0b7ab0fd05f4cf672eab6dbe3f358953 (diff) | |
download | bcm5719-llvm-333489bba35d91e4ddb101f441087177c492d090.tar.gz bcm5719-llvm-333489bba35d91e4ddb101f441087177c492d090.zip |
Initial implementation of parsing, semantic analysis, and template
instantiation for C++ typename-specifiers such as
typename T::type
The parsing of typename-specifiers is relatively easy thanks to
annotation tokens. When we see the "typename", we parse the
typename-specifier and produce a typename annotation token. There are
only a few places where we need to handle this. We currently parse the
typename-specifier form that terminates in an identifier, but not the
simple-template-id form, e.g.,
typename T::template apply<U, V>
Parsing of nested-name-specifiers has a similar problem, since at this
point we don't have any representation of a class template
specialization whose template-name is unknown.
Semantic analysis is only partially complete, with some support for
template instantiation that works for simple examples.
llvm-svn: 67875
Diffstat (limited to 'clang/lib/AST/NestedNameSpecifier.cpp')
-rw-r--r-- | clang/lib/AST/NestedNameSpecifier.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/AST/NestedNameSpecifier.cpp b/clang/lib/AST/NestedNameSpecifier.cpp index 62e972efd57..40efe2a1698 100644 --- a/clang/lib/AST/NestedNameSpecifier.cpp +++ b/clang/lib/AST/NestedNameSpecifier.cpp @@ -17,6 +17,7 @@ #include "clang/AST/Type.h" #include "llvm/Support/raw_ostream.h" #include <cassert> +#include <stdio.h> using namespace clang; @@ -150,3 +151,12 @@ void NestedNameSpecifier::Destroy(ASTContext &Context) { this->~NestedNameSpecifier(); Context.Deallocate((void *)this); } + +void NestedNameSpecifier::Dump() { + std::string Result; + { + llvm::raw_string_ostream OS(Result); + Print(OS); + } + fprintf(stderr, "%s", Result.c_str()); +} |