Use Value instead of string in IfAST
diff --git a/parser.go b/parser.go
index 78ac2e7..22437d6 100644
--- a/parser.go
+++ b/parser.go
@@ -235,10 +235,13 @@
 }
 
 func (p *parser) parseIfdef(line string, oplen int) AST {
-	// TODO(ukai): parse expr here.
+	lhs, _, err := parseExpr([]byte(line[oplen+1:]), nil)
+	if err != nil {
+		panic(fmt.Errorf("ifdef parse %s:%d %v", p.mk.filename, p.lineno, err))
+	}
 	ast := &IfAST{
 		op:  line[:oplen],
-		lhs: line[oplen+1:],
+		lhs: lhs,
 	}
 	ast.filename = p.mk.filename
 	ast.lineno = p.lineno
@@ -303,11 +306,20 @@
 
 func (p *parser) parseIfeq(line string, oplen int) AST {
 	op := line[:oplen]
-	lhs, rhs, ok := p.parseEq(strings.TrimSpace(line[oplen+1:]), op)
+	lhsBytes, rhsBytes, ok := p.parseEq(strings.TrimSpace(line[oplen+1:]), op)
 	if !ok {
 		Error(p.mk.filename, p.lineno, `*** invalid syntax in conditional.`)
 	}
 
+	lhs, _, err := parseExpr([]byte(lhsBytes), nil)
+	if err != nil {
+		panic(fmt.Errorf("parse ifeq lhs %s:%d %v", p.mk.filename, p.lineno, err))
+	}
+	rhs, _, err := parseExpr([]byte(rhsBytes), nil)
+	if err != nil {
+		panic(fmt.Errorf("parse ifeq rhs %s:%d %v", p.mk.filename, p.lineno, err))
+	}
+
 	ast := &IfAST{
 		op:  op,
 		lhs: lhs,