diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-10-17 00:36:03 -0600 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-10-17 00:36:03 -0600 |
commit | 62dffb99e29eba9004ef2764fbdd9b0462de4742 (patch) | |
tree | 663298cb18eff8f6d7966aba1ec7845d58e19894 /src/Language/Fiddle/Parser.hs | |
parent | c31a34382d6fe1307a0c6fe1710c42f27fe833ca (diff) | |
download | fiddle-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.hs | 9 |
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 $ |