add a new ImaginaryLiteral AST node that is used to
represent imaginary literals:
float _Complex A;
void foo() {
A = 1.0iF;
}
generates:
(BinaryOperator 0x2305ec0 '_Complex float' '='
(DeclRefExpr 0x2305e60 '_Complex float' Decl='A' 0x2305cf0)
(ImaginaryLiteral 0x2305f40 '_Complex float'
(FloatingLiteral 0x2305ea0 'float' 1.000000))))
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41413 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/Expr.cpp b/AST/Expr.cpp
index 535e1ef..0f6ac74 100644
--- a/AST/Expr.cpp
+++ b/AST/Expr.cpp
@@ -738,6 +738,14 @@
Stmt::child_iterator FloatingLiteral::child_begin() { return NULL; }
Stmt::child_iterator FloatingLiteral::child_end() { return NULL; }
+// ImaginaryLiteral
+Stmt::child_iterator ImaginaryLiteral::child_begin() {
+ return reinterpret_cast<Stmt**>(&Val);
+}
+Stmt::child_iterator ImaginaryLiteral::child_end() {
+ return reinterpret_cast<Stmt**>(&Val)+1;
+}
+
// StringLiteral
Stmt::child_iterator StringLiteral::child_begin() { return NULL; }
Stmt::child_iterator StringLiteral::child_end() { return NULL; }
@@ -746,122 +754,104 @@
Stmt::child_iterator ParenExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Val);
}
-
Stmt::child_iterator ParenExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Val)+1;
}
// UnaryOperator
Stmt::child_iterator UnaryOperator::child_begin() {
return reinterpret_cast<Stmt**>(&Val);
}
-
Stmt::child_iterator UnaryOperator::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Val)+1;
}
// SizeOfAlignOfTypeExpr
-Stmt::child_iterator SizeOfAlignOfTypeExpr::child_begin() {
- return NULL;
-}
-
-Stmt::child_iterator SizeOfAlignOfTypeExpr::child_end() {
- return NULL;
-}
+Stmt::child_iterator SizeOfAlignOfTypeExpr::child_begin() { return NULL; }
+Stmt::child_iterator SizeOfAlignOfTypeExpr::child_end() { return NULL; }
// ArraySubscriptExpr
Stmt::child_iterator ArraySubscriptExpr::child_begin() {
return reinterpret_cast<Stmt**>(&SubExprs);
}
-
Stmt::child_iterator ArraySubscriptExpr::child_end() {
- return child_begin()+END_EXPR;
+ return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
}
// CallExpr
Stmt::child_iterator CallExpr::child_begin() {
return reinterpret_cast<Stmt**>(&SubExprs);
}
-
Stmt::child_iterator CallExpr::child_end() {
- return child_begin()+NumArgs+ARGS_START;
+ return reinterpret_cast<Stmt**>(&SubExprs)+NumArgs+ARGS_START;
}
// MemberExpr
Stmt::child_iterator MemberExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Base);
}
-
Stmt::child_iterator MemberExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Base)+1;
}
// OCUVectorElementExpr
Stmt::child_iterator OCUVectorElementExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Base);
}
-
Stmt::child_iterator OCUVectorElementExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Base)+1;
}
// CompoundLiteralExpr
Stmt::child_iterator CompoundLiteralExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Init);
}
-
Stmt::child_iterator CompoundLiteralExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Init)+1;
}
// ImplicitCastExpr
Stmt::child_iterator ImplicitCastExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Op);
}
-
Stmt::child_iterator ImplicitCastExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Op)+1;
}
// CastExpr
Stmt::child_iterator CastExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Op);
}
-
Stmt::child_iterator CastExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&Op)+1;
}
// BinaryOperator
Stmt::child_iterator BinaryOperator::child_begin() {
return reinterpret_cast<Stmt**>(&SubExprs);
}
-
Stmt::child_iterator BinaryOperator::child_end() {
- return child_begin()+END_EXPR;
+ return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
}
// ConditionalOperator
Stmt::child_iterator ConditionalOperator::child_begin() {
return reinterpret_cast<Stmt**>(&SubExprs);
}
-
Stmt::child_iterator ConditionalOperator::child_end() {
- return child_begin()+END_EXPR;
+ return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
}
// AddrLabelExpr
Stmt::child_iterator AddrLabelExpr::child_begin() { return NULL; }
Stmt::child_iterator AddrLabelExpr::child_end() { return NULL; }
-
// StmtExpr
Stmt::child_iterator StmtExpr::child_begin() {
return reinterpret_cast<Stmt**>(&SubStmt);
}
-
Stmt::child_iterator StmtExpr::child_end() {
- return child_begin()+1;
+ return reinterpret_cast<Stmt**>(&SubStmt)+1;
}
// TypesCompatibleExpr
@@ -874,7 +864,7 @@
}
Stmt::child_iterator ChooseExpr::child_end() {
- return child_begin()+END_EXPR;
+ return reinterpret_cast<Stmt**>(&SubExprs)+END_EXPR;
}
// ObjCStringLiteral