authorgravatar for me@tadeo.caTadeo Kondrak <me@tadeo.ca> 2020-08-30 17:18:25-06:00
committergravatar for me@tadeo.caTadeo Kondrak <me@tadeo.ca> 2020-08-30 17:18:25-06:00
logd3e5105eccaa1149a90f8d640d7f5cf90dd46bca
treed65fc4e587639610ca17b700d256f934aa24e1a8
parente4b61aa527f7ea06943bab720f672dd435b9dfba
signaturelock-open Commit is signed but in an unrecognized format.

std.zig.ast: make getTrailer/setTrailer private and add getters/setters


7 files changed, 288 insertions(+), 100 deletions(-)

lib/std/zig/ast.zig+213-25
......@@ -915,18 +915,106 @@ pub const Node = struct {
915915 init_node: *Node,
916916 });
917917
918 pub fn getDocComments(self: *const VarDecl) ?*DocComment {
919 return self.getTrailer(.doc_comments);
920 }
921
922 pub fn setDocComments(self: *VarDecl, value: *DocComment) void {
923 self.setTrailer(.doc_comments, value);
924 }
925
926 pub fn getVisibToken(self: *const VarDecl) ?TokenIndex {
927 return self.getTrailer(.visib_token);
928 }
929
930 pub fn setVisibToken(self: *VarDecl, value: TokenIndex) void {
931 self.setTrailer(.visib_token, value);
932 }
933
934 pub fn getThreadLocalToken(self: *const VarDecl) ?TokenIndex {
935 return self.getTrailer(.thread_local_token);
936 }
937
938 pub fn setThreadLocalToken(self: *VarDecl, value: TokenIndex) void {
939 self.setTrailer(.thread_local_token, value);
940 }
941
942 pub fn getEqToken(self: *const VarDecl) ?TokenIndex {
943 return self.getTrailer(.eq_token);
944 }
945
946 pub fn setEqToken(self: *VarDecl, value: TokenIndex) void {
947 self.setTrailer(.eq_token, value);
948 }
949
950 pub fn getComptimeToken(self: *const VarDecl) ?TokenIndex {
951 return self.getTrailer(.comptime_token);
952 }
953
954 pub fn setComptimeToken(self: *VarDecl, value: TokenIndex) void {
955 self.setTrailer(.comptime_token, value);
956 }
957
958 pub fn getExternExportToken(self: *const VarDecl) ?TokenIndex {
959 return self.getTrailer(.extern_export_token);
960 }
961
962 pub fn setExternExportToken(self: *VarDecl, value: TokenIndex) void {
963 self.setTrailer(.extern_export_token, value);
964 }
965
966 pub fn getLibName(self: *const VarDecl) ?*Node {
967 return self.getTrailer(.lib_name);
968 }
969
970 pub fn setLibName(self: *VarDecl, value: *Node) void {
971 self.setTrailer(.lib_name, value);
972 }
973
974 pub fn getTypeNode(self: *const VarDecl) ?*Node {
975 return self.getTrailer(.type_node);
976 }
977
978 pub fn setTypeNode(self: *VarDecl, value: *Node) void {
979 self.setTrailer(.type_node, value);
980 }
981
982 pub fn getAlignNode(self: *const VarDecl) ?*Node {
983 return self.getTrailer(.align_node);
984 }
985
986 pub fn setAlignNode(self: *VarDecl, value: *Node) void {
987 self.setTrailer(.align_node, value);
988 }
989
990 pub fn getSectionNode(self: *const VarDecl) ?*Node {
991 return self.getTrailer(.section_node);
992 }
993
994 pub fn setSectionNode(self: *VarDecl, value: *Node) void {
995 self.setTrailer(.section_node, value);
996 }
997
998 pub fn getInitNode(self: *const VarDecl) ?*Node {
999 return self.getTrailer(.init_node);
1000 }
1001
1002 pub fn setInitNode(self: *VarDecl, value: *Node) void {
1003 self.setTrailer(.init_node, value);
1004 }
1005
9181006 pub const RequiredFields = struct {
9191007 mut_token: TokenIndex,
9201008 name_token: TokenIndex,
9211009 semicolon_token: TokenIndex,
9221010 };
9231011
924 pub fn getTrailer(self: *const VarDecl, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) {
1012 fn getTrailer(self: *const VarDecl, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) {
9251013 const trailers_start = @ptrCast([*]const u8, self) + @sizeOf(VarDecl);
9261014 return self.trailer_flags.get(trailers_start, field);
9271015 }
9281016
929 pub fn setTrailer(self: *VarDecl, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void {
1017 fn setTrailer(self: *VarDecl, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void {
9301018 const trailers_start = @ptrCast([*]u8, self) + @sizeOf(VarDecl);
9311019 self.trailer_flags.set(trailers_start, field, value);
9321020 }
......@@ -954,22 +1042,22 @@ pub const Node = struct {
9541042 pub fn iterate(self: *const VarDecl, index: usize) ?*Node {
9551043 var i = index;
9561044
957 if (self.getTrailer(.type_node)) |type_node| {
1045 if (self.getTypeNode()) |type_node| {
9581046 if (i < 1) return type_node;
9591047 i -= 1;
9601048 }
9611049
962 if (self.getTrailer(.align_node)) |align_node| {
1050 if (self.getAlignNode()) |align_node| {
9631051 if (i < 1) return align_node;
9641052 i -= 1;
9651053 }
9661054
967 if (self.getTrailer(.section_node)) |section_node| {
1055 if (self.getSectionNode()) |section_node| {
9681056 if (i < 1) return section_node;
9691057 i -= 1;
9701058 }
9711059
972 if (self.getTrailer(.init_node)) |init_node| {
1060 if (self.getInitNode()) |init_node| {
9731061 if (i < 1) return init_node;
9741062 i -= 1;
9751063 }
......@@ -978,11 +1066,11 @@ pub const Node = struct {
9781066 }
9791067
9801068 pub fn firstToken(self: *const VarDecl) TokenIndex {
981 if (self.getTrailer(.visib_token)) |visib_token| return visib_token;
982 if (self.getTrailer(.thread_local_token)) |thread_local_token| return thread_local_token;
983 if (self.getTrailer(.comptime_token)) |comptime_token| return comptime_token;
984 if (self.getTrailer(.extern_export_token)) |extern_export_token| return extern_export_token;
985 assert(self.getTrailer(.lib_name) == null);
1069 if (self.getVisibToken()) |visib_token| return visib_token;
1070 if (self.getThreadLocalToken()) |thread_local_token| return thread_local_token;
1071 if (self.getComptimeToken()) |comptime_token| return comptime_token;
1072 if (self.getExternExportToken()) |extern_export_token| return extern_export_token;
1073 assert(self.getLibName() == null);
9861074 return self.mut_token;
9871075 }
9881076
......@@ -1320,17 +1408,109 @@ pub const Node = struct {
13201408 std.debug.print("{*} flags: {b} name_token: {} {*} params_len: {}\n", .{
13211409 self,
13221410 self.trailer_flags.bits,
1323 self.getTrailer(.name_token),
1411 self.getNameToken(),
13241412 self.trailer_flags.ptrConst(trailers_start, .name_token),
13251413 self.params_len,
13261414 });
13271415 }
13281416
1329 pub fn body(self: *const FnProto) ?*Node {
1417 pub fn getDocComments(self: *const FnProto) ?*DocComment {
1418 return self.getTrailer(.doc_comments);
1419 }
1420
1421 pub fn setDocComments(self: *FnProto, value: *DocComment) void {
1422 self.setTrailer(.doc_comments, value);
1423 }
1424
1425 pub fn getBodyNode(self: *const FnProto) ?*Node {
13301426 return self.getTrailer(.body_node);
13311427 }
13321428
1333 pub fn getTrailer(self: *const FnProto, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) {
1429 pub fn setBodyNode(self: *FnProto, value: *Node) void {
1430 self.setTrailer(.body_node, value);
1431 }
1432
1433 pub fn getLibName(self: *const FnProto) ?*Node {
1434 return self.getTrailer(.lib_name);
1435 }
1436
1437 pub fn setLibName(self: *FnProto, value: *Node) void {
1438 self.setTrailer(.lib_name, value);
1439 }
1440
1441 pub fn getAlignExpr(self: *const FnProto) ?*Node {
1442 return self.getTrailer(.align_expr);
1443 }
1444
1445 pub fn setAlignExpr(self: *FnProto, value: *Node) void {
1446 self.setTrailer(.align_expr, value);
1447 }
1448
1449 pub fn getSectionExpr(self: *const FnProto) ?*Node {
1450 return self.getTrailer(.section_expr);
1451 }
1452
1453 pub fn setSectionExpr(self: *FnProto, value: *Node) void {
1454 self.setTrailer(.section_expr, value);
1455 }
1456
1457 pub fn getCallconvExpr(self: *const FnProto) ?*Node {
1458 return self.getTrailer(.callconv_expr);
1459 }
1460
1461 pub fn setCallconvExpr(self: *FnProto, value: *Node) void {
1462 self.setTrailer(.callconv_expr, value);
1463 }
1464
1465 pub fn getVisibToken(self: *const FnProto) ?TokenIndex {
1466 return self.getTrailer(.visib_token);
1467 }
1468
1469 pub fn setVisibToken(self: *FnProto, value: TokenIndex) void {
1470 self.setTrailer(.visib_token, value);
1471 }
1472
1473 pub fn getNameToken(self: *const FnProto) ?TokenIndex {
1474 return self.getTrailer(.name_token);
1475 }
1476
1477 pub fn setNameToken(self: *FnProto, value: TokenIndex) void {
1478 self.setTrailer(.name_token, value);
1479 }
1480
1481 pub fn getVarArgsToken(self: *const FnProto) ?TokenIndex {
1482 return self.getTrailer(.var_args_token);
1483 }
1484
1485 pub fn setVarArgsToken(self: *FnProto, value: TokenIndex) void {
1486 self.setTrailer(.var_args_token, value);
1487 }
1488
1489 pub fn getExternExportInlineToken(self: *const FnProto) ?TokenIndex {
1490 return self.getTrailer(.extern_export_inline_token);
1491 }
1492
1493 pub fn setExternExportInlineToken(self: *FnProto, value: TokenIndex) void {
1494 self.setTrailer(.extern_export_inline_token, value);
1495 }
1496
1497 pub fn getIsExternPrototype(self: *const FnProto) ?void {
1498 return self.getTrailer(.is_extern_prototype);
1499 }
1500
1501 pub fn setIsExternPrototype(self: *FnProto, value: void) void {
1502 self.setTrailer(.is_extern_prototype, value);
1503 }
1504
1505 pub fn getIsAsync(self: *const FnProto) ?void {
1506 return self.getTrailer(.is_async);
1507 }
1508
1509 pub fn setIsAsync(self: *FnProto, value: void) void {
1510 self.setTrailer(.is_async, value);
1511 }
1512
1513 fn getTrailer(self: *const FnProto, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) {
13341514 const trailers_start = @alignCast(
13351515 @alignOf(ParamDecl),
13361516 @ptrCast([*]const u8, self) + @sizeOf(FnProto) + @sizeOf(ParamDecl) * self.params_len,
......@@ -1338,7 +1518,7 @@ pub const Node = struct {
13381518 return self.trailer_flags.get(trailers_start, field);
13391519 }
13401520
1341 pub fn setTrailer(self: *FnProto, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void {
1521 fn setTrailer(self: *FnProto, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void {
13421522 const trailers_start = @alignCast(
13431523 @alignOf(ParamDecl),
13441524 @ptrCast([*]u8, self) + @sizeOf(FnProto) + @sizeOf(ParamDecl) * self.params_len,
......@@ -1376,7 +1556,7 @@ pub const Node = struct {
13761556 pub fn iterate(self: *const FnProto, index: usize) ?*Node {
13771557 var i = index;
13781558
1379 if (self.getTrailer(.lib_name)) |lib_name| {
1559 if (self.getLibName()) |lib_name| {
13801560 if (i < 1) return lib_name;
13811561 i -= 1;
13821562 }
......@@ -1394,12 +1574,12 @@ pub const Node = struct {
13941574 }
13951575 i -= params_len;
13961576
1397 if (self.getTrailer(.align_expr)) |align_expr| {
1577 if (self.getAlignExpr()) |align_expr| {
13981578 if (i < 1) return align_expr;
13991579 i -= 1;
14001580 }
14011581
1402 if (self.getTrailer(.section_expr)) |section_expr| {
1582 if (self.getSectionExpr()) |section_expr| {
14031583 if (i < 1) return section_expr;
14041584 i -= 1;
14051585 }
......@@ -1412,7 +1592,7 @@ pub const Node = struct {
14121592 .Invalid => {},
14131593 }
14141594
1415 if (self.body()) |body_node| {
1595 if (self.getBodyNode()) |body_node| {
14161596 if (i < 1) return body_node;
14171597 i -= 1;
14181598 }
......@@ -1421,14 +1601,14 @@ pub const Node = struct {
14211601 }
14221602
14231603 pub fn firstToken(self: *const FnProto) TokenIndex {
1424 if (self.getTrailer(.visib_token)) |visib_token| return visib_token;
1425 if (self.getTrailer(.extern_export_inline_token)) |extern_export_inline_token| return extern_export_inline_token;
1426 assert(self.getTrailer(.lib_name) == null);
1604 if (self.getVisibToken()) |visib_token| return visib_token;
1605 if (self.getExternExportInlineToken()) |extern_export_inline_token| return extern_export_inline_token;
1606 assert(self.getLibName() == null);
14271607 return self.fn_token;
14281608 }
14291609
14301610 pub fn lastToken(self: *const FnProto) TokenIndex {
1431 if (self.body()) |body_node| return body_node.lastToken();
1611 if (self.getBodyNode()) |body_node| return body_node.lastToken();
14321612 switch (self.return_type) {
14331613 .Explicit, .InferErrorSet => |node| return node.lastToken(),
14341614 .Invalid => |tok| return tok,
......@@ -2676,16 +2856,24 @@ pub const Node = struct {
26762856 return self.getTrailer(.rhs);
26772857 }
26782858
2859 pub fn setRHS(self: *ControlFlowExpression, value: *Node) void {
2860 self.setTrailer(.rhs, value);
2861 }
2862
26792863 pub fn getLabel(self: *const ControlFlowExpression) ?TokenIndex {
26802864 return self.getTrailer(.label);
26812865 }
26822866
2683 pub fn getTrailer(self: *const ControlFlowExpression, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) {
2867 pub fn setLabel(self: *ControlFlowExpression, value: TokenIndex) void {
2868 self.setTrailer(.label, value);
2869 }
2870
2871 fn getTrailer(self: *const ControlFlowExpression, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) {
26842872 const trailers_start = @ptrCast([*]const u8, self) + @sizeOf(ControlFlowExpression);
26852873 return self.trailer_flags.get(trailers_start, field);
26862874 }
26872875
2688 pub fn setTrailer(self: *ControlFlowExpression, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void {
2876 fn setTrailer(self: *ControlFlowExpression, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void {
26892877 const trailers_start = @ptrCast([*]u8, self) + @sizeOf(ControlFlowExpression);
26902878 self.trailer_flags.set(trailers_start, field, value);
26912879 }
lib/std/zig/render.zig+38-38
......@@ -232,9 +232,9 @@ fn renderContainerDecl(allocator: *mem.Allocator, stream: anytype, tree: *ast.Tr
232232 .FnProto => {
233233 const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", decl);
234234
235 try renderDocComments(tree, stream, fn_proto, fn_proto.getTrailer(.doc_comments), indent, start_col);
235 try renderDocComments(tree, stream, fn_proto, fn_proto.getDocComments(), indent, start_col);
236236
237 if (fn_proto.getTrailer(.body_node)) |body_node| {
237 if (fn_proto.getBodyNode()) |body_node| {
238238 try renderExpression(allocator, stream, tree, indent, start_col, decl, .Space);
239239 try renderExpression(allocator, stream, tree, indent, start_col, body_node, space);
240240 } else {
......@@ -257,7 +257,7 @@ fn renderContainerDecl(allocator: *mem.Allocator, stream: anytype, tree: *ast.Tr
257257 .VarDecl => {
258258 const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", decl);
259259
260 try renderDocComments(tree, stream, var_decl, var_decl.getTrailer(.doc_comments), indent, start_col);
260 try renderDocComments(tree, stream, var_decl, var_decl.getDocComments(), indent, start_col);
261261 try renderVarDecl(allocator, stream, tree, indent, start_col, var_decl);
262262 },
263263
......@@ -1520,23 +1520,23 @@ fn renderExpression(
15201520 .FnProto => {
15211521 const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", base);
15221522
1523 if (fn_proto.getTrailer(.visib_token)) |visib_token_index| {
1523 if (fn_proto.getVisibToken()) |visib_token_index| {
15241524 const visib_token = tree.token_ids[visib_token_index];
15251525 assert(visib_token == .Keyword_pub or visib_token == .Keyword_export);
15261526
15271527 try renderToken(tree, stream, visib_token_index, indent, start_col, Space.Space); // pub
15281528 }
15291529
1530 if (fn_proto.getTrailer(.extern_export_inline_token)) |extern_export_inline_token| {
1531 if (fn_proto.getTrailer(.is_extern_prototype) == null)
1530 if (fn_proto.getExternExportInlineToken()) |extern_export_inline_token| {
1531 if (fn_proto.getIsExternPrototype() == null)
15321532 try renderToken(tree, stream, extern_export_inline_token, indent, start_col, Space.Space); // extern/export/inline
15331533 }
15341534
1535 if (fn_proto.getTrailer(.lib_name)) |lib_name| {
1535 if (fn_proto.getLibName()) |lib_name| {
15361536 try renderExpression(allocator, stream, tree, indent, start_col, lib_name, Space.Space);
15371537 }
15381538
1539 const lparen = if (fn_proto.getTrailer(.name_token)) |name_token| blk: {
1539 const lparen = if (fn_proto.getNameToken()) |name_token| blk: {
15401540 try renderToken(tree, stream, fn_proto.fn_token, indent, start_col, Space.Space); // fn
15411541 try renderToken(tree, stream, name_token, indent, start_col, Space.None); // name
15421542 break :blk tree.nextToken(name_token);
......@@ -1549,11 +1549,11 @@ fn renderExpression(
15491549 const rparen = tree.prevToken(
15501550 // the first token for the annotation expressions is the left
15511551 // parenthesis, hence the need for two prevToken
1552 if (fn_proto.getTrailer(.align_expr)) |align_expr|
1552 if (fn_proto.getAlignExpr()) |align_expr|
15531553 tree.prevToken(tree.prevToken(align_expr.firstToken()))
1554 else if (fn_proto.getTrailer(.section_expr)) |section_expr|
1554 else if (fn_proto.getSectionExpr()) |section_expr|
15551555 tree.prevToken(tree.prevToken(section_expr.firstToken()))
1556 else if (fn_proto.getTrailer(.callconv_expr)) |callconv_expr|
1556 else if (fn_proto.getCallconvExpr()) |callconv_expr|
15571557 tree.prevToken(tree.prevToken(callconv_expr.firstToken()))
15581558 else switch (fn_proto.return_type) {
15591559 .Explicit => |node| node.firstToken(),
......@@ -1574,12 +1574,12 @@ fn renderExpression(
15741574 for (fn_proto.params()) |param_decl, i| {
15751575 try renderParamDecl(allocator, stream, tree, indent, start_col, param_decl, Space.None);
15761576
1577 if (i + 1 < fn_proto.params_len or fn_proto.getTrailer(.var_args_token) != null) {
1577 if (i + 1 < fn_proto.params_len or fn_proto.getVarArgsToken() != null) {
15781578 const comma = tree.nextToken(param_decl.lastToken());
15791579 try renderToken(tree, stream, comma, indent, start_col, Space.Space); // ,
15801580 }
15811581 }
1582 if (fn_proto.getTrailer(.var_args_token)) |var_args_token| {
1582 if (fn_proto.getVarArgsToken()) |var_args_token| {
15831583 try renderToken(tree, stream, var_args_token, indent, start_col, Space.None);
15841584 }
15851585 } else {
......@@ -1591,7 +1591,7 @@ fn renderExpression(
15911591 try stream.writeByteNTimes(' ', new_indent);
15921592 try renderParamDecl(allocator, stream, tree, new_indent, start_col, param_decl, Space.Comma);
15931593 }
1594 if (fn_proto.getTrailer(.var_args_token)) |var_args_token| {
1594 if (fn_proto.getVarArgsToken()) |var_args_token| {
15951595 try stream.writeByteNTimes(' ', new_indent);
15961596 try renderToken(tree, stream, var_args_token, new_indent, start_col, Space.Comma);
15971597 }
......@@ -1600,7 +1600,7 @@ fn renderExpression(
16001600
16011601 try renderToken(tree, stream, rparen, indent, start_col, Space.Space); // )
16021602
1603 if (fn_proto.getTrailer(.align_expr)) |align_expr| {
1603 if (fn_proto.getAlignExpr()) |align_expr| {
16041604 const align_rparen = tree.nextToken(align_expr.lastToken());
16051605 const align_lparen = tree.prevToken(align_expr.firstToken());
16061606 const align_kw = tree.prevToken(align_lparen);
......@@ -1611,7 +1611,7 @@ fn renderExpression(
16111611 try renderToken(tree, stream, align_rparen, indent, start_col, Space.Space); // )
16121612 }
16131613
1614 if (fn_proto.getTrailer(.section_expr)) |section_expr| {
1614 if (fn_proto.getSectionExpr()) |section_expr| {
16151615 const section_rparen = tree.nextToken(section_expr.lastToken());
16161616 const section_lparen = tree.prevToken(section_expr.firstToken());
16171617 const section_kw = tree.prevToken(section_lparen);
......@@ -1622,7 +1622,7 @@ fn renderExpression(
16221622 try renderToken(tree, stream, section_rparen, indent, start_col, Space.Space); // )
16231623 }
16241624
1625 if (fn_proto.getTrailer(.callconv_expr)) |callconv_expr| {
1625 if (fn_proto.getCallconvExpr()) |callconv_expr| {
16261626 const callconv_rparen = tree.nextToken(callconv_expr.lastToken());
16271627 const callconv_lparen = tree.prevToken(callconv_expr.firstToken());
16281628 const callconv_kw = tree.prevToken(callconv_lparen);
......@@ -1631,9 +1631,9 @@ fn renderExpression(
16311631 try renderToken(tree, stream, callconv_lparen, indent, start_col, Space.None); // (
16321632 try renderExpression(allocator, stream, tree, indent, start_col, callconv_expr, Space.None);
16331633 try renderToken(tree, stream, callconv_rparen, indent, start_col, Space.Space); // )
1634 } else if (fn_proto.getTrailer(.is_extern_prototype) != null) {
1634 } else if (fn_proto.getIsExternPrototype() != null) {
16351635 try stream.writeAll("callconv(.C) ");
1636 } else if (fn_proto.getTrailer(.is_async) != null) {
1636 } else if (fn_proto.getIsAsync() != null) {
16371637 try stream.writeAll("callconv(.Async) ");
16381638 }
16391639
......@@ -2221,69 +2221,69 @@ fn renderVarDecl(
22212221 start_col: *usize,
22222222 var_decl: *ast.Node.VarDecl,
22232223) (@TypeOf(stream).Error || Error)!void {
2224 if (var_decl.getTrailer(.visib_token)) |visib_token| {
2224 if (var_decl.getVisibToken()) |visib_token| {
22252225 try renderToken(tree, stream, visib_token, indent, start_col, Space.Space); // pub
22262226 }
22272227
2228 if (var_decl.getTrailer(.extern_export_token)) |extern_export_token| {
2228 if (var_decl.getExternExportToken()) |extern_export_token| {
22292229 try renderToken(tree, stream, extern_export_token, indent, start_col, Space.Space); // extern
22302230
2231 if (var_decl.getTrailer(.lib_name)) |lib_name| {
2231 if (var_decl.getLibName()) |lib_name| {
22322232 try renderExpression(allocator, stream, tree, indent, start_col, lib_name, Space.Space); // "lib"
22332233 }
22342234 }
22352235
2236 if (var_decl.getTrailer(.comptime_token)) |comptime_token| {
2236 if (var_decl.getComptimeToken()) |comptime_token| {
22372237 try renderToken(tree, stream, comptime_token, indent, start_col, Space.Space); // comptime
22382238 }
22392239
2240 if (var_decl.getTrailer(.thread_local_token)) |thread_local_token| {
2240 if (var_decl.getThreadLocalToken()) |thread_local_token| {
22412241 try renderToken(tree, stream, thread_local_token, indent, start_col, Space.Space); // threadlocal
22422242 }
22432243 try renderToken(tree, stream, var_decl.mut_token, indent, start_col, Space.Space); // var
22442244
2245 const name_space = if (var_decl.getTrailer(.type_node) == null and
2246 (var_decl.getTrailer(.align_node) != null or
2247 var_decl.getTrailer(.section_node) != null or
2248 var_decl.getTrailer(.init_node) != null))
2245 const name_space = if (var_decl.getTypeNode() == null and
2246 (var_decl.getAlignNode() != null or
2247 var_decl.getSectionNode() != null or
2248 var_decl.getInitNode() != null))
22492249 Space.Space
22502250 else
22512251 Space.None;
22522252 try renderToken(tree, stream, var_decl.name_token, indent, start_col, name_space);
22532253
2254 if (var_decl.getTrailer(.type_node)) |type_node| {
2254 if (var_decl.getTypeNode()) |type_node| {
22552255 try renderToken(tree, stream, tree.nextToken(var_decl.name_token), indent, start_col, Space.Space);
2256 const s = if (var_decl.getTrailer(.align_node) != null or
2257 var_decl.getTrailer(.section_node) != null or
2258 var_decl.getTrailer(.init_node) != null) Space.Space else Space.None;
2256 const s = if (var_decl.getAlignNode() != null or
2257 var_decl.getSectionNode() != null or
2258 var_decl.getInitNode() != null) Space.Space else Space.None;
22592259 try renderExpression(allocator, stream, tree, indent, start_col, type_node, s);
22602260 }
22612261
2262 if (var_decl.getTrailer(.align_node)) |align_node| {
2262 if (var_decl.getAlignNode()) |align_node| {
22632263 const lparen = tree.prevToken(align_node.firstToken());
22642264 const align_kw = tree.prevToken(lparen);
22652265 const rparen = tree.nextToken(align_node.lastToken());
22662266 try renderToken(tree, stream, align_kw, indent, start_col, Space.None); // align
22672267 try renderToken(tree, stream, lparen, indent, start_col, Space.None); // (
22682268 try renderExpression(allocator, stream, tree, indent, start_col, align_node, Space.None);
2269 const s = if (var_decl.getTrailer(.section_node) != null or var_decl.getTrailer(.init_node) != null) Space.Space else Space.None;
2269 const s = if (var_decl.getSectionNode() != null or var_decl.getInitNode() != null) Space.Space else Space.None;
22702270 try renderToken(tree, stream, rparen, indent, start_col, s); // )
22712271 }
22722272
2273 if (var_decl.getTrailer(.section_node)) |section_node| {
2273 if (var_decl.getSectionNode()) |section_node| {
22742274 const lparen = tree.prevToken(section_node.firstToken());
22752275 const section_kw = tree.prevToken(lparen);
22762276 const rparen = tree.nextToken(section_node.lastToken());
22772277 try renderToken(tree, stream, section_kw, indent, start_col, Space.None); // linksection
22782278 try renderToken(tree, stream, lparen, indent, start_col, Space.None); // (
22792279 try renderExpression(allocator, stream, tree, indent, start_col, section_node, Space.None);
2280 const s = if (var_decl.getTrailer(.init_node) != null) Space.Space else Space.None;
2280 const s = if (var_decl.getInitNode() != null) Space.Space else Space.None;
22812281 try renderToken(tree, stream, rparen, indent, start_col, s); // )
22822282 }
22832283
2284 if (var_decl.getTrailer(.init_node)) |init_node| {
2284 if (var_decl.getInitNode()) |init_node| {
22852285 const s = if (init_node.tag == .MultilineStringLiteral) Space.None else Space.Space;
2286 try renderToken(tree, stream, var_decl.getTrailer(.eq_token).?, indent, start_col, s); // =
2286 try renderToken(tree, stream, var_decl.getEqToken().?, indent, start_col, s); // =
22872287 try renderExpression(allocator, stream, tree, indent, start_col, init_node, Space.None);
22882288 }
22892289
src-self-hosted/Module.zig+23-23
......@@ -1256,8 +1256,8 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool {
12561256 };
12571257 defer fn_type_scope.instructions.deinit(self.gpa);
12581258
1259 decl.is_pub = fn_proto.getTrailer(.visib_token) != null;
1260 const body_node = fn_proto.getTrailer(.body_node) orelse
1259 decl.is_pub = fn_proto.getVisibToken() != null;
1260 const body_node = fn_proto.getBodyNode() orelse
12611261 return self.failTok(&fn_type_scope.base, fn_proto.fn_token, "TODO implement extern functions", .{});
12621262
12631263 const param_decls = fn_proto.params();
......@@ -1276,19 +1276,19 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool {
12761276 };
12771277 param_types[i] = try astgen.expr(self, &fn_type_scope.base, type_type_rl, param_type_node);
12781278 }
1279 if (fn_proto.getTrailer(.var_args_token)) |var_args_token| {
1279 if (fn_proto.getVarArgsToken()) |var_args_token| {
12801280 return self.failTok(&fn_type_scope.base, var_args_token, "TODO implement var args", .{});
12811281 }
1282 if (fn_proto.getTrailer(.lib_name)) |lib_name| {
1282 if (fn_proto.getLibName()) |lib_name| {
12831283 return self.failNode(&fn_type_scope.base, lib_name, "TODO implement function library name", .{});
12841284 }
1285 if (fn_proto.getTrailer(.align_expr)) |align_expr| {
1285 if (fn_proto.getAlignExpr()) |align_expr| {
12861286 return self.failNode(&fn_type_scope.base, align_expr, "TODO implement function align expression", .{});
12871287 }
1288 if (fn_proto.getTrailer(.section_expr)) |sect_expr| {
1288 if (fn_proto.getSectionExpr()) |sect_expr| {
12891289 return self.failNode(&fn_type_scope.base, sect_expr, "TODO implement function section expression", .{});
12901290 }
1291 if (fn_proto.getTrailer(.callconv_expr)) |callconv_expr| {
1291 if (fn_proto.getCallconvExpr()) |callconv_expr| {
12921292 return self.failNode(
12931293 &fn_type_scope.base,
12941294 callconv_expr,
......@@ -1430,10 +1430,10 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool {
14301430 self.bin_file.freeDecl(decl);
14311431 }
14321432
1433 if (fn_proto.getTrailer(.extern_export_inline_token)) |maybe_export_token| {
1433 if (fn_proto.getExternExportInlineToken()) |maybe_export_token| {
14341434 if (tree.token_ids[maybe_export_token] == .Keyword_export) {
14351435 const export_src = tree.token_locs[maybe_export_token].start;
1436 const name_loc = tree.token_locs[fn_proto.getTrailer(.name_token).?];
1436 const name_loc = tree.token_locs[fn_proto.getNameToken().?];
14371437 const name = tree.tokenSliceLoc(name_loc);
14381438 // The scope needs to have the decl in it.
14391439 try self.analyzeExport(&block_scope.base, export_src, name, decl);
......@@ -1460,37 +1460,37 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool {
14601460 };
14611461 defer block_scope.instructions.deinit(self.gpa);
14621462
1463 decl.is_pub = var_decl.getTrailer(.visib_token) != null;
1463 decl.is_pub = var_decl.getVisibToken() != null;
14641464 const is_extern = blk: {
1465 const maybe_extern_token = var_decl.getTrailer(.extern_export_token) orelse
1465 const maybe_extern_token = var_decl.getExternExportToken() orelse
14661466 break :blk false;
14671467 if (tree.token_ids[maybe_extern_token] != .Keyword_extern) break :blk false;
1468 if (var_decl.getTrailer(.init_node)) |some| {
1468 if (var_decl.getInitNode()) |some| {
14691469 return self.failNode(&block_scope.base, some, "extern variables have no initializers", .{});
14701470 }
14711471 break :blk true;
14721472 };
1473 if (var_decl.getTrailer(.lib_name)) |lib_name| {
1473 if (var_decl.getLibName()) |lib_name| {
14741474 assert(is_extern);
14751475 return self.failNode(&block_scope.base, lib_name, "TODO implement function library name", .{});
14761476 }
14771477 const is_mutable = tree.token_ids[var_decl.mut_token] == .Keyword_var;
1478 const is_threadlocal = if (var_decl.getTrailer(.thread_local_token)) |some| blk: {
1478 const is_threadlocal = if (var_decl.getThreadLocalToken()) |some| blk: {
14791479 if (!is_mutable) {
14801480 return self.failTok(&block_scope.base, some, "threadlocal variable cannot be constant", .{});
14811481 }
14821482 break :blk true;
14831483 } else false;
1484 assert(var_decl.getTrailer(.comptime_token) == null);
1485 if (var_decl.getTrailer(.align_node)) |align_expr| {
1484 assert(var_decl.getComptimeToken() == null);
1485 if (var_decl.getAlignNode()) |align_expr| {
14861486 return self.failNode(&block_scope.base, align_expr, "TODO implement function align expression", .{});
14871487 }
1488 if (var_decl.getTrailer(.section_node)) |sect_expr| {
1488 if (var_decl.getSectionNode()) |sect_expr| {
14891489 return self.failNode(&block_scope.base, sect_expr, "TODO implement function section expression", .{});
14901490 }
14911491
14921492 const explicit_type = blk: {
1493 const type_node = var_decl.getTrailer(.type_node) orelse
1493 const type_node = var_decl.getTypeNode() orelse
14941494 break :blk null;
14951495
14961496 // Temporary arena for the zir instructions.
......@@ -1517,7 +1517,7 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool {
15171517 };
15181518
15191519 var var_type: Type = undefined;
1520 const value: ?Value = if (var_decl.getTrailer(.init_node)) |init_node| blk: {
1520 const value: ?Value = if (var_decl.getInitNode()) |init_node| blk: {
15211521 var gen_scope_arena = std.heap.ArenaAllocator.init(self.gpa);
15221522 defer gen_scope_arena.deinit();
15231523 var gen_scope: Scope.GenZIR = .{
......@@ -1602,7 +1602,7 @@ fn astGenAndAnalyzeDecl(self: *Module, decl: *Decl) !bool {
16021602 decl.analysis = .complete;
16031603 decl.generation = self.generation;
16041604
1605 if (var_decl.getTrailer(.extern_export_token)) |maybe_export_token| {
1605 if (var_decl.getExternExportToken()) |maybe_export_token| {
16061606 if (tree.token_ids[maybe_export_token] == .Keyword_export) {
16071607 const export_src = tree.token_locs[maybe_export_token].start;
16081608 const name_loc = tree.token_locs[var_decl.name_token];
......@@ -1768,7 +1768,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void {
17681768 for (decls) |src_decl, decl_i| {
17691769 if (src_decl.cast(ast.Node.FnProto)) |fn_proto| {
17701770 // We will create a Decl for it regardless of analysis status.
1771 const name_tok = fn_proto.getTrailer(.name_token) orelse {
1771 const name_tok = fn_proto.getNameToken() orelse {
17721772 @panic("TODO missing function name");
17731773 };
17741774
......@@ -1804,7 +1804,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void {
18041804 } else {
18051805 const new_decl = try self.createNewDecl(&root_scope.base, name, decl_i, name_hash, contents_hash);
18061806 root_scope.decls.appendAssumeCapacity(new_decl);
1807 if (fn_proto.getTrailer(.extern_export_inline_token)) |maybe_export_token| {
1807 if (fn_proto.getExternExportInlineToken()) |maybe_export_token| {
18081808 if (tree.token_ids[maybe_export_token] == .Keyword_export) {
18091809 self.work_queue.writeItemAssumeCapacity(.{ .analyze_decl = new_decl });
18101810 }
......@@ -1831,7 +1831,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void {
18311831 } else {
18321832 const new_decl = try self.createNewDecl(&root_scope.base, name, decl_i, name_hash, contents_hash);
18331833 root_scope.decls.appendAssumeCapacity(new_decl);
1834 if (var_decl.getTrailer(.extern_export_token)) |maybe_export_token| {
1834 if (var_decl.getExternExportToken()) |maybe_export_token| {
18351835 if (tree.token_ids[maybe_export_token] == .Keyword_export) {
18361836 self.work_queue.writeItemAssumeCapacity(.{ .analyze_decl = new_decl });
18371837 }
src-self-hosted/astgen.zig+6-6
......@@ -451,16 +451,16 @@ fn varDecl(
451451 block_arena: *Allocator,
452452) InnerError!*Scope {
453453 // TODO implement detection of shadowing
454 if (node.getTrailer(.comptime_token)) |comptime_token| {
454 if (node.getComptimeToken()) |comptime_token| {
455455 return mod.failTok(scope, comptime_token, "TODO implement comptime locals", .{});
456456 }
457 if (node.getTrailer(.align_node)) |align_node| {
457 if (node.getAlignNode()) |align_node| {
458458 return mod.failNode(scope, align_node, "TODO implement alignment on locals", .{});
459459 }
460460 const tree = scope.tree();
461461 const name_src = tree.token_locs[node.name_token].start;
462462 const ident_name = try identifierTokenString(mod, scope, node.name_token);
463 const init_node = node.getTrailer(.init_node) orelse
463 const init_node = node.getInitNode() orelse
464464 return mod.fail(scope, name_src, "variables must be initialized", .{});
465465
466466 switch (tree.token_ids[node.mut_token]) {
......@@ -469,7 +469,7 @@ fn varDecl(
469469 // or an rvalue as a result location. If it is an rvalue, we can use the instruction as
470470 // the variable, no memory location needed.
471471 const result_loc = if (nodeMayNeedMemoryLocation(init_node)) r: {
472 if (node.getTrailer(.type_node)) |type_node| {
472 if (node.getTypeNode()) |type_node| {
473473 const type_inst = try typeExpr(mod, scope, type_node);
474474 const alloc = try addZIRUnOp(mod, scope, name_src, .alloc, type_inst);
475475 break :r ResultLoc{ .ptr = alloc };
......@@ -478,7 +478,7 @@ fn varDecl(
478478 break :r ResultLoc{ .inferred_ptr = alloc };
479479 }
480480 } else r: {
481 if (node.getTrailer(.type_node)) |type_node|
481 if (node.getTypeNode()) |type_node|
482482 break :r ResultLoc{ .ty = try typeExpr(mod, scope, type_node) }
483483 else
484484 break :r .none;
......@@ -494,7 +494,7 @@ fn varDecl(
494494 return &sub_scope.base;
495495 },
496496 .Keyword_var => {
497 const var_data: struct { result_loc: ResultLoc, alloc: *zir.Inst } = if (node.getTrailer(.type_node)) |type_node| a: {
497 const var_data: struct { result_loc: ResultLoc, alloc: *zir.Inst } = if (node.getTypeNode()) |type_node| a: {
498498 const type_inst = try typeExpr(mod, scope, type_node);
499499 const alloc = try addZIRUnOp(mod, scope, name_src, .alloc, type_inst);
500500 break :a .{ .alloc = alloc, .result_loc = .{ .ptr = alloc } };
src-self-hosted/codegen.zig+1-1
......@@ -439,7 +439,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
439439 if (module_fn.owner_decl.scope.cast(Module.Scope.File)) |scope_file| {
440440 const tree = scope_file.contents.tree;
441441 const fn_proto = tree.root_node.decls()[module_fn.owner_decl.src_index].castTag(.FnProto).?;
442 const block = fn_proto.body().?.castTag(.Block).?;
442 const block = fn_proto.getBodyNode().?.castTag(.Block).?;
443443 const lbrace_src = tree.token_locs[block.lbrace].start;
444444 const rbrace_src = tree.token_locs[block.rbrace].start;
445445 break :blk .{ .lbrace_src = lbrace_src, .rbrace_src = rbrace_src, .source = tree.source };
src-self-hosted/link/Elf.zig+2-2
......@@ -1661,7 +1661,7 @@ pub fn updateDecl(self: *Elf, module: *Module, decl: *Module.Decl) !void {
16611661 // TODO Look into improving the performance here by adding a token-index-to-line
16621662 // lookup table. Currently this involves scanning over the source code for newlines.
16631663 const fn_proto = file_ast_decls[decl.src_index].castTag(.FnProto).?;
1664 const block = fn_proto.body().?.castTag(.Block).?;
1664 const block = fn_proto.getBodyNode().?.castTag(.Block).?;
16651665 const line_delta = std.zig.lineDelta(tree.source, 0, tree.token_locs[block.lbrace].start);
16661666 break :blk @intCast(u28, line_delta);
16671667 } else if (decl.scope.cast(Module.Scope.ZIRModule)) |zir_module| {
......@@ -2160,7 +2160,7 @@ pub fn updateDeclLineNumber(self: *Elf, module: *Module, decl: *const Module.Dec
21602160 // TODO Look into improving the performance here by adding a token-index-to-line
21612161 // lookup table. Currently this involves scanning over the source code for newlines.
21622162 const fn_proto = file_ast_decls[decl.src_index].castTag(.FnProto).?;
2163 const block = fn_proto.body().?.castTag(.Block).?;
2163 const block = fn_proto.getBodyNode().?.castTag(.Block).?;
21642164 const line_delta = std.zig.lineDelta(tree.source, 0, tree.token_locs[block.lbrace].start);
21652165 const casted_line_off = @intCast(u28, line_delta);
21662166
src-self-hosted/translate_c.zig+5-5
......@@ -675,7 +675,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
675675 }
676676
677677 const body_node = try block_scope.complete(rp.c);
678 proto_node.setTrailer(.body_node, body_node);
678 proto_node.setBodyNode(body_node);
679679 return addTopLevelDecl(c, fn_name, &proto_node.base);
680680}
681681
......@@ -4493,7 +4493,7 @@ fn transCreateNodeMacroFn(c: *Context, name: []const u8, ref: *ast.Node, proto_a
44934493 const block_lbrace = try appendToken(c, .LBrace, "{");
44944494
44954495 const return_kw = try appendToken(c, .Keyword_return, "return");
4496 const unwrap_expr = try transCreateNodeUnwrapNull(c, ref.cast(ast.Node.VarDecl).?.getTrailer(.init_node).?);
4496 const unwrap_expr = try transCreateNodeUnwrapNull(c, ref.cast(ast.Node.VarDecl).?.getInitNode().?);
44974497
44984498 const call_expr = try c.createCall(unwrap_expr, fn_params.items.len);
44994499 const call_params = call_expr.params();
......@@ -6361,7 +6361,7 @@ fn getContainer(c: *Context, node: *ast.Node) ?*ast.Node {
63616361 const ident = node.castTag(.Identifier).?;
63626362 if (c.global_scope.sym_table.get(tokenSlice(c, ident.token))) |value| {
63636363 if (value.cast(ast.Node.VarDecl)) |var_decl|
6364 return getContainer(c, var_decl.getTrailer(.init_node).?);
6364 return getContainer(c, var_decl.getInitNode().?);
63656365 }
63666366 },
63676367
......@@ -6390,7 +6390,7 @@ fn getContainerTypeOf(c: *Context, ref: *ast.Node) ?*ast.Node {
63906390 if (ref.castTag(.Identifier)) |ident| {
63916391 if (c.global_scope.sym_table.get(tokenSlice(c, ident.token))) |value| {
63926392 if (value.cast(ast.Node.VarDecl)) |var_decl| {
6393 if (var_decl.getTrailer(.type_node)) |ty|
6393 if (var_decl.getTypeNode()) |ty|
63946394 return getContainer(c, ty);
63956395 }
63966396 }
......@@ -6412,7 +6412,7 @@ fn getContainerTypeOf(c: *Context, ref: *ast.Node) ?*ast.Node {
64126412}
64136413
64146414fn getFnProto(c: *Context, ref: *ast.Node) ?*ast.Node.FnProto {
6415 const init = if (ref.cast(ast.Node.VarDecl)) |v| v.getTrailer(.init_node).? else return null;
6415 const init = if (ref.cast(ast.Node.VarDecl)) |v| v.getInitNode().? else return null;
64166416 if (getContainerTypeOf(c, init)) |ty_node| {
64176417 if (ty_node.castTag(.OptionalType)) |prefix| {
64186418 if (prefix.rhs.cast(ast.Node.FnProto)) |fn_proto| {