diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-04-11 16:11:58 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-04-11 16:25:13 +0200 |
| commit | 204169f26907828d5310845a94af7c4ffafa6cd0 (patch) | |
| tree | 8b566d3862a59f93498bbae90569f3a674d6038e /src/Parser.hs | |
| parent | e06402099ce256405610d0be64760266f969dcd0 (diff) | |
Tag definition
Diffstat (limited to 'src/Parser.hs')
| -rw-r--r-- | src/Parser.hs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/Parser.hs b/src/Parser.hs index 9f1a0e3..d3b8f73 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -125,13 +125,23 @@ parseAsset href = label "asset definition" $ do modify $ \s -> s { testVars = ( name, ( GlobalVarName (testCurrentModuleName s) name, someExprType expr )) : testVars s } return ( name, expr ) +parseTag :: Pos -> TestParser ( VarName, SomeExpr ) +parseTag _ = label "tag definition" $ do + wsymbol "tag" + name <- constrName + void eol + cmn <- gets testCurrentModuleName + let expr = SomeExpr $ Pure $ Tag cmn name + modify $ \s -> s { testVars = ( name, ( GlobalVarName cmn name, someExprType expr )) : testVars s } + return ( name, expr ) + parseExport :: TestParser [ Toplevel ] parseExport = label "export declaration" $ toplevel id $ do ref <- L.indentLevel wsymbol "export" choice [ do - def@( name, _ ) <- parseDefinition ref <|> parseAsset ref + def@( name, _ ) <- parseDefinition ref <|> parseAsset ref <|> parseTag ref return [ ToplevelDefinition def, ToplevelExport name ] , do names <- listOf varName @@ -168,6 +178,7 @@ parseTestModule absPath = do [ (: []) <$> parseTestDefinition , (: []) <$> toplevel ToplevelDefinition (parseDefinition pos1) , (: []) <$> toplevel ToplevelDefinition (parseAsset pos1) + , (: []) <$> toplevel ToplevelDefinition (parseTag pos1) , parseExport , parseImport ] |