summaryrefslogtreecommitdiff
path: root/tests/Language
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-08-04 12:23:19 +0200
committerEugen Wissner <belka@caraus.de>2024-08-04 12:23:19 +0200
commit9cb9ab536f51978b8251a651d77d955cb8b794e1 (patch)
tree872e398f23726d80afea7079c6951d2d9baccc02 /tests/Language
parent5f8d9abe76187669cd7d4f691a2c40db2b4c8a6f (diff)
downloadelna-9cb9ab536f51978b8251a651d77d955cb8b794e1.tar.gz
Create procedure local symbol table
Diffstat (limited to 'tests/Language')
-rw-r--r--tests/Language/Elna/NameAnalysisSpec.hs31
1 files changed, 30 insertions, 1 deletions
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"