diff options
| author | Tadeo Kondrak <me@tadeo.ca> | 2020-08-27 15:02:17 -0600 |
|---|---|---|
| committer | Tadeo Kondrak <me@tadeo.ca> | 2020-08-27 15:21:18 -0600 |
| commit | ce8a3ef2de347c50d173948b335e1ee205723974 (patch) | |
| tree | 12fcd64dbce4b24072a2e3993a5a7e983dd4537c /lib | |
| parent | f94583076ee517be311df6c70654e0cc41bf2b16 (diff) | |
| download | zig-ce8a3ef2de347c50d173948b335e1ee205723974.tar.gz zig-ce8a3ef2de347c50d173948b335e1ee205723974.zip | |
std.zig: Update to new std.meta.TrailerFlags API
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/zig/ast.zig | 68 | ||||
| -rw-r--r-- | lib/std/zig/render.zig | 76 |
2 files changed, 72 insertions, 72 deletions
diff --git a/lib/std/zig/ast.zig b/lib/std/zig/ast.zig index f6ba29a9ef..4bbf6f4381 100644 --- a/lib/std/zig/ast.zig +++ b/lib/std/zig/ast.zig @@ -921,17 +921,17 @@ pub const Node = struct { semicolon_token: TokenIndex, }; - pub fn getTrailer(self: *const VarDecl, comptime name: []const u8) ?TrailerFlags.Field(name) { + pub fn getTrailer(self: *const VarDecl, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) { const trailers_start = @ptrCast([*]const u8, self) + @sizeOf(VarDecl); - return self.trailer_flags.get(trailers_start, name); + return self.trailer_flags.get(trailers_start, field); } - pub fn setTrailer(self: *VarDecl, comptime name: []const u8, value: TrailerFlags.Field(name)) void { + pub fn setTrailer(self: *VarDecl, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void { const trailers_start = @ptrCast([*]u8, self) + @sizeOf(VarDecl); - self.trailer_flags.set(trailers_start, name, value); + self.trailer_flags.set(trailers_start, field, value); } - pub fn create(allocator: *mem.Allocator, required: RequiredFields, trailers: anytype) !*VarDecl { + pub fn create(allocator: *mem.Allocator, required: RequiredFields, trailers: TrailerFlags.InitStruct) !*VarDecl { const trailer_flags = TrailerFlags.init(trailers); const bytes = try allocator.alignedAlloc(u8, @alignOf(VarDecl), sizeInBytes(trailer_flags)); const var_decl = @ptrCast(*VarDecl, bytes.ptr); @@ -954,22 +954,22 @@ pub const Node = struct { pub fn iterate(self: *const VarDecl, index: usize) ?*Node { var i = index; - if (self.getTrailer("type_node")) |type_node| { + if (self.getTrailer(.type_node)) |type_node| { if (i < 1) return type_node; i -= 1; } - if (self.getTrailer("align_node")) |align_node| { + if (self.getTrailer(.align_node)) |align_node| { if (i < 1) return align_node; i -= 1; } - if (self.getTrailer("section_node")) |section_node| { + if (self.getTrailer(.section_node)) |section_node| { if (i < 1) return section_node; i -= 1; } - if (self.getTrailer("init_node")) |init_node| { + if (self.getTrailer(.init_node)) |init_node| { if (i < 1) return init_node; i -= 1; } @@ -978,11 +978,11 @@ pub const Node = struct { } pub fn firstToken(self: *const VarDecl) TokenIndex { - if (self.getTrailer("visib_token")) |visib_token| return visib_token; - if (self.getTrailer("thread_local_token")) |thread_local_token| return thread_local_token; - if (self.getTrailer("comptime_token")) |comptime_token| return comptime_token; - if (self.getTrailer("extern_export_token")) |extern_export_token| return extern_export_token; - assert(self.getTrailer("lib_name") == null); + if (self.getTrailer(.visib_token)) |visib_token| return visib_token; + if (self.getTrailer(.thread_local_token)) |thread_local_token| return thread_local_token; + if (self.getTrailer(.comptime_token)) |comptime_token| return comptime_token; + if (self.getTrailer(.extern_export_token)) |extern_export_token| return extern_export_token; + assert(self.getTrailer(.lib_name) == null); return self.mut_token; } @@ -1320,34 +1320,34 @@ pub const Node = struct { std.debug.print("{*} flags: {b} name_token: {} {*} params_len: {}\n", .{ self, self.trailer_flags.bits, - self.getTrailer("name_token"), + self.getTrailer(.name_token), self.trailer_flags.ptrConst(trailers_start, "name_token"), self.params_len, }); } pub fn body(self: *const FnProto) ?*Node { - return self.getTrailer("body_node"); + return self.getTrailer(.body_node); } - pub fn getTrailer(self: *const FnProto, comptime name: []const u8) ?TrailerFlags.Field(name) { + pub fn getTrailer(self: *const FnProto, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) { const trailers_start = @alignCast( @alignOf(ParamDecl), @ptrCast([*]const u8, self) + @sizeOf(FnProto) + @sizeOf(ParamDecl) * self.params_len, ); - return self.trailer_flags.get(trailers_start, name); + return self.trailer_flags.get(trailers_start, field); } - pub fn setTrailer(self: *FnProto, comptime name: []const u8, value: TrailerFlags.Field(name)) void { + pub fn setTrailer(self: *FnProto, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void { const trailers_start = @alignCast( @alignOf(ParamDecl), @ptrCast([*]u8, self) + @sizeOf(FnProto) + @sizeOf(ParamDecl) * self.params_len, ); - self.trailer_flags.set(trailers_start, name, value); + self.trailer_flags.set(trailers_start, field, value); } /// After this the caller must initialize the params list. - pub fn create(allocator: *mem.Allocator, required: RequiredFields, trailers: anytype) !*FnProto { + pub fn create(allocator: *mem.Allocator, required: RequiredFields, trailers: TrailerFlags.InitStruct) !*FnProto { const trailer_flags = TrailerFlags.init(trailers); const bytes = try allocator.alignedAlloc(u8, @alignOf(FnProto), sizeInBytes( required.params_len, @@ -1376,7 +1376,7 @@ pub const Node = struct { pub fn iterate(self: *const FnProto, index: usize) ?*Node { var i = index; - if (self.getTrailer("lib_name")) |lib_name| { + if (self.getTrailer(.lib_name)) |lib_name| { if (i < 1) return lib_name; i -= 1; } @@ -1394,12 +1394,12 @@ pub const Node = struct { } i -= params_len; - if (self.getTrailer("align_expr")) |align_expr| { + if (self.getTrailer(.align_expr)) |align_expr| { if (i < 1) return align_expr; i -= 1; } - if (self.getTrailer("section_expr")) |section_expr| { + if (self.getTrailer(.section_expr)) |section_expr| { if (i < 1) return section_expr; i -= 1; } @@ -1421,9 +1421,9 @@ pub const Node = struct { } pub fn firstToken(self: *const FnProto) TokenIndex { - if (self.getTrailer("visib_token")) |visib_token| return visib_token; - if (self.getTrailer("extern_export_inline_token")) |extern_export_inline_token| return extern_export_inline_token; - assert(self.getTrailer("lib_name") == null); + if (self.getTrailer(.visib_token)) |visib_token| return visib_token; + if (self.getTrailer(.extern_export_inline_token)) |extern_export_inline_token| return extern_export_inline_token; + assert(self.getTrailer(.lib_name) == null); return self.fn_token; } @@ -2673,24 +2673,24 @@ pub const Node = struct { }; pub fn getRHS(self: *const ControlFlowExpression) ?*Node { - return self.getTrailer("rhs"); + return self.getTrailer(.rhs); } pub fn getLabel(self: *const ControlFlowExpression) ?TokenIndex { - return self.getTrailer("label"); + return self.getTrailer(.label); } - pub fn getTrailer(self: *const ControlFlowExpression, comptime name: []const u8) ?TrailerFlags.Field(name) { + pub fn getTrailer(self: *const ControlFlowExpression, comptime field: TrailerFlags.FieldEnum) ?TrailerFlags.Field(field) { const trailers_start = @ptrCast([*]const u8, self) + @sizeOf(ControlFlowExpression); - return self.trailer_flags.get(trailers_start, name); + return self.trailer_flags.get(trailers_start, field); } - pub fn setTrailer(self: *ControlFlowExpression, comptime name: []const u8, value: TrailerFlags.Field(name)) void { + pub fn setTrailer(self: *ControlFlowExpression, comptime field: TrailerFlags.FieldEnum, value: TrailerFlags.Field(field)) void { const trailers_start = @ptrCast([*]u8, self) + @sizeOf(ControlFlowExpression); - self.trailer_flags.set(trailers_start, name, value); + self.trailer_flags.set(trailers_start, field, value); } - pub fn create(allocator: *mem.Allocator, required: RequiredFields, trailers: anytype) !*ControlFlowExpression { + pub fn create(allocator: *mem.Allocator, required: RequiredFields, trailers: TrailerFlags.InitStruct) !*ControlFlowExpression { const trailer_flags = TrailerFlags.init(trailers); const bytes = try allocator.alignedAlloc(u8, @alignOf(ControlFlowExpression), sizeInBytes(trailer_flags)); const ctrl_flow_expr = @ptrCast(*ControlFlowExpression, bytes.ptr); diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 4d44c41bfa..4f280dbefc 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -232,9 +232,9 @@ fn renderContainerDecl(allocator: *mem.Allocator, stream: anytype, tree: *ast.Tr .FnProto => { const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", decl); - try renderDocComments(tree, stream, fn_proto, fn_proto.getTrailer("doc_comments"), indent, start_col); + try renderDocComments(tree, stream, fn_proto, fn_proto.getTrailer(.doc_comments), indent, start_col); - if (fn_proto.getTrailer("body_node")) |body_node| { + if (fn_proto.getTrailer(.body_node)) |body_node| { try renderExpression(allocator, stream, tree, indent, start_col, decl, .Space); try renderExpression(allocator, stream, tree, indent, start_col, body_node, space); } else { @@ -257,7 +257,7 @@ fn renderContainerDecl(allocator: *mem.Allocator, stream: anytype, tree: *ast.Tr .VarDecl => { const var_decl = @fieldParentPtr(ast.Node.VarDecl, "base", decl); - try renderDocComments(tree, stream, var_decl, var_decl.getTrailer("doc_comments"), indent, start_col); + try renderDocComments(tree, stream, var_decl, var_decl.getTrailer(.doc_comments), indent, start_col); try renderVarDecl(allocator, stream, tree, indent, start_col, var_decl); }, @@ -1520,23 +1520,23 @@ fn renderExpression( .FnProto => { const fn_proto = @fieldParentPtr(ast.Node.FnProto, "base", base); - if (fn_proto.getTrailer("visib_token")) |visib_token_index| { + if (fn_proto.getTrailer(.visib_token)) |visib_token_index| { const visib_token = tree.token_ids[visib_token_index]; assert(visib_token == .Keyword_pub or visib_token == .Keyword_export); try renderToken(tree, stream, visib_token_index, indent, start_col, Space.Space); // pub } - if (fn_proto.getTrailer("extern_export_inline_token")) |extern_export_inline_token| { - if (fn_proto.getTrailer("is_extern_prototype") == null) + if (fn_proto.getTrailer(.extern_export_inline_token)) |extern_export_inline_token| { + if (fn_proto.getTrailer(.is_extern_prototype) == null) try renderToken(tree, stream, extern_export_inline_token, indent, start_col, Space.Space); // extern/export/inline } - if (fn_proto.getTrailer("lib_name")) |lib_name| { + if (fn_proto.getTrailer(.lib_name)) |lib_name| { try renderExpression(allocator, stream, tree, indent, start_col, lib_name, Space.Space); } - const lparen = if (fn_proto.getTrailer("name_token")) |name_token| blk: { + const lparen = if (fn_proto.getTrailer(.name_token)) |name_token| blk: { try renderToken(tree, stream, fn_proto.fn_token, indent, start_col, Space.Space); // fn try renderToken(tree, stream, name_token, indent, start_col, Space.None); // name break :blk tree.nextToken(name_token); @@ -1549,11 +1549,11 @@ fn renderExpression( const rparen = tree.prevToken( // the first token for the annotation expressions is the left // parenthesis, hence the need for two prevToken - if (fn_proto.getTrailer("align_expr")) |align_expr| + if (fn_proto.getTrailer(.align_expr)) |align_expr| tree.prevToken(tree.prevToken(align_expr.firstToken())) - else if (fn_proto.getTrailer("section_expr")) |section_expr| + else if (fn_proto.getTrailer(.section_expr)) |section_expr| tree.prevToken(tree.prevToken(section_expr.firstToken())) - else if (fn_proto.getTrailer("callconv_expr")) |callconv_expr| + else if (fn_proto.getTrailer(.callconv_expr)) |callconv_expr| tree.prevToken(tree.prevToken(callconv_expr.firstToken())) else switch (fn_proto.return_type) { .Explicit => |node| node.firstToken(), @@ -1574,12 +1574,12 @@ fn renderExpression( for (fn_proto.params()) |param_decl, i| { try renderParamDecl(allocator, stream, tree, indent, start_col, param_decl, Space.None); - if (i + 1 < fn_proto.params_len or fn_proto.getTrailer("var_args_token") != null) { + if (i + 1 < fn_proto.params_len or fn_proto.getTrailer(.var_args_token) != null) { const comma = tree.nextToken(param_decl.lastToken()); try renderToken(tree, stream, comma, indent, start_col, Space.Space); // , } } - if (fn_proto.getTrailer("var_args_token")) |var_args_token| { + if (fn_proto.getTrailer(.var_args_token)) |var_args_token| { try renderToken(tree, stream, var_args_token, indent, start_col, Space.None); } } else { @@ -1591,7 +1591,7 @@ fn renderExpression( try stream.writeByteNTimes(' ', new_indent); try renderParamDecl(allocator, stream, tree, new_indent, start_col, param_decl, Space.Comma); } - if (fn_proto.getTrailer("var_args_token")) |var_args_token| { + if (fn_proto.getTrailer(.var_args_token)) |var_args_token| { try stream.writeByteNTimes(' ', new_indent); try renderToken(tree, stream, var_args_token, new_indent, start_col, Space.Comma); } @@ -1600,7 +1600,7 @@ fn renderExpression( try renderToken(tree, stream, rparen, indent, start_col, Space.Space); // ) - if (fn_proto.getTrailer("align_expr")) |align_expr| { + if (fn_proto.getTrailer(.align_expr)) |align_expr| { const align_rparen = tree.nextToken(align_expr.lastToken()); const align_lparen = tree.prevToken(align_expr.firstToken()); const align_kw = tree.prevToken(align_lparen); @@ -1611,7 +1611,7 @@ fn renderExpression( try renderToken(tree, stream, align_rparen, indent, start_col, Space.Space); // ) } - if (fn_proto.getTrailer("section_expr")) |section_expr| { + if (fn_proto.getTrailer(.section_expr)) |section_expr| { const section_rparen = tree.nextToken(section_expr.lastToken()); const section_lparen = tree.prevToken(section_expr.firstToken()); const section_kw = tree.prevToken(section_lparen); @@ -1622,7 +1622,7 @@ fn renderExpression( try renderToken(tree, stream, section_rparen, indent, start_col, Space.Space); // ) } - if (fn_proto.getTrailer("callconv_expr")) |callconv_expr| { + if (fn_proto.getTrailer(.callconv_expr)) |callconv_expr| { const callconv_rparen = tree.nextToken(callconv_expr.lastToken()); const callconv_lparen = tree.prevToken(callconv_expr.firstToken()); const callconv_kw = tree.prevToken(callconv_lparen); @@ -1631,9 +1631,9 @@ fn renderExpression( try renderToken(tree, stream, callconv_lparen, indent, start_col, Space.None); // ( try renderExpression(allocator, stream, tree, indent, start_col, callconv_expr, Space.None); try renderToken(tree, stream, callconv_rparen, indent, start_col, Space.Space); // ) - } else if (fn_proto.getTrailer("is_extern_prototype") != null) { + } else if (fn_proto.getTrailer(.is_extern_prototype) != null) { try stream.writeAll("callconv(.C) "); - } else if (fn_proto.getTrailer("is_async") != null) { + } else if (fn_proto.getTrailer(.is_async) != null) { try stream.writeAll("callconv(.Async) "); } @@ -2221,69 +2221,69 @@ fn renderVarDecl( start_col: *usize, var_decl: *ast.Node.VarDecl, ) (@TypeOf(stream).Error || Error)!void { - if (var_decl.getTrailer("visib_token")) |visib_token| { + if (var_decl.getTrailer(.visib_token)) |visib_token| { try renderToken(tree, stream, visib_token, indent, start_col, Space.Space); // pub } - if (var_decl.getTrailer("extern_export_token")) |extern_export_token| { + if (var_decl.getTrailer(.extern_export_token)) |extern_export_token| { try renderToken(tree, stream, extern_export_token, indent, start_col, Space.Space); // extern - if (var_decl.getTrailer("lib_name")) |lib_name| { + if (var_decl.getTrailer(.lib_name)) |lib_name| { try renderExpression(allocator, stream, tree, indent, start_col, lib_name, Space.Space); // "lib" } } - if (var_decl.getTrailer("comptime_token")) |comptime_token| { + if (var_decl.getTrailer(.comptime_token)) |comptime_token| { try renderToken(tree, stream, comptime_token, indent, start_col, Space.Space); // comptime } - if (var_decl.getTrailer("thread_local_token")) |thread_local_token| { + if (var_decl.getTrailer(.thread_local_token)) |thread_local_token| { try renderToken(tree, stream, thread_local_token, indent, start_col, Space.Space); // threadlocal } try renderToken(tree, stream, var_decl.mut_token, indent, start_col, Space.Space); // var - const name_space = if (var_decl.getTrailer("type_node") == null and - (var_decl.getTrailer("align_node") != null or - var_decl.getTrailer("section_node") != null or - var_decl.getTrailer("init_node") != null)) + const name_space = if (var_decl.getTrailer(.type_node) == null and + (var_decl.getTrailer(.align_node) != null or + var_decl.getTrailer(.section_node) != null or + var_decl.getTrailer(.init_node) != null)) Space.Space else Space.None; try renderToken(tree, stream, var_decl.name_token, indent, start_col, name_space); - if (var_decl.getTrailer("type_node")) |type_node| { + if (var_decl.getTrailer(.type_node)) |type_node| { try renderToken(tree, stream, tree.nextToken(var_decl.name_token), indent, start_col, Space.Space); - const s = if (var_decl.getTrailer("align_node") != null or - var_decl.getTrailer("section_node") != null or - var_decl.getTrailer("init_node") != null) Space.Space else Space.None; + const s = if (var_decl.getTrailer(.align_node) != null or + var_decl.getTrailer(.section_node) != null or + var_decl.getTrailer(.init_node) != null) Space.Space else Space.None; try renderExpression(allocator, stream, tree, indent, start_col, type_node, s); } - if (var_decl.getTrailer("align_node")) |align_node| { + if (var_decl.getTrailer(.align_node)) |align_node| { const lparen = tree.prevToken(align_node.firstToken()); const align_kw = tree.prevToken(lparen); const rparen = tree.nextToken(align_node.lastToken()); try renderToken(tree, stream, align_kw, indent, start_col, Space.None); // align try renderToken(tree, stream, lparen, indent, start_col, Space.None); // ( try renderExpression(allocator, stream, tree, indent, start_col, align_node, Space.None); - const s = if (var_decl.getTrailer("section_node") != null or var_decl.getTrailer("init_node") != null) Space.Space else Space.None; + const s = if (var_decl.getTrailer(.section_node) != null or var_decl.getTrailer(.init_node) != null) Space.Space else Space.None; try renderToken(tree, stream, rparen, indent, start_col, s); // ) } - if (var_decl.getTrailer("section_node")) |section_node| { + if (var_decl.getTrailer(.section_node)) |section_node| { const lparen = tree.prevToken(section_node.firstToken()); const section_kw = tree.prevToken(lparen); const rparen = tree.nextToken(section_node.lastToken()); try renderToken(tree, stream, section_kw, indent, start_col, Space.None); // linksection try renderToken(tree, stream, lparen, indent, start_col, Space.None); // ( try renderExpression(allocator, stream, tree, indent, start_col, section_node, Space.None); - const s = if (var_decl.getTrailer("init_node") != null) Space.Space else Space.None; + const s = if (var_decl.getTrailer(.init_node) != null) Space.Space else Space.None; try renderToken(tree, stream, rparen, indent, start_col, s); // ) } - if (var_decl.getTrailer("init_node")) |init_node| { + if (var_decl.getTrailer(.init_node)) |init_node| { const s = if (init_node.tag == .MultilineStringLiteral) Space.None else Space.Space; - try renderToken(tree, stream, var_decl.getTrailer("eq_token").?, indent, start_col, s); // = + try renderToken(tree, stream, var_decl.getTrailer(.eq_token).?, indent, start_col, s); // = try renderExpression(allocator, stream, tree, indent, start_col, init_node, Space.None); } |
