From 16104446712acf7e381039199eaf39dfa0fcea35 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sat, 1 Nov 2003 19:15:08 +0000 Subject: * Conditions, string equality. --- src/fix-ng/eval.cc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/fix-ng/eval.cc') diff --git a/src/fix-ng/eval.cc b/src/fix-ng/eval.cc index 46bb1f9418..c58a06dff8 100644 --- a/src/fix-ng/eval.cc +++ b/src/fix-ng/eval.cc @@ -106,6 +106,15 @@ Path evalPath(EvalState & state, Expr e) } +bool evalBool(EvalState & state, Expr e) +{ + e = evalExpr(state, e); + if (ATmatch(e, "True")) return true; + else if (ATmatch(e, "False")) return false; + else throw badTerm("expecting a boolean", e); +} + + Expr evalExpr2(EvalState & state, Expr e) { Expr e1, e2, e3, e4; @@ -165,6 +174,21 @@ Expr evalExpr2(EvalState & state, Expr e) if (ATmatch(e, "LetRec()", &e1)) return evalExpr(state, ATmake("Select(Rec(), \"body\")", e1)); + /* Conditionals. */ + if (ATmatch(e, "If(, , )", &e1, &e2, &e3)) { + if (evalBool(state, e1)) + return evalExpr(state, e2); + else + return evalExpr(state, e3); + } + + /* Equality. Just strings for now. */ + if (ATmatch(e, "OpEq(, )", &e1, &e2)) { + string s1 = evalString(state, e1); + string s2 = evalString(state, e2); + return s1 == s2 ? ATmake("True") : ATmake("False"); + } + /* Barf. */ throw badTerm("invalid expression", e); } -- cgit 1.4.1