From 62dffb99e29eba9004ef2764fbdd9b0462de4742 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Thu, 17 Oct 2024 00:36:03 -0600 Subject: Add ContExpression syntax tree. This is for expressions which must be calculatable at compile time. --- src/Language/Fiddle/Parser.hs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/Language/Fiddle/Parser.hs') 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 $ -- cgit