Merge pull request #383 from asarhaddon/ada2tco-do
[jackhill/mal.git] / elm / step8_macros.elm
index f3c8cb8..023d117 100644 (file)
@@ -262,12 +262,7 @@ malEval : List MalExpr -> Eval MalExpr
 malEval args =
     case args of
         [ expr ] ->
-            Eval.withEnv
-                (\env ->
-                    Eval.modifyEnv (Env.jump Env.globalFrameId)
-                        |> Eval.andThen (\_ -> eval expr)
-                        |> Eval.finally (Env.jump env.currentFrameId)
-                )
+            Eval.inGlobal (eval expr)
 
         _ ->
             Eval.fail "unsupported arguments"
@@ -279,7 +274,8 @@ evalApply { frameId, bound, body } =
         (\env ->
             Eval.modifyEnv (Env.enter frameId bound)
                 |> Eval.andThen (\_ -> evalNoApply body)
-                |> Eval.finally (Env.leave env.currentFrameId)
+                |> Eval.finally Env.leave
+                |> Eval.gcPass
         )
 
 
@@ -593,8 +589,6 @@ evalFn args =
                             >> Eval.fromResult
                             >> Eval.map
                                 (\bound ->
-                                    -- TODO : choice Env.enter prematurely?
-                                    -- I think it is needed by the garbage collect..
                                     MalApply
                                         { frameId = frameId
                                         , bound = bound
@@ -708,7 +702,7 @@ print env =
 
 printError : Env -> MalExpr -> String
 printError env expr =
-    "ERR:" ++ (printString env False expr)
+    "Error: " ++ (printString env False expr)
 
 
 {-| Read-Eval-Print.