summaryrefslogtreecommitdiff
path: root/src/Parser.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-01-19 20:01:05 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2025-01-19 22:18:26 +0100
commit340d408024980bddac83971dbef7d6a17c407382 (patch)
tree1413d32097dde665b314a388a1d48d5b8279ad5d /src/Parser.hs
parent4547c9887353c6486873876e18f29ae91a5c84b4 (diff)
Export declarationHEADmaster
Diffstat (limited to 'src/Parser.hs')
-rw-r--r--src/Parser.hs24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/Parser.hs b/src/Parser.hs
index e23b277..00f6f3e 100644
--- a/src/Parser.hs
+++ b/src/Parser.hs
@@ -43,8 +43,8 @@ parseTestDefinition = label "test definition" $ toplevel ToplevelTest $ do
wsymbol "test"
lexeme $ TL.toStrict <$> takeWhileP (Just "test name") (/=':')
-parseDefinition :: TestParser Toplevel
-parseDefinition = label "symbol definition" $ toplevel ToplevelDefinition $ do
+parseDefinition :: TestParser ( VarName, SomeExpr )
+parseDefinition = label "symbol definition" $ do
def <- localState $ L.indentBlock scn $ do
wsymbol "def"
name <- varName
@@ -94,6 +94,19 @@ parseDefinition = label "symbol definition" $ toplevel ToplevelDefinition $ do
replaceArgs (SomeExpr e) = SomeExpr (go unif e)
e -> e
+parseExport :: TestParser [ Toplevel ]
+parseExport = label "export declaration" $ toplevel id $ do
+ wsymbol "export"
+ choice
+ [ do
+ def@( name, _ ) <- parseDefinition
+ return [ ToplevelDefinition def, ToplevelExport name ]
+ , do
+ names <- listOf varName
+ void eol
+ return $ map ToplevelExport names
+ ]
+
parseTestModule :: FilePath -> TestParser Module
parseTestModule absPath = do
moduleName <- choice
@@ -110,9 +123,10 @@ parseTestModule absPath = do
, do
return $ [ T.pack $ takeBaseName absPath ]
]
- toplevels <- many $ choice
- [ parseTestDefinition
- , parseDefinition
+ toplevels <- fmap concat $ many $ choice
+ [ (: []) <$> parseTestDefinition
+ , (: []) <$> toplevel ToplevelDefinition parseDefinition
+ , parseExport
]
let moduleTests = catMaybes $ map (\case ToplevelTest x -> Just x; _ -> Nothing) toplevels
moduleDefinitions = catMaybes $ map (\case ToplevelDefinition x -> Just x; _ -> Nothing) toplevels