if (kw_active_len <= kw_len) {
return FALSE;
}
- for (p = kw_active; p < kw_active + kw_active_len - kw_len; p++) {
+ for (
+ p = kw_active;
+ (p = strchr(p, *kw_ptr)) &&
+ p < kw_active + kw_active_len - kw_len;
+ p++
+ ) {
if (
(p == kw_active || p[-1] == ' ') &&
p[kw_len] == ' ' &&
static int parse_fun(pTHX_ OP **pop, const char *keyword_ptr, STRLEN keyword_len, const Spec *spec) {
SV *gen, *declarator, *params, *sv;
- line_t line_start;
int saw_name, saw_colon;
STRLEN len;
char *s;
declarator = sv_2mortal(newSVpvn(keyword_ptr, keyword_len));
params = sv_2mortal(newSVpvs(""));
- line_start = CopLINE(PL_curcop);
lex_read_space(0);
/* function name */
for (;;) {
c = lex_peek_unichar(0);
- if (c && strchr("$@%", c)) {
+ if (c == '$' || c == '@' || c == '%') {
sv_catpvf(params, "%c", (int)c);
lex_read_unichar(0);
lex_read_space(0);
s = PL_parser->bufptr;
if (!(len = S_scan_word(aTHX_ s, FALSE))) {
- croak("In %.*s: missing identifier", (int)SvCUR(declarator), SvPV_nolen(declarator));
+ croak("In %"SVf": missing identifier", SVfARG(declarator));
}
if (saw_slurpy) {
- croak("In %.*s: I was expecting \")\" after \"%s\", not \"%c%.*s\"", (int)SvCUR(declarator), SvPV_nolen(declarator), SvPV_nolen(saw_slurpy), (int)c, (int)len, s);
+ croak("In %"SVf": I was expecting \")\" after \"%"SVf"\", not \"%c%.*s\"", SVfARG(declarator), SVfARG(saw_slurpy), (int)c, (int)len, s);
}
if (c != '$') {
saw_slurpy = sv_2mortal(newSVpvf("%c%.*s", (int)c, (int)len, s));
}
if (c == -1) {
- croak("In %.*s: unexpected EOF in parameter list", (int)SvCUR(declarator), SvPV_nolen(declarator));
+ croak("In %"SVf": unexpected EOF in parameter list", SVfARG(declarator));
}
- croak("In %.*s: unexpected '%c' in parameter list", (int)SvCUR(declarator), SvPV_nolen(declarator), (int)c);
+ croak("In %"SVf": unexpected '%c' in parameter list", SVfARG(declarator), (int)c);
}
}
} else {
sv = sv_2mortal(newSVpvs(""));
if (!S_scan_str(aTHX_ sv, TRUE, TRUE)) {
- croak("In %.*s: malformed prototype", (int)SvCUR(declarator), SvPV_nolen(declarator));
+ croak("In %"SVf": prototype not terminated", SVfARG(declarator));
}
sv_catsv(gen, sv);
lex_read_space(0);
if (c == '(') {
sv = sv_2mortal(newSVpvs(""));
if (!S_scan_str(aTHX_ sv, TRUE, TRUE)) {
- croak("In %.*s: malformed attribute argument list", (int)SvCUR(declarator), SvPV_nolen(declarator));
+ croak("In %"SVf": unterminated attribute parameter in attribute list", SVfARG(declarator));
}
sv_catsv(gen, sv);
lex_read_space(0);
/* body */
c = lex_peek_unichar(0);
if (c != '{') {
- croak("In %.*s: I was expecting a function body, not \"%c\"", (int)SvCUR(declarator), SvPV_nolen(declarator), (int)c);
+ croak("In %"SVf": I was expecting a function body, not \"%c\"", SVfARG(declarator), (int)c);
}
lex_read_unichar(0);
sv_catpvs(gen, "{");
sv_catpvs(gen, ")=@_;");
}
-
/* named sub */
if (saw_name) {
/* fprintf(stderr, "! [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */