aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r--src/compiler/parser.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index 388e69a..139a0ff 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -1881,15 +1881,25 @@ ParserNode *parserVariable(LexerNode *node, LexerNode *begin, LexerNode *end,
metadata->value = value;
metadata->name = name;
metadata->type = type;
+ metadata->isComptime = false;
+ metadata->isLazy = false;
LexerNode *flagNode = nameNode - 1;
- if (flagNode >= begin && flagNode->parserNode == NULL &&
- flagNode->token == LEXER_TOKEN_KEYWORD_LAZY) {
- metadata->isLazy = true;
+ while (flagNode >= begin && flagNode->parserNode == NULL) {
+ switch (flagNode->token) {
+ case LEXER_TOKEN_KEYWORD_LAZY:
+ metadata->isLazy = true;
+ break;
+ case LEXER_TOKEN_KEYWORD_COMPTIME:
+ metadata->isComptime = true;
+ break;
+ default:
+ goto AFTER_WHILE;
+ }
flagNode->parserNode = variableNode;
- } else {
- metadata->isLazy = false;
+ flagNode -= 1;
}
+AFTER_WHILE:
variableNode->metadata = metadata;