aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-11-23 17:51:37 -0500
committerAndrew Kelley <andrew@ziglang.org>2019-11-23 17:51:37 -0500
commitf25182f46dd672eb5b10533c67ed462a3e5df999 (patch)
tree142c56629394684cb2d7e15418dbda98ae2fd1a3 /src/parser.cpp
parent7597735badd1f6aa6750f354a7e9c85fec705c55 (diff)
downloadzig-f25182f46dd672eb5b10533c67ed462a3e5df999.tar.gz
zig-f25182f46dd672eb5b10533c67ed462a3e5df999.zip
structs can have fields with type `var`
behavior tests passing now
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 61f3120d0e..429566ecc1 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -848,7 +848,12 @@ static AstNode *ast_parse_container_field(ParseContext *pc) {
AstNode *type_expr = nullptr;
if (eat_token_if(pc, TokenIdColon) != nullptr) {
- type_expr = ast_expect(pc, ast_parse_type_expr);
+ Token *var_tok = eat_token_if(pc, TokenIdKeywordVar);
+ if (var_tok != nullptr) {
+ type_expr = ast_create_node(pc, NodeTypeVarFieldType, var_tok);
+ } else {
+ type_expr = ast_expect(pc, ast_parse_type_expr);
+ }
}
AstNode *align_expr = ast_parse_byte_align(pc);
AstNode *expr = nullptr;
@@ -3163,6 +3168,7 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont
visit_field(&node->data.suspend.block, visit, context);
break;
case NodeTypeEnumLiteral:
+ case NodeTypeVarFieldType:
break;
}
}