diff options
| author | Josh Wolfe <thejoshwolfe@gmail.com> | 2015-12-03 12:15:07 -0700 |
|---|---|---|
| committer | Josh Wolfe <thejoshwolfe@gmail.com> | 2015-12-03 12:15:07 -0700 |
| commit | f1aaf1353e12aa39bd6f89588852a1c70e8424b3 (patch) | |
| tree | 38d2f72517dc257ef4f8eb09ff4ae84be0819201 /src/parser.cpp | |
| parent | 6494cf208e8045c58e8ab79fb76e360cec077263 (diff) | |
| download | zig-f1aaf1353e12aa39bd6f89588852a1c70e8424b3.tar.gz zig-f1aaf1353e12aa39bd6f89588852a1c70e8424b3.zip | |
add bool literals
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 24b7cc7790..da58b354a5 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -93,6 +93,8 @@ const char *node_type_str(NodeType node_type) { return "Use"; case NodeTypeVoid: return "Void"; + case NodeTypeBoolLiteral: + return "BoolLiteral"; case NodeTypeIfExpr: return "IfExpr"; case NodeTypeLabel: @@ -256,6 +258,9 @@ void ast_print(AstNode *node, int indent) { case NodeTypeVoid: fprintf(stderr, "%s\n", node_type_str(node->type)); break; + case NodeTypeBoolLiteral: + fprintf(stderr, "%s '%s'\n", node_type_str(node->type), node->data.bool_literal ? "true" : "false"); + break; case NodeTypeIfExpr: fprintf(stderr, "%s\n", node_type_str(node->type)); if (node->data.if_expr.condition) @@ -457,6 +462,12 @@ static AstNode *ast_parse_type(ParseContext *pc, int token_index, int *new_token } else if (token->id == TokenIdKeywordVoid) { node->data.type.type = AstNodeTypeTypePrimitive; buf_init_from_str(&node->data.type.primitive_name, "void"); + } else if (token->id == TokenIdKeywordTrue) { + node->data.type.type = AstNodeTypeTypePrimitive; + buf_init_from_str(&node->data.type.primitive_name, "true"); + } else if (token->id == TokenIdKeywordFalse) { + node->data.type.type = AstNodeTypeTypePrimitive; + buf_init_from_str(&node->data.type.primitive_name, "false"); } else if (token->id == TokenIdSymbol) { node->data.type.type = AstNodeTypeTypePrimitive; ast_buf_from_token(pc, token, &node->data.type.primitive_name); @@ -614,6 +625,16 @@ static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool AstNode *node = ast_create_node(pc, NodeTypeVoid, token); *token_index += 1; return node; + } else if (token->id == TokenIdKeywordTrue) { + AstNode *node = ast_create_node(pc, NodeTypeBoolLiteral, token); + node->data.bool_literal = true; + *token_index += 1; + return node; + } else if (token->id == TokenIdKeywordFalse) { + AstNode *node = ast_create_node(pc, NodeTypeBoolLiteral, token); + node->data.bool_literal = false; + *token_index += 1; + return node; } else if (token->id == TokenIdSymbol) { AstNode *node = ast_create_node(pc, NodeTypeSymbol, token); ast_buf_from_token(pc, token, &node->data.symbol); |
