[ms-inline asm] Make the AsmStmt class non-virtual.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162768 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp
index b7c2b39..e486d05 100644
--- a/lib/AST/Stmt.cpp
+++ b/lib/AST/Stmt.cpp
@@ -321,6 +321,60 @@
}
}
+std::string AsmStmt::generateAsmString(ASTContext &C) const {
+ StmtClass stmtClass = getStmtClass();
+ if (stmtClass == Stmt::GCCAsmStmtClass)
+ return static_cast<const GCCAsmStmt*>(this)->generateAsmString(C);
+ if (stmtClass == Stmt::MSAsmStmtClass)
+ return static_cast<const MSAsmStmt*>(this)->generateAsmString(C);
+ llvm_unreachable("unknown asm statement kind!");
+}
+
+StringRef AsmStmt::getOutputConstraint(unsigned i) const {
+ StmtClass stmtClass = getStmtClass();
+ if (stmtClass == Stmt::GCCAsmStmtClass)
+ return static_cast<const GCCAsmStmt*>(this)->getOutputConstraint(i);
+ if (stmtClass == Stmt::MSAsmStmtClass)
+ return static_cast<const MSAsmStmt*>(this)->getOutputConstraint(i);
+ llvm_unreachable("unknown asm statement kind!");
+}
+
+const Expr *AsmStmt::getOutputExpr(unsigned i) const {
+ StmtClass stmtClass = getStmtClass();
+ if (stmtClass == Stmt::GCCAsmStmtClass)
+ return static_cast<const GCCAsmStmt*>(this)->getOutputExpr(i);
+ if (stmtClass == Stmt::MSAsmStmtClass)
+ return static_cast<const MSAsmStmt*>(this)->getOutputExpr(i);
+ llvm_unreachable("unknown asm statement kind!");
+}
+
+StringRef AsmStmt::getInputConstraint(unsigned i) const {
+ StmtClass stmtClass = getStmtClass();
+ if (stmtClass == Stmt::GCCAsmStmtClass)
+ return static_cast<const GCCAsmStmt*>(this)->getInputConstraint(i);
+ if (stmtClass == Stmt::MSAsmStmtClass)
+ return static_cast<const MSAsmStmt*>(this)->getInputConstraint(i);
+ llvm_unreachable("unknown asm statement kind!");
+}
+
+const Expr *AsmStmt::getInputExpr(unsigned i) const {
+ StmtClass stmtClass = getStmtClass();
+ if (stmtClass == Stmt::GCCAsmStmtClass)
+ return static_cast<const GCCAsmStmt*>(this)->getInputExpr(i);
+ if (stmtClass == Stmt::MSAsmStmtClass)
+ return static_cast<const MSAsmStmt*>(this)->getInputExpr(i);
+ llvm_unreachable("unknown asm statement kind!");
+}
+
+StringRef AsmStmt::getClobber(unsigned i) const {
+ StmtClass stmtClass = getStmtClass();
+ if (stmtClass == Stmt::GCCAsmStmtClass)
+ return static_cast<const GCCAsmStmt*>(this)->getClobber(i);
+ if (stmtClass == Stmt::MSAsmStmtClass)
+ return static_cast<const MSAsmStmt*>(this)->getClobber(i);
+ llvm_unreachable("unknown asm statement kind!");
+}
+
/// getNumPlusOperands - Return the number of output operands that have a "+"
/// constraint.
unsigned AsmStmt::getNumPlusOperands() const {