aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index f6345265b..4f5c0ef07 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -140,6 +140,7 @@ Array<AstNode *> make_ast_node_array(AstFile *f, isize init_capacity = 8) {
#define AST_NODE_KINDS \
AST_NODE_KIND(Ident, "identifier", Token) \
AST_NODE_KIND(Implicit, "implicit", Token) \
+ AST_NODE_KIND(Undef, "undef", Token) \
AST_NODE_KIND(BasicLit, "basic literal", Token) \
AST_NODE_KIND(BasicDirective, "basic directive", struct { \
Token token; \
@@ -516,6 +517,7 @@ Token ast_node_token(AstNode *node) {
switch (node->kind) {
case AstNode_Ident: return node->Ident;
case AstNode_Implicit: return node->Implicit;
+ case AstNode_Undef: return node->Undef;
case AstNode_BasicLit: return node->BasicLit;
case AstNode_BasicDirective: return node->BasicDirective.token;
case AstNode_ProcLit: return ast_node_token(node->ProcLit.type);
@@ -635,6 +637,7 @@ AstNode *clone_ast_node(gbAllocator a, AstNode *node) {
case AstNode_Invalid: break;
case AstNode_Ident: break;
case AstNode_Implicit: break;
+ case AstNode_Undef: break;
case AstNode_BasicLit: break;
case AstNode_BasicDirective: break;
case AstNode_Ellipsis:
@@ -1073,6 +1076,11 @@ AstNode *ast_implicit(AstFile *f, Token token) {
result->Implicit = token;
return result;
}
+AstNode *ast_undef(AstFile *f, Token token) {
+ AstNode *result = make_ast_node(f, AstNode_Undef);
+ result->Undef = token;
+ return result;
+}
AstNode *ast_basic_lit(AstFile *f, Token basic_lit) {
@@ -2200,6 +2208,9 @@ AstNode *parse_operand(AstFile *f, bool lhs) {
case Token_Ident:
return parse_ident(f);
+ case Token_Undef:
+ return ast_undef(f, expect_token(f, Token_Undef));
+
case Token_context:
return ast_implicit(f, expect_token(f, Token_context));