aboutsummaryrefslogtreecommitdiff
path: root/snug-clean/src/Snug/Compile.icl
diff options
context:
space:
mode:
authorCamil Staps2023-02-17 16:11:00 +0100
committerCamil Staps2023-02-17 16:11:00 +0100
commit3b73ff6adc67b0d1e07e6be4ba7712c22d7a7e77 (patch)
tree17d253f6cf87f4f3c9a2e979fd2230c998ec88de /snug-clean/src/Snug/Compile.icl
parentAdd basic vim support (diff)
Pass errors using MonadFail, avoid aborts
Diffstat (limited to 'snug-clean/src/Snug/Compile.icl')
-rw-r--r--snug-clean/src/Snug/Compile.icl10
1 files changed, 7 insertions, 3 deletions
diff --git a/snug-clean/src/Snug/Compile.icl b/snug-clean/src/Snug/Compile.icl
index 15e2aa8..645c9ed 100644
--- a/snug-clean/src/Snug/Compile.icl
+++ b/snug-clean/src/Snug/Compile.icl
@@ -3,6 +3,7 @@ implementation module Snug.Compile
import StdEnv
import Control.Monad
+import Data.Error
import Data.Func
import Data.List
import qualified Data.Map
@@ -113,9 +114,12 @@ where
label = constructorLabel ns id
compileExpr :: !Namespace !Globals !Locals !Expression -> [Instruction]
-compileExpr ns globals locals expr = simulate [SVRegOffset FrontEvalPtr 0] $
- simulator ns globals locals expr >>|
- indirectAndEval
+compileExpr ns globals locals expr =
+ case simulate [SVRegOffset FrontEvalPtr 0] expr` of
+ Error e -> abort ("Compiling an expression failed: " +++ e +++ "\n")
+ Ok instrs -> instrs
+where
+ expr` = simulator ns globals locals expr >>| indirectAndEval
simulator :: !Namespace !Globals !Locals !Expression -> Simulator ()
simulator _ _ _ (BasicValue bv) =