From 79317bf4e305ec56e99037670321deaf5c0e6334 Mon Sep 17 00:00:00 2001 From: James Eversole Date: Mon, 27 Jan 2025 08:46:40 -0600 Subject: [PATCH] Use reserved bang sym for env result --- src/Eval.hs | 14 +++++++------- src/Lexer.hs | 4 ++-- src/Main.hs | 2 +- src/Parser.hs | 2 +- src/REPL.hs | 4 ++-- test/Spec.hs | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Eval.hs b/src/Eval.hs index a04695b..dc3b337 100644 --- a/src/Eval.hs +++ b/src/Eval.hs @@ -17,19 +17,19 @@ evalSingle env term "Error: Identifier '" ++ name ++ "' is already defined." | otherwise -> let res = evalAST env body - in Map.insert "__result" res (Map.insert name res env) + in Map.insert "!result" res (Map.insert name res env) | SApp func arg <- term = let res = apply (evalAST env func) (evalAST env arg) - in Map.insert "__result" res env + in Map.insert "!result" res env | SVar name <- term = case Map.lookup name env of Just v -> - Map.insert "__result" v env + Map.insert "!result" v env Nothing -> errorWithoutStackTrace $ "Variable `" ++ name ++ "` not defined\n\ \This error should never occur here. Please report this as an issue." | otherwise = - Map.insert "__result" (evalAST env term) env + Map.insert "!result" (evalAST env term) env evalTricu :: Env -> [TricuAST] -> Env evalTricu env x = go env (reorderDefs env x) @@ -37,7 +37,7 @@ evalTricu env x = go env (reorderDefs env x) go env [] = env go env [x] = let updatedEnv = evalSingle env x - in Map.insert "__result" (result updatedEnv) updatedEnv + in Map.insert "!result" (result updatedEnv) updatedEnv go env (x:xs) = evalTricu (evalSingle env x) xs @@ -180,9 +180,9 @@ depends topDefs (SDef _ _ body) = depends _ _ = Set.empty result :: Env -> T -result r = case Map.lookup "__result" r of +result r = case Map.lookup "!result" r of Just a -> a - Nothing -> errorWithoutStackTrace "No __result field found in provided env" + Nothing -> errorWithoutStackTrace "No !result field found in provided env" mainResult :: Env -> T mainResult r = case Map.lookup "main" r of diff --git a/src/Lexer.hs b/src/Lexer.hs index 284c100..8064099 100644 --- a/src/Lexer.hs +++ b/src/Lexer.hs @@ -23,8 +23,8 @@ identifier = do <|> char '_' <|> char '-' <|> char '?' <|> char '!' <|> char '$' <|> char '#' <|> char '@' <|> char '%' let name = first : rest - if (name == "t" || name == "__result") - then fail "Keywords (`t`, `__result`) cannot be used as an identifier" + if (name == "t" || name == "!result") + then fail "Keywords (`t`, `!result`) cannot be used as an identifier" else return (LIdentifier name) integerLiteral :: Lexer LToken diff --git a/src/Main.hs b/src/Main.hs index 52016da..a7b4a66 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -61,7 +61,7 @@ main = do putStrLn "Welcome to the tricu REPL" putStrLn "You can exit with `CTRL+D` or the `:_exit` command.`" library <- liftIO $ evaluateFile "./lib/base.tri" - repl $ Map.delete "__result" library + repl $ Map.delete "!result" library Evaluate { file = filePaths, form = form } -> do result <- case filePaths of [] -> do diff --git a/src/Parser.hs b/src/Parser.hs index 181c0e0..a8c63f7 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -244,7 +244,7 @@ parseVarM :: ParserM TricuAST parseVarM = do satisfyM (\case LIdentifier _ -> True; _ -> False) >>= \case LIdentifier name - | name == "t" || name == "__result" -> + | name == "t" || name == "!result" -> fail ("Reserved keyword: " ++ name ++ " cannot be assigned.") | otherwise -> pure (SVar name) diff --git a/src/REPL.hs b/src/REPL.hs index b725209..caa89fc 100644 --- a/src/REPL.hs +++ b/src/REPL.hs @@ -34,7 +34,7 @@ repl env = runInputT defaultSettings (loop env) loop env | Just p <- path -> do loadedEnv <- liftIO $ evaluateFileWithContext env (strip p) `catch` \e -> errorHandler env e - loop $ Map.delete "__result" (Map.union loadedEnv env) + loop $ Map.delete "!result" (Map.union loadedEnv env) | Just s <- minput -> do if | take 2 s == "--" -> loop env @@ -47,7 +47,7 @@ repl env = runInputT defaultSettings (loop env) let asts = parseTricu input newEnv = evalTricu env asts if - | Just r <- Map.lookup "__result" newEnv -> do + | Just r <- Map.lookup "!result" newEnv -> do putStrLn $ "tricu > " ++ decodeResult r | otherwise -> return () return newEnv diff --git a/test/Spec.hs b/test/Spec.hs index eb04e6f..1d22b51 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -70,9 +70,9 @@ lexer = testGroup "Lexer Tests" Right i -> i @?= expect , testCase "Error when using invalid characters in identifiers" $ do - case (runParser tricuLexer "" "__result = 5") of + case (runParser tricuLexer "" "!result = 5") of Left _ -> return () - Right _ -> assertFailure "Expected failure when trying to assign the value of __result" + Right _ -> assertFailure "Expected failure when trying to assign the value of !result" ] parser :: TestTree