summaryrefslogtreecommitdiff
path: root/src/Language/Fiddle/Parser.hs
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-10-17 00:36:03 -0600
committerJosh Rahm <joshuarahm@gmail.com>2024-10-17 00:36:03 -0600
commit62dffb99e29eba9004ef2764fbdd9b0462de4742 (patch)
tree663298cb18eff8f6d7966aba1ec7845d58e19894 /src/Language/Fiddle/Parser.hs
parentc31a34382d6fe1307a0c6fe1710c42f27fe833ca (diff)
downloadfiddle-62dffb99e29eba9004ef2764fbdd9b0462de4742.tar.gz
fiddle-62dffb99e29eba9004ef2764fbdd9b0462de4742.tar.bz2
fiddle-62dffb99e29eba9004ef2764fbdd9b0462de4742.zip
Add ContExpression syntax tree.
This is for expressions which must be calculatable at compile time.
Diffstat (limited to 'src/Language/Fiddle/Parser.hs')
-rw-r--r--src/Language/Fiddle/Parser.hs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/Language/Fiddle/Parser.hs b/src/Language/Fiddle/Parser.hs
index ebbd51b..dea2dd5 100644
--- a/src/Language/Fiddle/Parser.hs
+++ b/src/Language/Fiddle/Parser.hs
@@ -146,7 +146,7 @@ fiddleDeclP = do
<$> name
<*> defer body packageBodyP
KWUsing -> UsingDecl Witness <$> name
- KWLocation -> LocationDecl noQMd <$> ident <*> (tok TokEq >> expressionP)
+ KWLocation -> LocationDecl noQMd <$> ident <*> (tok TokEq >> constExpressionP)
KWBits -> BitsDecl noQMd <$> ident <*> (tok TokColon >> bitTypeP)
KWImport -> ImportDecl <$> importStatementP
KWType ->
@@ -176,7 +176,7 @@ objTypeP = do
recur =
( do
withMeta $ do
- expr <- tok TokLBracket *> expressionP <* tok TokRBracket
+ expr <- tok TokLBracket *> constExpressionP <* tok TokRBracket
recur' <- recur
return (\met base -> recur' (ArrayObjType base expr met))
)
@@ -274,7 +274,7 @@ registerBitsTypeRefP = do
recurP =
( do
withMeta $ do
- expr <- tok TokLBracket *> expressionP <* tok TokRBracket
+ expr <- tok TokLBracket *> constExpressionP <* tok TokRBracket
recur' <- recurP
return (\met base -> recur' (RegisterBitsArray base expr met))
)
@@ -311,6 +311,9 @@ enumConstantDeclP =
(tok KWReserved >> EnumConstantReserved <$> (tok TokEq >> expressionP))
<|> (EnumConstantDecl <$> ident <*> (tok TokEq >> expressionP))
+constExpressionP :: Pa (ConstExpression u)
+constExpressionP = withMeta $ ConstExpression . RightV <$> expressionP
+
expressionP :: Pa (Expression u)
expressionP =
withMeta $