summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Stmt.cpp
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2012-08-28 17:43:23 +0000
committerChad Rosier <mcrosier@apple.com>2012-08-28 17:43:23 +0000
commitbbbe9ab876fc02832a6c5a79ec45fd8bc3a4e39e (patch)
treee150013f6bc209896ae325dbea1721ac24b451d5 /clang/lib/AST/Stmt.cpp
parent783e7c02c6348a634fbbcfd46357125eafb87c40 (diff)
downloadbcm5719-llvm-bbbe9ab876fc02832a6c5a79ec45fd8bc3a4e39e.tar.gz
bcm5719-llvm-bbbe9ab876fc02832a6c5a79ec45fd8bc3a4e39e.zip
[ms-inline asm] Make the AsmStmt class non-virtual.
llvm-svn: 162768
Diffstat (limited to 'clang/lib/AST/Stmt.cpp')
-rw-r--r--clang/lib/AST/Stmt.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp
index b7c2b39895e..e486d05ef95 100644
--- a/clang/lib/AST/Stmt.cpp
+++ b/clang/lib/AST/Stmt.cpp
@@ -321,6 +321,60 @@ bool Stmt::hasImplicitControlFlow() const {
}
}
+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 {
OpenPOWER on IntegriCloud