git @ Cat's Eye Technologies Robin / 84839e7
Catch exceptions, propogate them. This is less than fantastic. Chris Pressey 5 years ago
4 changed file(s) with 19 addition(s) and 5 deletion(s). Raw diff Collapse all Expand all
55 A way to evaluate a Robin expression and display it, mainly
66 to make the tests more concise - don't need to say `(display ...)` always.
77
8 Make the Javascript version display all errors.
9
108 Environments as abstract maps, alist->env, env->alist
119
1210 Values of "opaque" type, to support that.
2121 Right topExprs -> do
2222 let env = (mergeEnvs robinIntrinsics robinBuiltins)
2323 let (env', reactors, results) = TopLevel.collect topExprs env [] []
24 setProp resultElem "textContent" $ (foldl (\a x -> x ++ "\n" ++ a) "" (map (show) results))
24 setProp resultElem "textContent" $ showResults results
2525 Left problem -> do
2626 setProp resultElem "textContent" $ show $ problem
27 showResults results =
28 (foldl (\a x -> x ++ "\n" ++ a) "" (map (showResult) results))
29 showResult (Right result) = show result
30 showResult (Left result) = "ERROR: " ++ (show result)
88 collect [] env reactors results = (env, reactors, results)
99
1010 collect ((List [Symbol "display", expr]):rest) env reactors results =
11 collect rest env reactors (eval (IEnv stop) env expr id:results)
11 let
12 result = case eval (IEnv catchException) env expr id of
13 e@(List [(Symbol "uncaught-exception"), expr]) -> Left e
14 other -> Right other
15 in
16 collect rest env reactors (result:results)
17 where
18 catchException expr = List [(Symbol "uncaught-exception"), expr]
1219
1320 collect ((List [Symbol "assert", expr]):rest) env reactors results =
1421 case eval (IEnv stop) env expr id of
44 import System.Environment
55 import System.Exit
66
7 import Language.Robin.Expr
78 import Language.Robin.Env (mergeEnvs)
89 import Language.Robin.Parser (parseRobin)
910 import Language.Robin.Intrinsics (robinIntrinsics)
4950
5051
5152 writeResults [] = return ()
52 writeResults (result:results) = do
53 writeResults ((Right result):results) = do
5354 putStrLn $ show result
5455 writeResults results
56 writeResults ((Left (List [(Symbol "uncaught-exception"), expr])):results) =
57 error $ "uncaught exception: " ++ show expr
58 writeResults ((Left expr):results) =
59 error $ show expr
5560
5661
5762 runReactors [] showEvents = return ()