From 9cb9ab536f51978b8251a651d77d955cb8b794e1 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sun, 4 Aug 2024 12:23:19 +0200 Subject: Create procedure local symbol table --- tests/Language/Elna/NameAnalysisSpec.hs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'tests/Language') diff --git a/tests/Language/Elna/NameAnalysisSpec.hs b/tests/Language/Elna/NameAnalysisSpec.hs index f0b133e..9d63e74 100644 --- a/tests/Language/Elna/NameAnalysisSpec.hs +++ b/tests/Language/Elna/NameAnalysisSpec.hs @@ -4,7 +4,14 @@ module Language.Elna.NameAnalysisSpec import Data.Text (Text) import Text.Megaparsec (runParser) -import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy) +import Test.Hspec + ( Spec + , describe + , expectationFailure + , it + , shouldBe + , shouldSatisfy + ) import Language.Elna.NameAnalysis (Error(..), nameAnalysis) import Language.Elna.SymbolTable (Info(..), SymbolTable) import qualified Language.Elna.SymbolTable as SymbolTable @@ -47,3 +54,25 @@ spec = describe "nameAnalysis" $ do actual <- nameAnalysisOnText given actual `shouldSatisfy` (expected ==) . fmap (SymbolTable.lookup "C") + + it "puts parameters into the local symbol table" $ do + let given = "proc main(ref param: int) {}" + expected = SymbolTable.enter "param" (VariableInfo intType True) SymbolTable.empty + actual <- nameAnalysisOnText given + + case SymbolTable.lookup "main" <$> actual of + Right lookupResult + | Just (ProcedureInfo localTable _) <- lookupResult -> + localTable `shouldBe` expected + _ -> expectationFailure "Procedure symbol not found" + + it "puts variables into the local symbol table" $ do + let given = "proc main() { var var1: int; }" + expected = SymbolTable.enter "var1" (VariableInfo intType False) SymbolTable.empty + actual <- nameAnalysisOnText given + + case SymbolTable.lookup "main" <$> actual of + Right lookupResult + | Just (ProcedureInfo localTable _) <- lookupResult -> + localTable `shouldBe` expected + _ -> expectationFailure "Procedure symbol not found" -- cgit v1.2.3