X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=toke.c;h=28ea26dd38e8ac2e31d71d7d4ca5373c0e33b0a9;hb=0a5d5e8be390bda2f9b7684490082d428228d28f;hp=df5e0eb7fbae20ffc25be457840a1fa0d0629f21;hpb=49dc05e34e370524b8b4de5368e27314830b2308;p=p5sagit%2Fp5-mst-13.2.git diff --git a/toke.c b/toke.c index df5e0eb..28ea26d 100644 --- a/toke.c +++ b/toke.c @@ -144,8 +144,7 @@ static struct { #define OLDLOP(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)LSTOP) static int -ao(toketype) -int toketype; +ao(int toketype) { if (*bufptr == '=') { bufptr++; @@ -159,9 +158,7 @@ int toketype; } static void -no_op(what, s) -char *what; -char *s; +no_op(char *what, char *s) { char *oldbp = bufptr; bool is_first = (oldbufptr == linestart); @@ -184,8 +181,7 @@ char *s; } static void -missingterm(s) -char *s; +missingterm(char *s) { char tmpbuf[3]; char q; @@ -211,22 +207,20 @@ char *s; } void -deprecate(s) -char *s; +deprecate(char *s) { if (dowarn) warn("Use of %s is deprecated", s); } static void -depcom() +depcom(void) { deprecate("comma-less variable list"); } void -lex_start(line) -SV *line; +lex_start(SV *line) { dTHR; char *s; @@ -290,14 +284,13 @@ SV *line; } void -lex_end() +lex_end(void) { doextract = FALSE; } static void -restore_rsfp(f) -void *f; +restore_rsfp(void *f) { PerlIO *fp = (PerlIO*)f; @@ -309,8 +302,7 @@ void *f; } static void -incline(s) -char *s; +incline(char *s) { dTHR; char *t; @@ -351,8 +343,7 @@ char *s; } static char * -skipspace(s) -register char *s; +skipspace(register char *s) { dTHR; if (lex_formbrack && lex_brackets <= lex_formbrack) { @@ -410,7 +401,7 @@ register char *s; } static void -check_uni() { +check_uni(void) { char *s; char ch; char *t; @@ -434,9 +425,7 @@ check_uni() { #define UNI(f) return uni(f,s) static int -uni(f,s) -I32 f; -char *s; +uni(I32 f, char *s) { yylval.ival = f; expect = XTERM; @@ -486,8 +475,7 @@ char *s; } static void -force_next(type) -I32 type; +force_next(I32 type) { nexttype[nexttoke] = type; nexttoke++; @@ -499,12 +487,7 @@ I32 type; } static char * -force_word(start,token,check_keyword,allow_pack,allow_tick) -register char *start; -int token; -int check_keyword; -int allow_pack; -int allow_tick; +force_word(register char *start, int token, int check_keyword, int allow_pack, int allow_tick) { register char *s; STRLEN len; @@ -536,9 +519,7 @@ int allow_tick; } static void -force_ident(s, kind) -register char *s; -int kind; +force_ident(register char *s, int kind) { if (s && *s) { OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0)); @@ -561,8 +542,7 @@ int kind; } static char * -force_version(s) -char *s; +force_version(char *s) { OP *version = Nullop; @@ -589,8 +569,7 @@ char *s; } static SV * -q(sv) -SV *sv; +q(SV *sv) { register char *s; register char *send; @@ -623,7 +602,7 @@ SV *sv; } static I32 -sublex_start() +sublex_start(void) { register I32 op_type = yylval.ival; @@ -658,7 +637,7 @@ sublex_start() } static I32 -sublex_push() +sublex_push(void) { dTHR; push_scope(); @@ -711,7 +690,7 @@ sublex_push() } static I32 -sublex_done() +sublex_done(void) { if (!lex_starts++) { expect = XOPERATOR; @@ -756,8 +735,7 @@ sublex_done() } static char * -scan_const(start) -char *start; +scan_const(char *start) { register char *send = bufend; SV *sv = NEWSV(93, send - start); @@ -806,7 +784,7 @@ char *start; else if (*s == '$') { if (!lex_inpat) /* not a regexp, so $ must be var */ break; - if (s + 1 < send && !strchr(")| \n\t", s[1])) + if (s + 1 < send && !strchr("()| \n\t", s[1])) break; /* in regexp, $ might be tail anchor */ } if (*s == '\\' && s+1 < send) { @@ -896,8 +874,7 @@ char *start; /* This is the one truly awful dwimmer necessary to conflate C and sed. */ static int -intuit_more(s) -register char *s; +intuit_more(register char *s) { if (lex_brackets) return TRUE; @@ -1025,9 +1002,7 @@ register char *s; } static int -intuit_method(start,gv) -char *start; -GV *gv; +intuit_method(char *start, GV *gv) { char *s = start + (*start == '$'); char tmpbuf[sizeof tokenbuf]; @@ -1073,7 +1048,7 @@ GV *gv; } static char* -incl_perldb() +incl_perldb(void) { if (perldb) { char *pdb = getenv("PERL5DB"); @@ -1104,9 +1079,7 @@ incl_perldb() static int filter_debug = 0; SV * -filter_add(funcp, datasv) - filter_t funcp; - SV *datasv; +filter_add(filter_t funcp, SV *datasv) { if (!funcp){ /* temporary handy debugging hack to be deleted */ filter_debug = atoi((char*)datasv); @@ -1129,17 +1102,15 @@ filter_add(funcp, datasv) /* Delete most recently added instance of this filter function. */ void -filter_del(funcp) - filter_t funcp; +filter_del(filter_t funcp) { if (filter_debug) warn("filter_del func %p", funcp); if (!rsfp_filters || AvFILL(rsfp_filters)<0) return; /* if filter is on top of stack (usual case) just pop it off */ - if (IoDIRP(FILTER_DATA(0)) == (void*)funcp){ - /* sv_free(av_pop(rsfp_filters)); */ - sv_free(av_shift(rsfp_filters)); + if (IoDIRP(FILTER_DATA(AvFILL(rsfp_filters))) == (void*)funcp){ + sv_free(av_pop(rsfp_filters)); return; } @@ -1150,10 +1121,10 @@ filter_del(funcp) /* Invoke the n'th filter function for the current rsfp. */ I32 -filter_read(idx, buf_sv, maxlen) - int idx; - SV *buf_sv; - int maxlen; /* 0 = read one text line */ +filter_read(int idx, SV *buf_sv, int maxlen) + + + /* 0 = read one text line */ { filter_t funcp; SV *datasv = NULL; @@ -1208,10 +1179,7 @@ filter_read(idx, buf_sv, maxlen) } static char * -filter_gets(sv,fp, append) -register SV *sv; -register PerlIO *fp; -STRLEN append; +filter_gets(register SV *sv, register FILE *fp, STRLEN append) { if (rsfp_filters) { @@ -1236,7 +1204,7 @@ STRLEN append; EXT int yychar; /* last token */ int -yylex() +yylex(void) { dTHR; register char *s; @@ -1258,12 +1226,12 @@ yylex() if (!strchr(tokenbuf,':')) { #ifdef USE_THREADS - /* Check for single character per-thread magicals */ + /* Check for single character per-thread SVs */ if (tokenbuf[0] == '$' && tokenbuf[2] == '\0' - && !isALPHA(tokenbuf[1]) /* Rule out obvious non-magicals */ - && (tmp = find_thread_magical(&tokenbuf[1])) != NOT_IN_PAD) + && !isALPHA(tokenbuf[1]) /* Rule out obvious non-threadsvs */ + && (tmp = find_threadsv(&tokenbuf[1])) != NOT_IN_PAD) { - yylval.opval = newOP(OP_SPECIFIC, 0); + yylval.opval = newOP(OP_THREADSV, 0); yylval.opval->op_targ = tmp; return PRIVATEREF; } @@ -1404,8 +1372,8 @@ yylex() nextval[nexttoke].ival = 0; force_next(','); #ifdef USE_THREADS - nextval[nexttoke].opval = newOP(OP_SPECIFIC, 0); - nextval[nexttoke].opval->op_targ = find_thread_magical("\""); + nextval[nexttoke].opval = newOP(OP_THREADSV, 0); + nextval[nexttoke].opval->op_targ = find_threadsv("\""); force_next(PRIVATEREF); #else force_ident("\"", '$'); @@ -2420,7 +2388,11 @@ yylex() case '/': /* may either be division or pattern */ case '?': /* may either be conditional or pattern */ if (expect != XOPERATOR) { - check_uni(); + /* Disable warning on "study /blah/" */ + if (oldoldbufptr == last_uni + && (*last_uni != 's' || s - last_uni < 5 + || memNE(last_uni, "study", 5) || isALNUM(last_uni[5]))) + check_uni(); s = scan_pat(s); TERM(sublex_start()); } @@ -2603,7 +2575,13 @@ yylex() (gv = *gvp) != (GV*)&sv_undef && GvCVu(gv) && GvIMPORTED_CV(gv)))) { - tmp = 0; + tmp = 0; /* overridden by importation */ + } + else if (gv && !gvp + && -tmp==KEY_lock /* XXX generalizable kludge */ + && !hv_fetch(GvHVn(incgv), "Thread.pm", 9, FALSE)) + { + tmp = 0; /* any sub overrides "weak" keyword */ } else { tmp = -tmp; gv = Nullgv; gvp = 0; @@ -2661,7 +2639,7 @@ yylex() (oldoldbufptr == last_lop || oldoldbufptr == last_uni) && /* NO SKIPSPACE BEFORE HERE! */ (expect == XREF || - (opargs[last_lop_op] >> OASHIFT & 7) == OA_FILEREF) ) + ((opargs[last_lop_op] >> OASHIFT)& 7) == OA_FILEREF) ) { bool immediate_paren = *s == '('; @@ -3791,9 +3769,7 @@ yylex() } I32 -keyword(d, len) -register char *d; -I32 len; +keyword(register char *d, I32 len) { switch (*d) { case '_': @@ -4409,10 +4385,7 @@ I32 len; } static void -checkcomma(s,name,what) -register char *s; -char *name; -char *what; +checkcomma(register char *s, char *name, char *what) { char *w; @@ -4454,12 +4427,7 @@ char *what; } static char * -scan_word(s, dest, destlen, allow_package, slp) -register char *s; -char *dest; -STRLEN destlen; -int allow_package; -STRLEN *slp; +scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp) { register char *d = dest; register char *e = d + destlen - 3; /* two-character token, ending NUL */ @@ -4486,12 +4454,7 @@ STRLEN *slp; } static char * -scan_ident(s, send, dest, destlen, ck_uni) -register char *s; -register char *send; -char *dest; -STRLEN destlen; -I32 ck_uni; +scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni) { register char *d; register char *e; @@ -4607,9 +4570,7 @@ I32 ck_uni; return s; } -void pmflag(pmfl,ch) -U16* pmfl; -int ch; +void pmflag(U16 *pmfl, int ch) { if (ch == 'i') *pmfl |= PMf_FOLD; @@ -4628,8 +4589,7 @@ int ch; } static char * -scan_pat(start) -char *start; +scan_pat(char *start) { PMOP *pm; char *s; @@ -4655,8 +4615,7 @@ char *start; } static char * -scan_subst(start) -char *start; +scan_subst(char *start) { register char *s; register PMOP *pm; @@ -4720,56 +4679,14 @@ char *start; return s; } -void -hoistmust(pm) -register PMOP *pm; -{ - dTHR; - if (!pm->op_pmshort && pm->op_pmregexp->regstart && - (!pm->op_pmregexp->regmust || pm->op_pmregexp->reganch & ROPT_ANCH) - ) { - if (!(pm->op_pmregexp->reganch & ROPT_ANCH)) - pm->op_pmflags |= PMf_SCANFIRST; - pm->op_pmshort = SvREFCNT_inc(pm->op_pmregexp->regstart); - pm->op_pmslen = SvCUR(pm->op_pmshort); - } - else if (pm->op_pmregexp->regmust) {/* is there a better short-circuit? */ - if (pm->op_pmshort && - sv_eq(pm->op_pmshort,pm->op_pmregexp->regmust)) - { - if (pm->op_pmflags & PMf_SCANFIRST) { - SvREFCNT_dec(pm->op_pmshort); - pm->op_pmshort = Nullsv; - } - else { - SvREFCNT_dec(pm->op_pmregexp->regmust); - pm->op_pmregexp->regmust = Nullsv; - return; - } - } - /* promote the better string */ - if ((!pm->op_pmshort && - !(pm->op_pmregexp->reganch & ROPT_ANCH_GPOS)) || - ((pm->op_pmflags & PMf_SCANFIRST) && - (SvCUR(pm->op_pmshort) < SvCUR(pm->op_pmregexp->regmust)))) { - SvREFCNT_dec(pm->op_pmshort); /* ok if null */ - pm->op_pmshort = pm->op_pmregexp->regmust; - pm->op_pmslen = SvCUR(pm->op_pmshort); - pm->op_pmregexp->regmust = Nullsv; - pm->op_pmflags |= PMf_SCANFIRST; - } - } -} - static char * -scan_trans(start) -char *start; +scan_trans(char *start) { register char* s; OP *o; short *tbl; I32 squash; - I32 delete; + I32 Delete; I32 complement; yylval.ival = OP_NULL; @@ -4798,17 +4715,17 @@ char *start; New(803,tbl,256,short); o = newPVOP(OP_TRANS, 0, (char*)tbl); - complement = delete = squash = 0; + complement = Delete = squash = 0; while (*s == 'c' || *s == 'd' || *s == 's') { if (*s == 'c') complement = OPpTRANS_COMPLEMENT; else if (*s == 'd') - delete = OPpTRANS_DELETE; + Delete = OPpTRANS_DELETE; else squash = OPpTRANS_SQUASH; s++; } - o->op_private = delete|squash|complement; + o->op_private = Delete|squash|complement; lex_op = o; yylval.ival = OP_TRANS; @@ -4816,8 +4733,7 @@ char *start; } static char * -scan_heredoc(s) -register char *s; +scan_heredoc(register char *s) { dTHR; SV *herewas; @@ -4943,8 +4859,7 @@ register char *s; } static char * -scan_inputsymbol(start) -char *start; +scan_inputsymbol(char *start) { register char *s = start; register char *d; @@ -5000,8 +4915,7 @@ char *start; } static char * -scan_str(start) -char *start; +scan_str(char *start) { dTHR; SV *sv; @@ -5097,8 +5011,7 @@ char *start; } char * -scan_num(start) -char *start; +scan_num(char *start) { register char *s = start; register char *d; @@ -5226,8 +5139,7 @@ char *start; } static char * -scan_formline(s) -register char *s; +scan_formline(register char *s) { dTHR; register char *eol; @@ -5297,7 +5209,7 @@ register char *s; } static void -set_csh() +set_csh(void) { #ifdef CSH if (!cshlen) @@ -5306,9 +5218,7 @@ set_csh() } I32 -start_subparse(is_format, flags) -I32 is_format; -U32 flags; +start_subparse(I32 is_format, U32 flags) { dTHR; I32 oldsavestack_ix = savestack_ix; @@ -5368,8 +5278,7 @@ U32 flags; } int -yywarn(s) -char *s; +yywarn(char *s) { dTHR; --error_count; @@ -5380,8 +5289,7 @@ char *s; } int -yyerror(s) -char *s; +yyerror(char *s) { dTHR; char *where = NULL; @@ -5442,7 +5350,7 @@ char *s; if (in_eval & 2) warn("%_", msg); else if (in_eval) - sv_catsv(errsv, msg); + sv_catsv(ERRSV, msg); else PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg)); if (++error_count >= 10) @@ -5451,3 +5359,4 @@ char *s; in_my_stash = Nullhv; return 0; } +