| 458 | | reduceSyn "if" [cond, bodyIf, bodyElse] = do |
| 459 | | vbool <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| 460 | | vb <- fromVal vbool |
| 461 | | reduce $ if vb then bodyIf else bodyElse |
| 462 | | |
| 463 | | reduceSyn "cond" [cond, bodyIf, bodyElse] = do |
| 464 | | topic <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| 465 | | vb <- fromVal topic |
| 466 | | sub <- fromCodeExp $ if vb then bodyIf else bodyElse |
| 467 | | apply sub Nothing [App (_Var "&VAR") (Just (Val topic)) []] |
| | 458 | reduceSyn name [cond, bodyIf, bodyElse] |
| | 459 | | "if" <- name = doCond id |
| | 460 | | "unless" <- name = doCond not |
| | 461 | where |
| | 462 | doCond :: (Bool -> Bool) -> Eval Val |
| | 463 | doCond f = do |
| | 464 | vbool <- enterRValue $ enterEvalContext (cxtItem "Bool") cond |
| | 465 | vb <- fromVal vbool |
| | 466 | if (f vb) |
| | 467 | then reduce bodyIf |
| | 468 | else reduce bodyElse |