summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/AST/Expr.h3
-rw-r--r--clang/lib/AST/Expr.cpp32
-rw-r--r--clang/lib/AST/StmtDumper.cpp45
3 files changed, 38 insertions, 42 deletions
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h
index 750b72cbcf0..0d333e2ee48 100644
--- a/clang/include/clang/AST/Expr.h
+++ b/clang/include/clang/AST/Expr.h
@@ -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; }
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index a69448e7bc8..daa98aeeabc 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -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) {
diff --git a/clang/lib/AST/StmtDumper.cpp b/clang/lib/AST/StmtDumper.cpp
index 7d8d64cb63a..5f320095e7f 100644
--- a/clang/lib/AST/StmtDumper.cpp
+++ b/clang/lib/AST/StmtDumper.cpp
@@ -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) {
OpenPOWER on IntegriCloud