aboutsummaryrefslogtreecommitdiff
path: root/src/parser/parser.c
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-31 17:55:16 +0200
committerhachem <im@hachem.wtf>2026-08-31 17:55:16 +0200
commitcbdb9073480c3e4d8a088b306c23406cf42e25c0 (patch)
tree39f3093654cc8f27ea701ed1338cac84d93f42eb /src/parser/parser.c
parent53aed3fadf1f7ad66dea9a8a0b46bf42eda921be (diff)
feat: hex/binary integer literals and constant-folding const expressions
Diffstat (limited to 'src/parser/parser.c')
-rw-r--r--src/parser/parser.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/parser/parser.c b/src/parser/parser.c
index 969ed86..87dedbd 100644
--- a/src/parser/parser.c
+++ b/src/parser/parser.c
@@ -52,6 +52,8 @@ static bool consume(struct Parser* parser, enum TokenType type, const char* mess
return false;
}
+static struct Expr* parse_expression(struct Parser* parser);
+
static bool parse_const(struct Parser* parser, struct Program* program)
{
struct ConstDecl decl;
@@ -63,9 +65,9 @@ static bool parse_const(struct Parser* parser, struct Program* program)
if (!consume(parser, TOKEN_EQUAL, "expected '=' after constant name"))
return false;
- if (!consume(parser, TOKEN_INTEGER, "expected integer value after '='"))
+ decl.value = parse_expression(parser);
+ if (decl.value == NULL)
return false;
- decl.value = parser->previous;
add_const(program, decl);
return true;