diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/Expr.cpp | 13 | ||||
-rw-r--r-- | lib/AST/Stmt.cpp | 21 |
2 files changed, 32 insertions, 2 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index f18586fb70..61ea005793 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1245,6 +1245,19 @@ void SizeOfAlignOfTypeExpr::Destroy(ASTContext& C) { } //===----------------------------------------------------------------------===// +// ExprIterator. +//===----------------------------------------------------------------------===// + +Expr* ExprIterator::operator[](size_t idx) { return cast<Expr>(I[idx]); } +Expr* ExprIterator::operator*() const { return cast<Expr>(*I); } +Expr* ExprIterator::operator->() const { return cast<Expr>(*I); } +const Expr* ConstExprIterator::operator[](size_t idx) const { + return cast<Expr>(I[idx]); +} +const Expr* ConstExprIterator::operator*() const { return cast<Expr>(*I); } +const Expr* ConstExprIterator::operator->() const { return cast<Expr>(*I); } + +//===----------------------------------------------------------------------===// // Child Iterators for iterating over subexpressions/substatements //===----------------------------------------------------------------------===// diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index f30e105b17..9c06807b3b 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -128,6 +128,19 @@ bool Stmt::hasImplicitControlFlow() const { } } +const Expr* AsmStmt::getOutputExpr(unsigned i) const { + return cast<Expr>(Exprs[i]); +} +Expr* AsmStmt::getOutputExpr(unsigned i) { + return cast<Expr>(Exprs[i]); +} +Expr* AsmStmt::getInputExpr(unsigned i) { + return cast<Expr>(Exprs[i + NumOutputs]); +} +const Expr* AsmStmt::getInputExpr(unsigned i) const { + return cast<Expr>(Exprs[i + NumOutputs]); +} + //===----------------------------------------------------------------------===// // Constructors //===----------------------------------------------------------------------===// @@ -279,8 +292,12 @@ Stmt::child_iterator ReturnStmt::child_end() { } // AsmStmt -Stmt::child_iterator AsmStmt::child_begin() { return child_iterator(); } -Stmt::child_iterator AsmStmt::child_end() { return child_iterator(); } +Stmt::child_iterator AsmStmt::child_begin() { + return Exprs.empty() ? 0 : &Exprs[0]; +} +Stmt::child_iterator AsmStmt::child_end() { + return Exprs.empty() ? 0 : &Exprs[0] + Exprs.size(); +} // ObjCAtCatchStmt Stmt::child_iterator ObjCAtCatchStmt::child_begin() { return &SubExprs[0]; } |