diff options
author | Camil Staps | 2023-02-17 16:11:00 +0100 |
---|---|---|
committer | Camil Staps | 2023-02-17 16:11:00 +0100 |
commit | 3b73ff6adc67b0d1e07e6be4ba7712c22d7a7e77 (patch) | |
tree | 17d253f6cf87f4f3c9a2e979fd2230c998ec88de /snug-clean/src/Snug/Compile.icl | |
parent | Add 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.icl | 10 |
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) = |