mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 16:54:52 +00:00
AstGen: implement anytype parameters
This commit is contained in:
parent
a62db38d90
commit
30c9808391
@ -2172,6 +2172,10 @@ pub const full = struct {
|
||||
};
|
||||
it.param_i += 1;
|
||||
it.tok_i = it.tree.lastToken(param_type) + 1;
|
||||
// Look for anytype and ... params afterwards.
|
||||
if (token_tags[it.tok_i] == .comma) {
|
||||
it.tok_i += 1;
|
||||
}
|
||||
it.tok_flag = true;
|
||||
return Param{
|
||||
.first_doc_comment = first_doc_comment,
|
||||
@ -2181,10 +2185,7 @@ pub const full = struct {
|
||||
.type_expr = param_type,
|
||||
};
|
||||
}
|
||||
// Look for anytype and ... params afterwards.
|
||||
if (token_tags[it.tok_i] == .comma) {
|
||||
it.tok_i += 1;
|
||||
} else {
|
||||
if (token_tags[it.tok_i] == .r_paren) {
|
||||
return null;
|
||||
}
|
||||
if (token_tags[it.tok_i] == .doc_comment) {
|
||||
@ -2236,8 +2237,8 @@ pub const full = struct {
|
||||
.tree = &tree,
|
||||
.fn_proto = &fn_proto,
|
||||
.param_i = 0,
|
||||
.tok_i = undefined,
|
||||
.tok_flag = false,
|
||||
.tok_i = fn_proto.lparen + 1,
|
||||
.tok_flag = true,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@ -2334,7 +2334,11 @@ fn fnDecl(
|
||||
var count: usize = 0;
|
||||
var it = fn_proto.iterate(tree.*);
|
||||
while (it.next()) |param| {
|
||||
if (param.anytype_ellipsis3) |some| if (token_tags[some] == .ellipsis3) break;
|
||||
if (param.anytype_ellipsis3) |token| switch (token_tags[token]) {
|
||||
.ellipsis3 => break,
|
||||
.keyword_anytype => {},
|
||||
else => unreachable,
|
||||
};
|
||||
count += 1;
|
||||
}
|
||||
break :blk count;
|
||||
@ -2358,11 +2362,10 @@ fn fnDecl(
|
||||
while (it.next()) |param| : (param_type_i += 1) {
|
||||
if (param.anytype_ellipsis3) |token| {
|
||||
switch (token_tags[token]) {
|
||||
.keyword_anytype => return astgen.failTok(
|
||||
token,
|
||||
"TODO implement anytype parameter",
|
||||
.{},
|
||||
),
|
||||
.keyword_anytype => {
|
||||
param_types[param_type_i] = .none;
|
||||
continue;
|
||||
},
|
||||
.ellipsis3 => {
|
||||
is_var_args = true;
|
||||
break;
|
||||
|
||||
@ -1816,6 +1816,7 @@ pub const Inst = struct {
|
||||
|
||||
/// Trailing:
|
||||
/// 0. param_type: Ref // for each param_types_len
|
||||
/// - `none` indicates that the param type is `anytype`.
|
||||
/// 1. body: Index // for each body_len
|
||||
pub const Func = struct {
|
||||
return_type: Ref,
|
||||
@ -3304,7 +3305,10 @@ const Writer = struct {
|
||||
|
||||
try stream.writeAll(", {\n");
|
||||
self.indent += 2;
|
||||
const prev_param_count = self.param_count;
|
||||
self.param_count = param_types.len;
|
||||
try self.writeBody(stream, body);
|
||||
self.param_count = prev_param_count;
|
||||
self.indent -= 2;
|
||||
try stream.writeByteNTimes(' ', self.indent);
|
||||
try stream.writeAll("}) ");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user