diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-04-19 22:03:43 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-04-21 12:16:36 +0200 |
commit | 57671619f81dbdcafa1fce4f91956bc647a57588 (patch) | |
tree | 503804091c0da13fd10ac53d42f49060ba913f0b /src/Parser.hs | |
parent | baa086bd025ce49a75d8cc9d64d24615ab960357 (diff) |
Diffstat (limited to 'src/Parser.hs')
-rw-r--r-- | src/Parser.hs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/Parser.hs b/src/Parser.hs index 4bb32a7..4afca09 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -26,6 +26,7 @@ import System.Exit import System.FilePath import System.IO.Error +import Asset import Network import Parser.Core import Parser.Expr @@ -98,12 +99,25 @@ parseDefinition = label "symbol definition" $ do replaceArgs (SomeExpr e) = SomeExpr (go unif e) e -> e +parseAsset :: TestParser ( VarName, SomeExpr ) +parseAsset = label "asset definition" $ do + wsymbol "asset" + name <- varName + osymbol ":" + void eol + ref <- L.indentGuard scn GT pos1 + wsymbol "path" + osymbol ":" + assetPath <- AssetPath . TL.unpack <$> takeWhile1P Nothing (/= '\n') + void $ L.indentGuard scn LT ref + return ( name, SomeExpr $ Pure Asset {..} ) + parseExport :: TestParser [ Toplevel ] parseExport = label "export declaration" $ toplevel id $ do wsymbol "export" choice [ do - def@( name, _ ) <- parseDefinition + def@( name, _ ) <- parseDefinition <|> parseAsset return [ ToplevelDefinition def, ToplevelExport name ] , do names <- listOf varName @@ -139,6 +153,7 @@ parseTestModule absPath = do toplevels <- fmap concat $ many $ choice [ (: []) <$> parseTestDefinition , (: []) <$> toplevel ToplevelDefinition parseDefinition + , (: []) <$> toplevel ToplevelDefinition parseAsset , parseExport , parseImport ] |