Apply 256 arg limit to lambdas too

This commit is contained in:
Greg Shuflin 2021-11-22 00:14:21 -08:00
parent 7221d2cb11
commit fc463d3807
2 changed files with 29 additions and 19 deletions

View File

@ -293,32 +293,34 @@ fn func_signature(input: Span) -> ParseResult<Signature> {
"func-signature",
preceded(
kw("fn"),
cut(verify(
alt((
map(normal_fn, |(name, params, type_anno)| Signature {
name: rc_string(name.fragment()),
operator: false,
params,
type_anno,
}),
map(operator_fn, |(op, params, type_anno)| Signature {
name: rc_string(op.sigil()),
operator: true,
params,
type_anno,
}),
)),
|sig| sig.params.len() < 256,
)),
cut(alt((
map(normal_fn, |(name, params, type_anno)| Signature {
name: rc_string(name.fragment()),
operator: false,
params,
type_anno,
}),
map(operator_fn, |(op, params, type_anno)| Signature {
name: rc_string(op.sigil()),
operator: true,
params,
type_anno,
}),
))),
),
)(input)
}
fn formal_params(input: Span) -> ParseResult<Vec<FormalParam>> {
delimited(tok(char('(')), separated_list0(tok(char(',')), formal_param), tok(char(')')))(input)
context(
"formal-params",
verify(
delimited(tok(char('(')), separated_list0(tok(char(',')), formal_param), tok(char(')'))),
|params: &Vec<_>| params.len() < 256,
),
)(input)
}
//TODO support 256-limit
fn formal_param(input: Span) -> ParseResult<FormalParam> {
map(
tuple((identifier, opt(type_anno), opt(preceded(tok(char('=')), expression)))),

View File

@ -886,6 +886,14 @@ fn max_function_params() {
//TODO need to create a good, custom error message for this case
//assert_fail!(&buf, "A function cannot have more than 255 arguments");
assert_fail!(&buf);
let mut buf = r#"\("#.to_string();
for n in 0..255 {
write!(buf, "a{}, ", n).unwrap();
}
write!(buf, " a256").unwrap();
write!(buf, ") {{ return 10 }}").unwrap();
assert_fail!(&buf);
}
#[test]