Commit be737bb5cc

Stevie Hryciw <codroid@gmail.com>
2022-11-04 21:34:10
stage1: delete keywords
Backports 05cf449 to the C++ implementation.
1 parent e7424d5
src/stage1/all_types.hpp
@@ -679,9 +679,6 @@ enum NodeType {
     NodeTypePtrDeref,
     NodeTypeUnwrapOptional,
     NodeTypeUsingNamespace,
-    NodeTypeBoolLiteral,
-    NodeTypeNullLiteral,
-    NodeTypeUndefinedLiteral,
     NodeTypeUnreachable,
     NodeTypeIfBoolExpr,
     NodeTypeWhileExpr,
@@ -1171,10 +1168,6 @@ struct AstNodeEnumLiteral {
     Buf *name;
 };
 
-struct AstNodeBoolLiteral {
-    bool value;
-};
-
 struct AstNodeBreakExpr {
     Buf *name;
     AstNode *expr; // may be null
@@ -1240,7 +1233,6 @@ struct AstNode {
         AstNodeStructField struct_field;
         AstNodeContainerInitExpr container_init_expr;
         AstNodeStructValueField struct_val_field;
-        AstNodeBoolLiteral bool_literal;
         AstNodeBreakExpr break_expr;
         AstNodeContinueExpr continue_expr;
         AstNodeArrayType array_type;
src/stage1/analyze.cpp
@@ -4094,9 +4094,6 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) {
         case NodeTypeIntLiteral:
         case NodeTypeStringLiteral:
         case NodeTypeCharLiteral:
-        case NodeTypeBoolLiteral:
-        case NodeTypeNullLiteral:
-        case NodeTypeUndefinedLiteral:
         case NodeTypeIdentifier:
         case NodeTypePrefixOpExpr:
         case NodeTypePointerType:
src/stage1/astgen.cpp
@@ -3857,12 +3857,6 @@ static Stage1ZirInst *astgen_char_lit(Stage1AstGen *ag, Scope *scope, AstNode *n
     return ir_build_const_uint(ag, scope, node, codepoint);
 }
 
-static Stage1ZirInst *astgen_null_literal(Stage1AstGen *ag, Scope *scope, AstNode *node) {
-    assert(node->type == NodeTypeNullLiteral);
-
-    return ir_build_const_null(ag, scope, node);
-}
-
 static Stage1ZirInst *astgen_identifier(Stage1AstGen *ag, Scope *scope, AstNode *node, LVal lval,
         ResultLoc *result_loc)
 {
@@ -6592,11 +6586,6 @@ static Stage1ZirInst *astgen_for_expr(Stage1AstGen *ag, Scope *parent_scope, Ast
     return ir_lval_wrap(ag, parent_scope, phi, lval, result_loc);
 }
 
-static Stage1ZirInst *astgen_bool_literal(Stage1AstGen *ag, Scope *scope, AstNode *node) {
-    assert(node->type == NodeTypeBoolLiteral);
-    return ir_build_const_bool(ag, scope, node, node->data.bool_literal.value);
-}
-
 static Stage1ZirInst *astgen_enum_literal(Stage1AstGen *ag, Scope *scope, AstNode *node) {
     assert(node->type == NodeTypeEnumLiteral);
     // Currently, stage1 runs astgen for every comptime function call,
@@ -6736,11 +6725,6 @@ static Stage1ZirInst *astgen_anyframe_type(Stage1AstGen *ag, Scope *scope, AstNo
     return ir_build_anyframe_type(ag, scope, node, payload_type_value);
 }
 
-static Stage1ZirInst *astgen_undefined_literal(Stage1AstGen *ag, Scope *scope, AstNode *node) {
-    assert(node->type == NodeTypeUndefinedLiteral);
-    return ir_build_const_undefined(ag, scope, node);
-}
-
 static Stage1ZirInst *astgen_asm_expr(Stage1AstGen *ag, Scope *scope, AstNode *node) {
     assert(node->type == NodeTypeAsmExpr);
     AstNodeAsmExpr *asm_expr = &node->data.asm_expr;
@@ -8063,8 +8047,6 @@ static Stage1ZirInst *astgen_node_raw(Stage1AstGen *ag, AstNode *node, Scope *sc
             Stage1ZirInst *load_ptr = ir_build_load_ptr(ag, scope, node, unwrapped_ptr);
             return ir_expr_wrap(ag, scope, load_ptr, result_loc);
         }
-        case NodeTypeBoolLiteral:
-            return ir_lval_wrap(ag, scope, astgen_bool_literal(ag, scope, node), lval, result_loc);
         case NodeTypeArrayType:
             return ir_lval_wrap(ag, scope, astgen_array_type(ag, scope, node), lval, result_loc);
         case NodeTypePointerType:
@@ -8073,12 +8055,8 @@ static Stage1ZirInst *astgen_node_raw(Stage1AstGen *ag, AstNode *node, Scope *sc
             return ir_lval_wrap(ag, scope, astgen_anyframe_type(ag, scope, node), lval, result_loc);
         case NodeTypeStringLiteral:
             return ir_lval_wrap(ag, scope, astgen_string_literal(ag, scope, node), lval, result_loc);
-        case NodeTypeUndefinedLiteral:
-            return ir_lval_wrap(ag, scope, astgen_undefined_literal(ag, scope, node), lval, result_loc);
         case NodeTypeAsmExpr:
             return ir_lval_wrap(ag, scope, astgen_asm_expr(ag, scope, node), lval, result_loc);
-        case NodeTypeNullLiteral:
-            return ir_lval_wrap(ag, scope, astgen_null_literal(ag, scope, node), lval, result_loc);
         case NodeTypeIfErrorExpr:
             return astgen_if_err_expr(ag, scope, node, lval, result_loc);
         case NodeTypeIfOptional:
@@ -8163,14 +8141,11 @@ static Stage1ZirInst *astgen_node_extra(Stage1AstGen *ag, AstNode *node, Scope *
             case NodeTypeWhileExpr:
             case NodeTypeForExpr:
             case NodeTypeReturnExpr:
-            case NodeTypeBoolLiteral:
             case NodeTypeArrayType:
             case NodeTypePointerType:
             case NodeTypeAnyFrameType:
             case NodeTypeStringLiteral:
-            case NodeTypeUndefinedLiteral:
             case NodeTypeAsmExpr:
-            case NodeTypeNullLiteral:
             case NodeTypeIfErrorExpr:
             case NodeTypeIfOptional:
             case NodeTypeSwitchExpr:
src/stage1/parser.cpp
@@ -1704,32 +1704,10 @@ static AstNode *ast_parse_primary_type_expr(ParseContext *pc) {
         return res;
     }
 
-    TokenIndex false_token = eat_token_if(pc, TokenIdKeywordFalse);
-    if (false_token != 0) {
-        AstNode *res = ast_create_node(pc, NodeTypeBoolLiteral, false_token);
-        res->data.bool_literal.value = false;
-        return res;
-    }
-
-    TokenIndex null = eat_token_if(pc, TokenIdKeywordNull);
-    if (null != 0)
-        return ast_create_node(pc, NodeTypeNullLiteral, null);
-
     TokenIndex anyframe = eat_token_if(pc, TokenIdKeywordAnyFrame);
     if (anyframe != 0)
         return ast_create_node(pc, NodeTypeAnyFrameType, anyframe);
 
-    TokenIndex true_token = eat_token_if(pc, TokenIdKeywordTrue);
-    if (true_token != 0) {
-        AstNode *res = ast_create_node(pc, NodeTypeBoolLiteral, true_token);
-        res->data.bool_literal.value = true;
-        return res;
-    }
-
-    TokenIndex undefined = eat_token_if(pc, TokenIdKeywordUndefined);
-    if (undefined != 0)
-        return ast_create_node(pc, NodeTypeUndefinedLiteral, undefined);
-
     TokenIndex unreachable = eat_token_if(pc, TokenIdKeywordUnreachable);
     if (unreachable != 0)
         return ast_create_node(pc, NodeTypeUnreachable, unreachable);
@@ -3094,15 +3072,6 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont
         case NodeTypeUsingNamespace:
             visit_field(&node->data.using_namespace.expr, visit, context);
             break;
-        case NodeTypeBoolLiteral:
-            // none
-            break;
-        case NodeTypeNullLiteral:
-            // none
-            break;
-        case NodeTypeUndefinedLiteral:
-            // none
-            break;
         case NodeTypeIfBoolExpr:
             visit_field(&node->data.if_bool_expr.condition, visit, context);
             visit_field(&node->data.if_bool_expr.then_block, visit, context);
src/stage1/tokenizer.cpp
@@ -163,7 +163,6 @@ static const struct ZigKeyword zig_keywords[] = {
     {"error", TokenIdKeywordError},
     {"export", TokenIdKeywordExport},
     {"extern", TokenIdKeywordExtern},
-    {"false", TokenIdKeywordFalse},
     {"fn", TokenIdKeywordFn},
     {"for", TokenIdKeywordFor},
     {"if", TokenIdKeywordIf},
@@ -171,7 +170,6 @@ static const struct ZigKeyword zig_keywords[] = {
     {"noalias", TokenIdKeywordNoAlias},
     {"noinline", TokenIdKeywordNoInline},
     {"nosuspend", TokenIdKeywordNoSuspend},
-    {"null", TokenIdKeywordNull},
     {"opaque", TokenIdKeywordOpaque},
     {"or", TokenIdKeywordOr},
     {"orelse", TokenIdKeywordOrElse},
@@ -185,9 +183,7 @@ static const struct ZigKeyword zig_keywords[] = {
     {"switch", TokenIdKeywordSwitch},
     {"test", TokenIdKeywordTest},
     {"threadlocal", TokenIdKeywordThreadLocal},
-    {"true", TokenIdKeywordTrue},
     {"try", TokenIdKeywordTry},
-    {"undefined", TokenIdKeywordUndefined},
     {"union", TokenIdKeywordUnion},
     {"unreachable", TokenIdKeywordUnreachable},
     {"usingnamespace", TokenIdKeywordUsingNamespace},
@@ -1563,7 +1559,6 @@ const char * token_name(TokenId id) {
         case TokenIdKeywordError: return "error";
         case TokenIdKeywordExport: return "export";
         case TokenIdKeywordExtern: return "extern";
-        case TokenIdKeywordFalse: return "false";
         case TokenIdKeywordFn: return "fn";
         case TokenIdKeywordFor: return "for";
         case TokenIdKeywordIf: return "if";
@@ -1571,7 +1566,6 @@ const char * token_name(TokenId id) {
         case TokenIdKeywordNoAlias: return "noalias";
         case TokenIdKeywordNoInline: return "noinline";
         case TokenIdKeywordNoSuspend: return "nosuspend";
-        case TokenIdKeywordNull: return "null";
         case TokenIdKeywordOpaque: return "opaque";
         case TokenIdKeywordOr: return "or";
         case TokenIdKeywordOrElse: return "orelse";
@@ -1583,9 +1577,7 @@ const char * token_name(TokenId id) {
         case TokenIdKeywordSwitch: return "switch";
         case TokenIdKeywordTest: return "test";
         case TokenIdKeywordThreadLocal: return "threadlocal";
-        case TokenIdKeywordTrue: return "true";
         case TokenIdKeywordTry: return "try";
-        case TokenIdKeywordUndefined: return "undefined";
         case TokenIdKeywordUnion: return "union";
         case TokenIdKeywordUnreachable: return "unreachable";
         case TokenIdKeywordUsingNamespace: return "usingnamespace";
src/stage1/tokenizer.hpp
@@ -72,7 +72,6 @@ enum TokenId : uint8_t {
     TokenIdKeywordError,
     TokenIdKeywordExport,
     TokenIdKeywordExtern,
-    TokenIdKeywordFalse,
     TokenIdKeywordFn,
     TokenIdKeywordFor,
     TokenIdKeywordIf,
@@ -81,7 +80,6 @@ enum TokenId : uint8_t {
     TokenIdKeywordLinkSection,
     TokenIdKeywordNoAlias,
     TokenIdKeywordNoSuspend,
-    TokenIdKeywordNull,
     TokenIdKeywordOpaque,
     TokenIdKeywordOr,
     TokenIdKeywordOrElse,
@@ -94,9 +92,7 @@ enum TokenId : uint8_t {
     TokenIdKeywordSwitch,
     TokenIdKeywordTest,
     TokenIdKeywordThreadLocal,
-    TokenIdKeywordTrue,
     TokenIdKeywordTry,
-    TokenIdKeywordUndefined,
     TokenIdKeywordUnion,
     TokenIdKeywordUnreachable,
     TokenIdKeywordUsingNamespace,