mirror of
https://github.com/janet-lang/janet
synced 2024-12-27 00:40:26 +00:00
error if '& is followed by 2+ items in destructure
The current destructure pattern ends when '& is encountered. This commit adds an error if it is followed by more than a symbol to bind the array to. Although its not critical since the extra items can be ignored, they're a sign of some kind of mistake so its best to complain.
This commit is contained in:
parent
62608bec03
commit
4118d581af
@ -161,6 +161,20 @@ static int destructure(JanetCompiler *c,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i + 2 < len) {
|
||||||
|
int32_t num_extra = len - i - 1;
|
||||||
|
Janet* extra = janet_tuple_begin(num_extra);
|
||||||
|
janet_tuple_flag(extra) |= JANET_TUPLE_FLAG_BRACKETCTOR;
|
||||||
|
|
||||||
|
for (int32_t j = 0; j < num_extra; ++j) {
|
||||||
|
extra[j] = values[j + i + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
janetc_error(c, janet_formatc("expected a single symbol follow '& in destructuring pattern, found %q", janet_wrap_tuple(janet_tuple_end(extra))));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!janet_checktype(values[i + 1], JANET_SYMBOL)) {
|
if (!janet_checktype(values[i + 1], JANET_SYMBOL)) {
|
||||||
janetc_error(c, janet_formatc("expected symbol following '& in destructuring pattern, found %q", values[i + 1]));
|
janetc_error(c, janet_formatc("expected symbol following '& in destructuring pattern, found %q", values[i + 1]));
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user