summaryrefslogtreecommitdiff
path: root/src/Parser.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-04-11 16:11:58 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-04-11 16:25:13 +0200
commit204169f26907828d5310845a94af7c4ffafa6cd0 (patch)
tree8b566d3862a59f93498bbae90569f3a674d6038e /src/Parser.hs
parente06402099ce256405610d0be64760266f969dcd0 (diff)
Tag definition
Diffstat (limited to 'src/Parser.hs')
-rw-r--r--src/Parser.hs13
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
]