Enhancements for the DynTypedMatcher system.
- Added conversion routines and checks in Matcher<T> that take a DynTypedMatcher.
- Added type information on the error messages for the marshallers.
- Allows future work on Polymorphic/overloaded matchers. We should be
  able to disambiguate at runtime and choose the appropriate overload.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184429 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ASTMatchers/Dynamic/VariantValue.cpp b/lib/ASTMatchers/Dynamic/VariantValue.cpp
index 6fcbe7f..912858f 100644
--- a/lib/ASTMatchers/Dynamic/VariantValue.cpp
+++ b/lib/ASTMatchers/Dynamic/VariantValue.cpp
@@ -14,6 +14,8 @@
 
 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
 
+#include "clang/Basic/LLVM.h"
+
 namespace clang {
 namespace ast_matchers {
 namespace dynamic {
@@ -123,6 +125,18 @@
   Value.Matcher = NewValue;
 }
 
+std::string VariantValue::getTypeAsString() const {
+  switch (Type) {
+  case VT_String: return "String";
+  case VT_Matcher:
+    return (Twine("Matcher<") + getMatcher().getSupportedKind().asStringRef() +
+            ">").str();
+  case VT_Unsigned: return "Unsigned";
+  case VT_Nothing: return "Nothing";
+  }
+  llvm_unreachable("Invalid Type");
+}
+
 } // end namespace dynamic
 } // end namespace ast_matchers
 } // end namespace clang