Skip to content

Commit

Permalink
Improved errors for nockma eval (#2585)
Browse files Browse the repository at this point in the history
This is needed if we want to debug nockma in a more sane manner.

Evaluation errors now include an evaluation trace (with source locations
when present). It looks like this:

![image](https://github.com/anoma/juvix/assets/5511599/4a553035-f56e-4f7c-bb69-9a2aeb41afcb)
  • Loading branch information
janmasrovira authored Jan 23, 2024
1 parent 1147e1f commit 8005089
Show file tree
Hide file tree
Showing 12 changed files with 561 additions and 219 deletions.
18 changes: 12 additions & 6 deletions app/Commands/Dev/Nockma/Repl.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Data.String.Interpolate (__i)
import Juvix.Compiler.Nockma.Evaluator (NockEvalError, evalRepl, fromReplTerm, programAssignments)
import Juvix.Compiler.Nockma.Evaluator.Options
import Juvix.Compiler.Nockma.Language
import Juvix.Compiler.Nockma.Pretty (ppPrint)
import Juvix.Compiler.Nockma.Pretty
import Juvix.Compiler.Nockma.Pretty qualified as Nockma
import Juvix.Compiler.Nockma.Translation.FromSource (parseProgramFile, parseReplStatement, parseReplText, parseText)
import Juvix.Parser.Error
Expand Down Expand Up @@ -110,14 +110,20 @@ direction' s = Repline.dontCrash $ do
liftIO (putStrLn (ppPrint p))

readTerm :: String -> Repl (Term Natural)
readTerm s = return (fromMegaParsecError (parseText (strip (pack s))))
readTerm = return . fromMegaParsecError . parseText . strip . pack

readReplTerm :: String -> Repl (Term Natural)
readReplTerm s = do
mprog <- getProgram
let t = run $ runError @NockEvalError (fromReplTerm (programAssignments mprog) (fromMegaParsecError (parseReplText (strip (pack s)))))
let t =
run
. runError @(NockEvalError Natural)
. fromReplTerm (programAssignments mprog)
. fromMegaParsecError
. parseReplText
$ strip (pack s)
case t of
Left e -> error (show e)
Left e -> error (ppTrace e)
Right tv -> return tv

readStatement :: String -> Repl (ReplStatement Natural)
Expand All @@ -137,12 +143,12 @@ evalStatement = \case
. runM
. runReader defaultEvalOptions
. runError @(ErrNockNatural Natural)
. runError @NockEvalError
. runError @(NockEvalError Natural)
$ evalRepl (putStrLn . Nockma.ppTrace) prog s t
case et of
Left e -> error (show e)
Right ev -> case ev of
Left e -> error (show e)
Left e -> error (ppTrace e)
Right res -> liftIO (putStrLn (ppPrint res))

replCommand :: String -> Repl ()
Expand Down
Loading

0 comments on commit 8005089

Please sign in to comment.