+/// An expression for an if/then/else combo
+class IfExprAST: public ExprAST {
+ std::unique_ptr<ExprAST> Cond, Then, Else;
+
+public:
+ IfExprAST(std::unique_ptr<ExprAST> Cond,
+ std::unique_ptr<ExprAST> Then,
+ std::unique_ptr<ExprAST> Else)
+ : Cond(std::move(Cond)), Then(std::move(Then)), Else(std::move(Else)) {}
+
+ Value *codegen() override;
+};
+
+/// An expression for a for loop
+class ForExprAST: public ExprAST {
+ std::string VarName;
+ std::unique_ptr<ExprAST> Start, End, Step, Body;
+
+public:
+ ForExprAST(const std::string &VarName,
+ std::unique_ptr<ExprAST> Start,
+ std::unique_ptr<ExprAST> End,
+ std::unique_ptr<ExprAST> Step,
+ std::unique_ptr<ExprAST> Body)
+ : VarName(VarName),
+ Start(std::move(Start)),
+ End(std::move(End)),
+ Step(std::move(Step)),
+ Body(std::move(Body)) {}
+
+ Value *codegen() override;
+};