]> granicus.if.org Git - clang/commitdiff
Add CastExpr::getCastKindName and use it in the StmtDumper.
authorAnders Carlsson <andersca@mac.com>
Thu, 3 Sep 2009 00:59:21 +0000 (00:59 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 3 Sep 2009 00:59:21 +0000 (00:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80862 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Expr.h
lib/AST/Expr.cpp
lib/AST/StmtDumper.cpp

index 750b72cbcf0ae26666d886eddda811ab26915af4..0d333e2ee48231d7ae5252be75bc61e0260699f0 100644 (file)
@@ -1395,7 +1395,8 @@ protected:
 public:
   CastKind getCastKind() const { return Kind; }
   void setCastKind(CastKind K) { Kind = K; }
-  
+  const char *getCastKindName() const;
+
   Expr *getSubExpr() { return cast<Expr>(Op); }
   const Expr *getSubExpr() const { return cast<Expr>(Op); }
   void setSubExpr(Expr *E) { Op = E; }
index a69448e7bc8d1617f1a055037929d049336623e8..daa98aeeabcdc5d1d56e768e02930f04cdfe741b 100644 (file)
@@ -319,6 +319,38 @@ MemberExpr *MemberExpr::Create(ASTContext &C, Expr *base, bool isarrow,
                               ty);
 }
 
+const char *CastExpr::getCastKindName() const {
+  switch (getCastKind()) {
+  case CastExpr::CK_Unknown:
+    return "Unknown";
+  case CastExpr::CK_BitCast:
+    return "BitCast";
+  case CastExpr::CK_NoOp:
+    return "NoOp";
+  case CastExpr::CK_DerivedToBase:
+    return "DerivedToBase";
+  case CastExpr::CK_Dynamic:
+    return "Dynamic";
+  case CastExpr::CK_ToUnion:
+    return "ToUnion";
+  case CastExpr::CK_ArrayToPointerDecay:
+    return "ArrayToPointerDecay";
+  case CastExpr::CK_FunctionToPointerDecay:
+    return "FunctionToPointerDecay";
+  case CastExpr::CK_NullToMemberPointer:
+    return "NullToMemberPointer";
+  case CastExpr::CK_BaseToDerivedMemberPointer:
+    return "BaseToDerivedMemberPointer";
+  case CastExpr::CK_UserDefinedConversion:
+    return "UserDefinedConversion";
+  case CastExpr::CK_ConstructorConversion:
+    return "ConstructorConversion";
+  }
+  
+  assert(0 && "Unhandled cast kind!");
+  return 0;
+}
+
 /// getOpcodeStr - Turn an Opcode enum value into the punctuation char it
 /// corresponds to, e.g. "<<=".
 const char *BinaryOperator::getOpcodeStr(Opcode Op) {
index 7d8d64cb63ab22fbc00fa17b6cde690478d330d3..5f320095e7f67f6737e06cdb45e698613ecaebe5 100644 (file)
@@ -301,45 +301,7 @@ void StmtDumper::VisitExpr(Expr *Node) {
 
 void StmtDumper::VisitCastExpr(CastExpr *Node) {
   DumpExpr(Node);
-  fprintf(F, " ");
-  switch (Node->getCastKind()) {
-  case CastExpr::CK_Unknown:
-    fprintf(F, "<Unknown>");
-    break;
-  case CastExpr::CK_BitCast:
-    fprintf(F, "<BitCast>");
-    break;
-  case CastExpr::CK_NoOp:
-    fprintf(F, "<NoOp>");
-    break;
-  case CastExpr::CK_DerivedToBase:
-    fprintf(F, "<DerivedToBase>");
-    break;
-  case CastExpr::CK_Dynamic:
-    fprintf(F, "<Dynamic>");
-    break;
-  case CastExpr::CK_ToUnion:
-    fprintf(F, "<ToUnion>");
-    break;
-  case CastExpr::CK_ArrayToPointerDecay:
-    fprintf(F, "<ArrayToPointerDecay>");
-    break;
-  case CastExpr::CK_FunctionToPointerDecay:
-    fprintf(F, "<FunctionToPointerDecay>");
-    break;
-  case CastExpr::CK_NullToMemberPointer:
-    fprintf(F, "<NullToMemberPointer>");
-    break;
-  case CastExpr::CK_BaseToDerivedMemberPointer:
-    fprintf(F, "<BaseToDerivedMemberPointer>");
-    break;
-  case CastExpr::CK_UserDefinedConversion:
-    fprintf(F, "<UserDefinedConversion>");
-    break;
-  case CastExpr::CK_ConstructorConversion:
-    fprintf(F, "<ConstructorConversion>");
-    break;
-  }
+  fprintf(F, " <%s>", Node->getCastKindName());
 }
 
 void StmtDumper::VisitDeclRefExpr(DeclRefExpr *Node) {
@@ -480,8 +442,9 @@ void StmtDumper::VisitTypesCompatibleExpr(TypesCompatibleExpr *Node) {
 
 void StmtDumper::VisitCXXNamedCastExpr(CXXNamedCastExpr *Node) {
   DumpExpr(Node);
-  fprintf(F, " %s<%s>", Node->getCastName(),
-          Node->getTypeAsWritten().getAsString().c_str());
+  fprintf(F, " %s<%s> <%s>", Node->getCastName(),
+          Node->getTypeAsWritten().getAsString().c_str(),
+          Node->getCastKindName());
 }
 
 void StmtDumper::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *Node) {