summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/NestedNameSpecifier.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-03-27 23:10:48 +0000
committerDouglas Gregor <dgregor@apple.com>2009-03-27 23:10:48 +0000
commit333489bba35d91e4ddb101f441087177c492d090 (patch)
tree6b658646aed7c601a730536e09816cecc7ff0c65 /clang/lib/AST/NestedNameSpecifier.cpp
parent669f1d0b0b7ab0fd05f4cf672eab6dbe3f358953 (diff)
downloadbcm5719-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.cpp10
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());
+}
OpenPOWER on IntegriCloud