diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-01-19 20:01:05 +0100 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-01-19 22:18:26 +0100 |
commit | 340d408024980bddac83971dbef7d6a17c407382 (patch) | |
tree | 1413d32097dde665b314a388a1d48d5b8279ad5d /src/Parser.hs | |
parent | 4547c9887353c6486873876e18f29ae91a5c84b4 (diff) |
Diffstat (limited to 'src/Parser.hs')
-rw-r--r-- | src/Parser.hs | 24 |
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 |