authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-08-28 10:54:14-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-08-28 12:10:55-07:00
log05cf44933d753f7a5a53ab289ea60fd43761de57
tree41c6fd4776628161769f26161baa36d77ba1c47c
parent6a6e2cd64f3ebb1919dd0ac53d8a1f29c56e6ec2

stage2: delete keywords `true`, `false`, `undefined`, `null`

The grammar does not need these as keywords; they are merely primitives provided by the language the same as `void`, `u32`, etc.

8 files changed, 28 insertions(+), 125 deletions(-)

doc/docgen.zig+14-15
......@@ -887,16 +887,6 @@ fn tokenizeAndPrintRaw(
887887 next_tok_is_fn = true;
888888 },
889889
890 .keyword_undefined,
891 .keyword_null,
892 .keyword_true,
893 .keyword_false,
894 => {
895 try out.writeAll("<span class=\"tok-null\">");
896 try writeEscaped(out, src[token.loc.start..token.loc.end]);
897 try out.writeAll("</span>");
898 },
899
900890 .string_literal,
901891 .multiline_string_literal_line,
902892 .char_literal,
......@@ -921,9 +911,18 @@ fn tokenizeAndPrintRaw(
921911 },
922912
923913 .identifier => {
924 if (prev_tok_was_fn) {
914 const tok_bytes = src[token.loc.start..token.loc.end];
915 if (mem.eql(u8, tok_bytes, "undefined") or
916 mem.eql(u8, tok_bytes, "null") or
917 mem.eql(u8, tok_bytes, "true") or
918 mem.eql(u8, tok_bytes, "false"))
919 {
920 try out.writeAll("<span class=\"tok-null\">");
921 try writeEscaped(out, tok_bytes);
922 try out.writeAll("</span>");
923 } else if (prev_tok_was_fn) {
925924 try out.writeAll("<span class=\"tok-fn\">");
926 try writeEscaped(out, src[token.loc.start..token.loc.end]);
925 try writeEscaped(out, tok_bytes);
927926 try out.writeAll("</span>");
928927 } else {
929928 const is_int = blk: {
......@@ -938,12 +937,12 @@ fn tokenizeAndPrintRaw(
938937 }
939938 break :blk true;
940939 };
941 if (is_int or isType(src[token.loc.start..token.loc.end])) {
940 if (is_int or isType(tok_bytes)) {
942941 try out.writeAll("<span class=\"tok-type\">");
943 try writeEscaped(out, src[token.loc.start..token.loc.end]);
942 try writeEscaped(out, tok_bytes);
944943 try out.writeAll("</span>");
945944 } else {
946 try writeEscaped(out, src[token.loc.start..token.loc.end]);
945 try writeEscaped(out, tok_bytes);
947946 }
948947 }
949948 },
doc/langref.html.in+4-12
......@@ -11564,11 +11564,7 @@ PrimaryTypeExpr
1156411564 / INTEGER
1156511565 / KEYWORD_comptime TypeExpr
1156611566 / KEYWORD_error DOT IDENTIFIER
11567 / KEYWORD_false
11568 / KEYWORD_null
1156911567 / KEYWORD_anyframe
11570 / KEYWORD_true
11571 / KEYWORD_undefined
1157211568 / KEYWORD_unreachable
1157311569 / STRINGLITERAL
1157411570 / SwitchExpr
......@@ -11937,7 +11933,6 @@ KEYWORD_errdefer &lt;- 'errdefer' end_of_word
1193711933KEYWORD_error &lt;- 'error' end_of_word
1193811934KEYWORD_export &lt;- 'export' end_of_word
1193911935KEYWORD_extern &lt;- 'extern' end_of_word
11940KEYWORD_false &lt;- 'false' end_of_word
1194111936KEYWORD_fn &lt;- 'fn' end_of_word
1194211937KEYWORD_for &lt;- 'for' end_of_word
1194311938KEYWORD_if &lt;- 'if' end_of_word
......@@ -11945,7 +11940,6 @@ KEYWORD_inline &lt;- 'inline' end_of_word
1194511940KEYWORD_noalias &lt;- 'noalias' end_of_word
1194611941KEYWORD_nosuspend &lt;- 'nosuspend' end_of_word
1194711942KEYWORD_noinline &lt;- 'noinline' end_of_word
11948KEYWORD_null &lt;- 'null' end_of_word
1194911943KEYWORD_opaque &lt;- 'opaque' end_of_word
1195011944KEYWORD_or &lt;- 'or' end_of_word
1195111945KEYWORD_orelse &lt;- 'orelse' end_of_word
......@@ -11959,9 +11953,7 @@ KEYWORD_suspend &lt;- 'suspend' end_of_word
1195911953KEYWORD_switch &lt;- 'switch' end_of_word
1196011954KEYWORD_test &lt;- 'test' end_of_word
1196111955KEYWORD_threadlocal &lt;- 'threadlocal' end_of_word
11962KEYWORD_true &lt;- 'true' end_of_word
1196311956KEYWORD_try &lt;- 'try' end_of_word
11964KEYWORD_undefined &lt;- 'undefined' end_of_word
1196511957KEYWORD_union &lt;- 'union' end_of_word
1196611958KEYWORD_unreachable &lt;- 'unreachable' end_of_word
1196711959KEYWORD_usingnamespace &lt;- 'usingnamespace' end_of_word
......@@ -11974,13 +11966,13 @@ keyword &lt;- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe
1197411966 / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime
1197511967 / KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else
1197611968 / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export
11977 / KEYWORD_extern / KEYWORD_false / KEYWORD_fn / KEYWORD_for / KEYWORD_if
11969 / KEYWORD_extern / KEYWORD_fn / KEYWORD_for / KEYWORD_if
1197811970 / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline
11979 / KEYWORD_null / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed
11971 / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed
1198011972 / KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection
1198111973 / KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch
11982 / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try
11983 / KEYWORD_undefined / KEYWORD_union / KEYWORD_unreachable
11974 / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_try
11975 / KEYWORD_union / KEYWORD_unreachable
1198411976 / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while
1198511977</code></pre>
1198611978 {#header_close#}
lib/std/zig/ast.zig-16
......@@ -346,10 +346,6 @@ pub const Tree = struct {
346346 .char_literal,
347347 .integer_literal,
348348 .float_literal,
349 .false_literal,
350 .true_literal,
351 .null_literal,
352 .undefined_literal,
353349 .unreachable_literal,
354350 .string_literal,
355351 .multiline_string_literal,
......@@ -711,10 +707,6 @@ pub const Tree = struct {
711707 .char_literal,
712708 .integer_literal,
713709 .float_literal,
714 .false_literal,
715 .true_literal,
716 .null_literal,
717 .undefined_literal,
718710 .unreachable_literal,
719711 .identifier,
720712 .deref,
......@@ -2757,14 +2749,6 @@ pub const Node = struct {
27572749 /// Both lhs and rhs unused.
27582750 float_literal,
27592751 /// Both lhs and rhs unused.
2760 false_literal,
2761 /// Both lhs and rhs unused.
2762 true_literal,
2763 /// Both lhs and rhs unused.
2764 null_literal,
2765 /// Both lhs and rhs unused.
2766 undefined_literal,
2767 /// Both lhs and rhs unused.
27682752 unreachable_literal,
27692753 /// Both lhs and rhs unused.
27702754 /// Most identifiers will not have explicit AST nodes, however for expressions
lib/std/zig/parse.zig-36
......@@ -2226,11 +2226,7 @@ const Parser = struct {
22262226 /// / INTEGER
22272227 /// / KEYWORD_comptime TypeExpr
22282228 /// / KEYWORD_error DOT IDENTIFIER
2229 /// / KEYWORD_false
2230 /// / KEYWORD_null
22312229 /// / KEYWORD_anyframe
2232 /// / KEYWORD_true
2233 /// / KEYWORD_undefined
22342230 /// / KEYWORD_unreachable
22352231 /// / STRINGLITERAL
22362232 /// / SwitchExpr
......@@ -2273,38 +2269,6 @@ const Parser = struct {
22732269 .rhs = undefined,
22742270 },
22752271 }),
2276 .keyword_false => return p.addNode(.{
2277 .tag = .false_literal,
2278 .main_token = p.nextToken(),
2279 .data = .{
2280 .lhs = undefined,
2281 .rhs = undefined,
2282 },
2283 }),
2284 .keyword_true => return p.addNode(.{
2285 .tag = .true_literal,
2286 .main_token = p.nextToken(),
2287 .data = .{
2288 .lhs = undefined,
2289 .rhs = undefined,
2290 },
2291 }),
2292 .keyword_null => return p.addNode(.{
2293 .tag = .null_literal,
2294 .main_token = p.nextToken(),
2295 .data = .{
2296 .lhs = undefined,
2297 .rhs = undefined,
2298 },
2299 }),
2300 .keyword_undefined => return p.addNode(.{
2301 .tag = .undefined_literal,
2302 .main_token = p.nextToken(),
2303 .data = .{
2304 .lhs = undefined,
2305 .rhs = undefined,
2306 },
2307 }),
23082272 .keyword_unreachable => return p.addNode(.{
23092273 .tag = .unreachable_literal,
23102274 .main_token = p.nextToken(),
lib/std/zig/render.zig-4
......@@ -187,11 +187,7 @@ fn renderExpression(gpa: *Allocator, ais: *Ais, tree: ast.Tree, node: ast.Node.I
187187 .integer_literal,
188188 .float_literal,
189189 .char_literal,
190 .true_literal,
191 .false_literal,
192 .null_literal,
193190 .unreachable_literal,
194 .undefined_literal,
195191 .anyframe_literal,
196192 .string_literal,
197193 => return renderToken(ais, tree, main_tokens[node], space),
lib/std/zig/tokenizer.zig-12
......@@ -32,7 +32,6 @@ pub const Token = struct {
3232 .{ "error", .keyword_error },
3333 .{ "export", .keyword_export },
3434 .{ "extern", .keyword_extern },
35 .{ "false", .keyword_false },
3635 .{ "fn", .keyword_fn },
3736 .{ "for", .keyword_for },
3837 .{ "if", .keyword_if },
......@@ -40,7 +39,6 @@ pub const Token = struct {
4039 .{ "noalias", .keyword_noalias },
4140 .{ "noinline", .keyword_noinline },
4241 .{ "nosuspend", .keyword_nosuspend },
43 .{ "null", .keyword_null },
4442 .{ "opaque", .keyword_opaque },
4543 .{ "or", .keyword_or },
4644 .{ "orelse", .keyword_orelse },
......@@ -54,9 +52,7 @@ pub const Token = struct {
5452 .{ "switch", .keyword_switch },
5553 .{ "test", .keyword_test },
5654 .{ "threadlocal", .keyword_threadlocal },
57 .{ "true", .keyword_true },
5855 .{ "try", .keyword_try },
59 .{ "undefined", .keyword_undefined },
6056 .{ "union", .keyword_union },
6157 .{ "unreachable", .keyword_unreachable },
6258 .{ "usingnamespace", .keyword_usingnamespace },
......@@ -157,7 +153,6 @@ pub const Token = struct {
157153 keyword_error,
158154 keyword_export,
159155 keyword_extern,
160 keyword_false,
161156 keyword_fn,
162157 keyword_for,
163158 keyword_if,
......@@ -165,7 +160,6 @@ pub const Token = struct {
165160 keyword_noalias,
166161 keyword_noinline,
167162 keyword_nosuspend,
168 keyword_null,
169163 keyword_opaque,
170164 keyword_or,
171165 keyword_orelse,
......@@ -179,9 +173,7 @@ pub const Token = struct {
179173 keyword_switch,
180174 keyword_test,
181175 keyword_threadlocal,
182 keyword_true,
183176 keyword_try,
184 keyword_undefined,
185177 keyword_union,
186178 keyword_unreachable,
187179 keyword_usingnamespace,
......@@ -280,7 +272,6 @@ pub const Token = struct {
280272 .keyword_error => "error",
281273 .keyword_export => "export",
282274 .keyword_extern => "extern",
283 .keyword_false => "false",
284275 .keyword_fn => "fn",
285276 .keyword_for => "for",
286277 .keyword_if => "if",
......@@ -288,7 +279,6 @@ pub const Token = struct {
288279 .keyword_noalias => "noalias",
289280 .keyword_noinline => "noinline",
290281 .keyword_nosuspend => "nosuspend",
291 .keyword_null => "null",
292282 .keyword_opaque => "opaque",
293283 .keyword_or => "or",
294284 .keyword_orelse => "orelse",
......@@ -302,9 +292,7 @@ pub const Token = struct {
302292 .keyword_switch => "switch",
303293 .keyword_test => "test",
304294 .keyword_threadlocal => "threadlocal",
305 .keyword_true => "true",
306295 .keyword_try => "try",
307 .keyword_undefined => "undefined",
308296 .keyword_union => "union",
309297 .keyword_unreachable => "unreachable",
310298 .keyword_usingnamespace => "usingnamespace",
src/AstGen.zig-20
......@@ -370,10 +370,6 @@ fn lvalExpr(gz: *GenZir, scope: *Scope, node: ast.Node.Index) InnerError!Zir.Ins
370370 .bool_not,
371371 .address_of,
372372 .float_literal,
373 .undefined_literal,
374 .true_literal,
375 .false_literal,
376 .null_literal,
377373 .optional_type,
378374 .block,
379375 .block_semicolon,
......@@ -759,10 +755,6 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr
759755 const result = try expr(gz, scope, .ref, node_datas[node].lhs);
760756 return rvalue(gz, rl, result, node);
761757 },
762 .undefined_literal => return rvalue(gz, rl, .undef, node),
763 .true_literal => return rvalue(gz, rl, .bool_true, node),
764 .false_literal => return rvalue(gz, rl, .bool_false, node),
765 .null_literal => return rvalue(gz, rl, .null_value, node),
766758 .optional_type => {
767759 const operand = try typeExpr(gz, scope, node_datas[node].lhs);
768760 const result = try gz.addUnNode(.optional_type, operand, node);
......@@ -7852,10 +7844,6 @@ fn nodeMayNeedMemoryLocation(tree: *const ast.Tree, start_node: ast.Node.Index)
78527844 .string_literal,
78537845 .multiline_string_literal,
78547846 .char_literal,
7855 .true_literal,
7856 .false_literal,
7857 .null_literal,
7858 .undefined_literal,
78597847 .unreachable_literal,
78607848 .identifier,
78617849 .error_set_decl,
......@@ -8092,10 +8080,6 @@ fn nodeMayEvalToError(tree: *const ast.Tree, start_node: ast.Node.Index) enum {
80928080 .string_literal,
80938081 .multiline_string_literal,
80948082 .char_literal,
8095 .true_literal,
8096 .false_literal,
8097 .null_literal,
8098 .undefined_literal,
80998083 .unreachable_literal,
81008084 .error_set_decl,
81018085 .container_decl,
......@@ -8265,10 +8249,6 @@ fn nodeImpliesRuntimeBits(tree: *const ast.Tree, start_node: ast.Node.Index) boo
82658249 .string_literal,
82668250 .multiline_string_literal,
82678251 .char_literal,
8268 .true_literal,
8269 .false_literal,
8270 .null_literal,
8271 .undefined_literal,
82728252 .unreachable_literal,
82738253 .identifier,
82748254 .error_set_decl,
src/translate_c/ast.zig+10-10
......@@ -928,23 +928,23 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {
928928 return renderCall(c, lhs, payload.args);
929929 },
930930 .null_literal => return c.addNode(.{
931 .tag = .null_literal,
932 .main_token = try c.addToken(.keyword_null, "null"),
931 .tag = .identifier,
932 .main_token = try c.addToken(.identifier, "null"),
933933 .data = undefined,
934934 }),
935935 .undefined_literal => return c.addNode(.{
936 .tag = .undefined_literal,
937 .main_token = try c.addToken(.keyword_undefined, "undefined"),
936 .tag = .identifier,
937 .main_token = try c.addToken(.identifier, "undefined"),
938938 .data = undefined,
939939 }),
940940 .true_literal => return c.addNode(.{
941 .tag = .true_literal,
942 .main_token = try c.addToken(.keyword_true, "true"),
941 .tag = .identifier,
942 .main_token = try c.addToken(.identifier, "true"),
943943 .data = undefined,
944944 }),
945945 .false_literal => return c.addNode(.{
946 .tag = .false_literal,
947 .main_token = try c.addToken(.keyword_false, "false"),
946 .tag = .identifier,
947 .main_token = try c.addToken(.identifier, "false"),
948948 .data = undefined,
949949 }),
950950 .zero_literal => return c.addNode(.{
......@@ -1599,8 +1599,8 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {
15991599 const while_tok = try c.addToken(.keyword_while, "while");
16001600 _ = try c.addToken(.l_paren, "(");
16011601 const cond = try c.addNode(.{
1602 .tag = .true_literal,
1603 .main_token = try c.addToken(.keyword_true, "true"),
1602 .tag = .identifier,
1603 .main_token = try c.addToken(.identifier, "true"),
16041604 .data = undefined,
16051605 });
16061606 _ = try c.addToken(.r_paren, ")");