git @ Cat's Eye Technologies Robin / 3987144
Evaluate to abort values in Env, fix QuickCheck tests for aborts. Chris Pressey 4 years ago
4 changed file(s) with 11 addition(s) and 5 deletion(s). Raw diff Collapse all Expand all
1717 entry = List [Symbol s, value]
1818 in
1919 List (entry:bindings)
20 insert s value term = errMsg "expected-env-list" term
2021
2122 find :: String -> Env -> Maybe Expr
2223 find _ (List []) = Nothing
3233
3334 mergeEnvs :: Env -> Env -> Env
3435 mergeEnvs (List a) (List b) = (List (a ++ b))
36 mergeEnvs (List a) term = errMsg "expected-env-list" term
37 mergeEnvs term (List b) = errMsg "expected-env-list" term
5454 -- Helper functions
5555 --
5656
57 errMsg msg term =
58 Abort (List [(Symbol msg), term])
59
6057 makeMacro :: Expr -> Expr -> Expr -> Evaluable
6158 makeMacro defineTimeEnv formals body =
6259 \callTimeEnv actuals ->
5151 append (List x) (List y) =
5252 List (x ++ y)
5353
54 errMsg msg term =
55 Abort (List [(Symbol msg), term])
56
5457 --
5558 -- Predicates
5659 --
1212 import qualified Language.Robin.CmdLine as CmdLine
1313
1414
15 stdEval env expr = eval env expr id
15 stdEval env expr = eval env expr
1616
1717
1818 instance Arbitrary Expr where
3232 (Positive m) <- arbitrary
3333 let n' = n `div` (m + 1)
3434 oneof [
35 Abort <$> (arbExpr n'),
35 -- Abort <$> (arbExpr n'), -- NOTE lots of identities don't hold for abort
3636 List <$> (arbExprList n')
3737 -- TODO Operator ??
3838 ]
159159
160160
161161 testSecondaryDefEnv (List []) env = return ()
162 testSecondaryDefEnv (List (List [Symbol "multiply", secondaryDef]:rest)) env = do
163 putStrLn $ "--- Skipping multiply..."
164 testSecondaryDefEnv (List rest) env
162165 testSecondaryDefEnv (List (List [Symbol name, secondaryDef]:rest)) env = do
163166 let Just primaryDef = find name env
164167 putStrLn $ "Comparing multiple definitions of " ++ name ++ "..."