diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-01-22 22:42:02 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-01-22 22:42:02 -0700 |
| commit | 0e51c16ef57b3b8239c512d78f0dcafb202be21c (patch) | |
| tree | 17589df96ea0df0ffc5c66eae1d9404fb0a14151 /src/parser.cpp | |
| parent | 523e3b86af44b97bcf68e3eb0956ef297421ee10 (diff) | |
| download | zig-0e51c16ef57b3b8239c512d78f0dcafb202be21c.tar.gz zig-0e51c16ef57b3b8239c512d78f0dcafb202be21c.zip | |
add undefined literal
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 90cabdad21..8370a022b5 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -129,6 +129,8 @@ const char *node_type_str(NodeType node_type) { return "BoolLiteral"; case NodeTypeNullLiteral: return "NullLiteral"; + case NodeTypeUndefinedLiteral: + return "UndefinedLiteral"; case NodeTypeIfBoolExpr: return "IfBoolExpr"; case NodeTypeIfVarExpr: @@ -412,6 +414,9 @@ void ast_print(AstNode *node, int indent) { case NodeTypeContinue: fprintf(stderr, "%s\n", node_type_str(node->type)); break; + case NodeTypeUndefinedLiteral: + fprintf(stderr, "%s\n", node_type_str(node->type)); + break; case NodeTypeAsmExpr: fprintf(stderr, "%s\n", node_type_str(node->type)); break; @@ -1368,7 +1373,7 @@ static AstNode *ast_parse_asm_expr(ParseContext *pc, int *token_index, bool mand /* PrimaryExpression : "Number" | "String" | "CharLiteral" | KeywordLiteral | GroupedExpression | GotoExpression | BlockExpression | "Symbol" | ("@" "Symbol" FnCallExpression) | ArrayType | AsmExpression | ("%." "Symbol") -KeywordLiteral : token(True) | token(False) | token(Null) | token(Break) | token(Continue) +KeywordLiteral : "true" | "false" | "null" | "break" | "continue" | "undefined" */ static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool mandatory) { Token *token = &pc->tokens->at(*token_index); @@ -1410,6 +1415,10 @@ static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool AstNode *node = ast_create_node(pc, NodeTypeContinue, token); *token_index += 1; return node; + } else if (token->id == TokenIdKeywordUndefined) { + AstNode *node = ast_create_node(pc, NodeTypeUndefinedLiteral, token); + *token_index += 1; + return node; } else if (token->id == TokenIdAtSign) { *token_index += 1; Token *name_tok = ast_eat_token(pc, token_index, TokenIdSymbol); @@ -3202,6 +3211,9 @@ void normalize_parent_ptrs(AstNode *node) { case NodeTypeNullLiteral: // none break; + case NodeTypeUndefinedLiteral: + // none + break; case NodeTypeIfBoolExpr: set_field(&node->data.if_bool_expr.condition); set_field(&node->data.if_bool_expr.then_block); |
