Implement ifeq and ifneq
diff --git a/eval.go b/eval.go
index 4d4c07f..ef4eda0 100644
--- a/eval.go
+++ b/eval.go
@@ -222,20 +222,25 @@
}
func (ev *Evaluator) evalIf(ast *IfAST) {
- var stmts []AST
+ var isTrue bool
switch ast.op {
case "ifdef", "ifndef":
value, _ := ev.getVar(ev.evalExpr(ast.lhs))
- if (value != "") == (ast.op == "ifdef") {
- stmts = ast.trueStmts
- } else {
- stmts = ast.falseStmts
- }
+ isTrue = (value != "") == (ast.op == "ifdef")
case "ifeq", "ifneq":
- panic("TODO")
+ lhs := ev.evalExpr(ast.lhs)
+ rhs := ev.evalExpr(ast.rhs)
+ isTrue = (lhs == rhs) == (ast.op == "ifeq")
default:
panic(fmt.Sprintf("unknown if statement: %q", ast.op))
}
+
+ var stmts []AST
+ if isTrue {
+ stmts = ast.trueStmts
+ } else {
+ stmts = ast.falseStmts
+ }
for _, stmt := range stmts {
ev.eval(stmt)
}