Change 29914 by [EMAIL PROTECTED] on 2007/01/22 15:29:10

        Integrate:
        [ 27439]
        MAD changes for bare skipspace()
        
        [ 27442]
        Replace PL_nextval[PL_nexttoke].opval with the macro NEXTVAL_NEXTTOKE
        as MAD conditionally changes this consistently in 27 places.

Affected files ...

... //depot/maint-5.8/perl/toke.c#138 edit

Differences ...

==== //depot/maint-5.8/perl/toke.c#138 (text) ====
Index: perl/toke.c
--- perl/toke.c#137~29913~      2007-01-22 06:45:23.000000000 -0800
+++ perl/toke.c 2007-01-22 07:29:10.000000000 -0800
@@ -35,6 +35,8 @@
 static I32 utf16rev_textfilter(pTHX_ int idx, SV *sv, int maxlen);
 #endif
 
+#define NEXTVAL_NEXTTOKE PL_nextval[PL_nexttoke]
+
 #define XFAKEBRACK 128
 #define XENUMMASK 127
 
@@ -124,6 +126,11 @@
 #endif
 #define CLINE (PL_copline = (CopLINE(PL_curcop) < PL_copline ? 
CopLINE(PL_curcop) : PL_copline))
 
+#define SKIPSPACE0(s) skipspace(s)
+#define SKIPSPACE1(s) skipspace(s)
+#define SKIPSPACE2(s,tsv) skipspace(s)
+#define PEEKSPACE(s) skipspace(s)
+
 /*
  * Convenience functions to return different tokens and prime the
  * lexer for the next token.  They all take an argument.
@@ -190,7 +197,7 @@
        PL_last_lop_op = f; \
        if (*s == '(') \
            return REPORT( (int)FUNC1 ); \
-       s = skipspace(s); \
+       s = PEEKSPACE(s); \
        return REPORT( *s=='(' ? (int)FUNC1 : (int)UNIOP ); \
        }
 
@@ -200,7 +207,7 @@
        PL_last_uni = PL_oldbufptr; \
        if (*s == '(') \
            return REPORT( (int)FUNC1 ); \
-       s = skipspace(s); \
+       s = PEEKSPACE(s); \
        return REPORT( (*s == '(') ? (int)FUNC1 : (int)UNIOP ); \
        }
 
@@ -720,6 +727,7 @@
     CopLINE_set(PL_curcop, atoi(n)-1);
 }
 
+
 /*
  * S_skipspace
  * Called to gobble the appropriate amount and type of whitespace.
@@ -896,7 +904,7 @@
        return REPORT(LSTOP);
     if (*s == '(')
        return REPORT(FUNC);
-    s = skipspace(s);
+    s = PEEKSPACE(s);
     if (*s == '(')
        return REPORT(FUNC);
     else
@@ -955,7 +963,7 @@
     register char *s;
     STRLEN len;
 
-    start = skipspace(start);
+    start = SKIPSPACE1(start);
     s = start;
     if (isIDFIRST_lazy_if(s,UTF) ||
        (allow_pack && *s == ':') ||
@@ -965,17 +973,17 @@
        if (check_keyword && keyword(PL_tokenbuf, len))
            return start;
        if (token == METHOD) {
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (*s == '(')
                PL_expect = XTERM;
            else {
                PL_expect = XOPERATOR;
            }
        }
-       PL_nextval[PL_nexttoke].opval
+       NEXTVAL_NEXTTOKE.opval
            = (OP*)newSVOP(OP_CONST,0,
                           S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
-       PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
+       NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
        force_next(token);
     }
     return s;
@@ -996,7 +1004,7 @@
     if (s && *s) {
        const STRLEN len = strlen(s);
        OP* const o = (OP*)newSVOP(OP_CONST, 0, newSVpvn(s, len));
-       PL_nextval[PL_nexttoke].opval = o;
+       NEXTVAL_NEXTTOKE.opval = o;
        force_next(WORD);
        if (kind) {
            o->op_private = OPpCONST_ENTERED;
@@ -1054,7 +1062,7 @@
     OP *version = NULL;
     char *d;
 
-    s = skipspace(s);
+    s = SKIPSPACE1(s);
 
     d = s;
     if (*d == 'v')
@@ -1078,7 +1086,7 @@
     }
 
     /* NOTE: The parser sees the package name and the VERSION swapped */
-    PL_nextval[PL_nexttoke].opval = version;
+    NEXTVAL_NEXTTOKE.opval = version;
     force_next(WORD);
 
     return s;
@@ -2120,7 +2128,7 @@
     if (*start == '$') {
        if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
            return 0;
-       s = skipspace(s);
+       s = PEEKSPACE(s);
        PL_bufptr = start;
        PL_expect = XREF;
        return *s == '(' ? FUNCMETH : METHOD;
@@ -2136,13 +2144,13 @@
            return 0;
        /* filehandle or package name makes it a method */
        if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
-           s = skipspace(s);
+           s = PEEKSPACE(s);
            if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
                return 0;       /* no assumptions -- "=>" quotes bearword */
       bare_package:
-           PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
+           NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0,
                                                   newSVpvn(tmpbuf,len));
-           PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
+           NEXTVAL_NEXTTOKE.opval->op_private = OPpCONST_BARE;
            PL_expect = XTERM;
            force_next(WORD);
            PL_bufptr = s;
@@ -2346,11 +2354,11 @@
     if (PL_expect != XSTATE)
        yyerror(Perl_form(aTHX_ "\"%s\" not allowed in expression",
                    is_use ? "use" : "no"));
-    s = skipspace(s);
+    s = SKIPSPACE1(s);
     if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
        s = force_version(s, TRUE);
-       if (*s == ';' || (s = skipspace(s), *s == ';')) {
-           PL_nextval[PL_nexttoke].opval = NULL;
+       if (*s == ';' || (s = SKIPSPACE1(s), *s == ';')) {
+           NEXTVAL_NEXTTOKE.opval = NULL;
            force_next(WORD);
        }
        else if (*s == 'v') {
@@ -2454,7 +2462,7 @@
     /* when we've already built the next token, just pull it out of the queue 
*/
     case LEX_KNOWNEXT:
        PL_nexttoke--;
-       yylval = PL_nextval[PL_nexttoke];
+       yylval = NEXTVAL_NEXTTOKE;
        if (!PL_nexttoke) {
            PL_lex_state = PL_lex_defer;
            PL_expect = PL_lex_expect;
@@ -2512,18 +2520,18 @@
                PL_lex_casestack[PL_lex_casemods++] = *s;
                PL_lex_casestack[PL_lex_casemods] = '\0';
                PL_lex_state = LEX_INTERPCONCAT;
-               PL_nextval[PL_nexttoke].ival = 0;
+               NEXTVAL_NEXTTOKE.ival = 0;
                force_next('(');
                if (*s == 'l')
-                   PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
+                   NEXTVAL_NEXTTOKE.ival = OP_LCFIRST;
                else if (*s == 'u')
-                   PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
+                   NEXTVAL_NEXTTOKE.ival = OP_UCFIRST;
                else if (*s == 'L')
-                   PL_nextval[PL_nexttoke].ival = OP_LC;
+                   NEXTVAL_NEXTTOKE.ival = OP_LC;
                else if (*s == 'U')
-                   PL_nextval[PL_nexttoke].ival = OP_UC;
+                   NEXTVAL_NEXTTOKE.ival = OP_UC;
                else if (*s == 'Q')
-                   PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
+                   NEXTVAL_NEXTTOKE.ival = OP_QUOTEMETA;
                else
                    Perl_croak(aTHX_ "panic: yylex");
                PL_bufptr = s + 1;
@@ -2550,7 +2558,7 @@
        PL_lex_dojoin = (*PL_bufptr == '@');
        PL_lex_state = LEX_INTERPNORMAL;
        if (PL_lex_dojoin) {
-           PL_nextval[PL_nexttoke].ival = 0;
+           NEXTVAL_NEXTTOKE.ival = 0;
            force_next(',');
 #ifdef USE_5005THREADS
            PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
@@ -2559,11 +2567,11 @@
 #else
            force_ident("\"", '$');
 #endif /* USE_5005THREADS */
-           PL_nextval[PL_nexttoke].ival = 0;
+           NEXTVAL_NEXTTOKE.ival = 0;
            force_next('$');
-           PL_nextval[PL_nexttoke].ival = 0;
+           NEXTVAL_NEXTTOKE.ival = 0;
            force_next('(');
-           PL_nextval[PL_nexttoke].ival = OP_JOIN;     /* emulate join($", 
...) */
+           NEXTVAL_NEXTTOKE.ival = OP_JOIN;    /* emulate join($", ...) */
            force_next(FUNC);
        }
        if (PL_lex_starts++) {
@@ -2619,7 +2627,7 @@
        }
 
        if (s != PL_bufptr) {
-           PL_nextval[PL_nexttoke] = yylval;
+           NEXTVAL_NEXTTOKE = yylval;
            PL_expect = XTERM;
            force_next(THING);
            if (PL_lex_starts++)
@@ -3127,7 +3135,7 @@
            }
            else if (*s == '>') {
                s++;
-               s = skipspace(s);
+               s = SKIPSPACE1(s);
                if (isIDFIRST_lazy_if(s,UTF)) {
                    s = force_word(s,METHOD,FALSE,TRUE,FALSE);
                    TOKEN(ARROW);
@@ -3225,7 +3233,7 @@
        case XATTRTERM:
            PL_expect = XTERMBLOCK;
         grabattrs:
-           s = skipspace(s);
+           s = PEEKSPACE(s);
            attrs = NULL;
            while (isIDFIRST_lazy_if(s,UTF)) {
                I32 tmp;
@@ -3301,11 +3309,12 @@
                                            newSVOP(OP_CONST, 0,
                                                    newSVpvn(s, len)));
                }
-               s = skipspace(d);
+               s = PEEKSPACE(d);
                if (*s == ':' && s[1] != ':')
-                   s = skipspace(s+1);
+                   s = PEEKSPACE(s+1);
                else if (s == d)
                    break;      /* require real whitespace or :'s */
+               /* XXX losing whitespace on sequential attributes here */
            }
            {
                const char tmp
@@ -3334,7 +3343,7 @@
            }
        got_attrs:
            if (attrs) {
-               PL_nextval[PL_nexttoke].opval = attrs;
+               NEXTVAL_NEXTTOKE.opval = attrs;
                force_next(THING);
            }
            TOKEN(COLONATTR);
@@ -3346,7 +3355,7 @@
            PL_oldbufptr = PL_oldoldbufptr;             /* allow print(STDOUT 
123) */
        else
            PL_expect = XTERM;
-       s = skipspace(s);
+       s = SKIPSPACE1(s);
        TOKEN('(');
     case ';':
        CLINE;
@@ -3357,7 +3366,7 @@
     case ')':
        {
            const char tmp = *s++;
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (*s == '{')
                PREBLOCK(tmp);
            TERM(tmp);
@@ -3432,7 +3441,7 @@
                    PL_lex_brackstack[PL_lex_brackets++] = XTERM;
                else
                    PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
-               s = skipspace(s);
+               s = SKIPSPACE1(s);
                if (*s == '}') {
                    if (PL_expect == XREF && PL_lex_state == LEX_INTERPNORMAL) {
                        PL_expect = XTERM;
@@ -3750,7 +3759,7 @@
        {
            const char tmp = *s;
            if (PL_lex_state == LEX_NORMAL)
-               s = skipspace(s);
+               s = SKIPSPACE1(s);
 
            if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
                && intuit_more(s)) {
@@ -3762,7 +3771,7 @@
                            isSPACE(*t) || isALNUM_lazy_if(t,UTF) || *t == '$';
                            t++) ;
                        if (*t++ == ',') {
-                           PL_bufptr = skipspace(PL_bufptr);
+                           PL_bufptr = PEEKSPACE(PL_bufptr); /* XXX can 
realloc */
                            while (t < PL_bufend && *t != ']')
                                t++;
                            Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
@@ -3851,7 +3860,7 @@
            PREREF('@');
        }
        if (PL_lex_state == LEX_NORMAL)
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
        if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && 
intuit_more(s)) {
            if (*s == '{')
                PL_tokenbuf[0] = '%';
@@ -3864,7 +3873,7 @@
                        t++;
                    if (*t == '}' || *t == ']') {
                        t++;
-                       PL_bufptr = skipspace(PL_bufptr);
+                       PL_bufptr = PEEKSPACE(PL_bufptr); /* XXX can realloc */
                        Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
                            "Scalar value %.*s better written as $%.*s",
                            (int)(t-PL_bufptr), PL_bufptr,
@@ -4273,7 +4282,7 @@
                    bool immediate_paren = *s == '(';
 
                    /* (Now we can afford to cross potential line boundary.) */
-                   s = skipspace(s);
+                   s = SKIPSPACE2(s,nextnextwhite);
 
                    /* Two barewords in a row may indicate method call. */
 
@@ -4316,7 +4325,7 @@
                            goto its_constant;
                        }
                    }
-                   PL_nextval[PL_nexttoke].opval = yylval.opval;
+                   NEXTVAL_NEXTTOKE.opval = yylval.opval;
                    PL_expect = XOPERATOR;
                    force_next(WORD);
                    yylval.ival = 0;
@@ -4384,7 +4393,7 @@
                            PREBLOCK(LSTOPSUB);
                        }
                    }
-                   PL_nextval[PL_nexttoke].opval = yylval.opval;
+                   NEXTVAL_NEXTTOKE.opval = yylval.opval;
                    PL_expect = XTERM;
                    force_next(WORD);
                    TOKEN(NOAMP);
@@ -4624,7 +4633,7 @@
            UNI(OP_CHROOT);
 
        case KEY_do:
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (*s == '{')
                PRETERMBLOCK(DO);
            if (*s != '\'')
@@ -4675,7 +4684,7 @@
            UNI(OP_EXIT);
 
        case KEY_eval:
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
            UNIBRACK(OP_ENTEREVAL);
 
@@ -4713,7 +4722,7 @@
        case KEY_for:
        case KEY_foreach:
            yylval.ival = CopLINE(PL_curcop);
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
                char *p = s;
                if ((PL_bufend - p) >= 3 &&
@@ -4722,11 +4731,11 @@
                else if ((PL_bufend - p) >= 4 &&
                    strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
                    p += 3;
-               p = skipspace(p);
+               p = PEEKSPACE(p);
                if (isIDFIRST_lazy_if(p,UTF)) {
                    p = scan_ident(p, PL_bufend,
                        PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
-                   p = skipspace(p);
+                   p = PEEKSPACE(p);
                }
                if (*p != '$')
                    Perl_croak(aTHX_ "Missing $ on loop variable");
@@ -4937,7 +4946,7 @@
        case KEY_our:
        case KEY_my:
            PL_in_my = tmp;
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (isIDFIRST_lazy_if(s,UTF)) {
                s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
                if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
@@ -4969,13 +4978,13 @@
            OPERATOR(USE);
 
        case KEY_not:
-           if (*s == '(' || (s = skipspace(s), *s == '('))
+           if (*s == '(' || (s = SKIPSPACE1(s), *s == '('))
                FUN1(OP_NOT);
            else
                OPERATOR(NOTOP);
 
        case KEY_open:
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (isIDFIRST_lazy_if(s,UTF)) {
                const char *t;
                for (d = s; isALNUM_lazy_if(d,UTF); d++) ;
@@ -5085,7 +5094,7 @@
                    }
                }
                if (words) {
-                   PL_nextval[PL_nexttoke].opval = words;
+                   NEXTVAL_NEXTTOKE.opval = words;
                    force_next(THING);
                }
            }
@@ -5121,7 +5130,7 @@
            OLDLOP(OP_RETURN);
 
        case KEY_require:
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (isDIGIT(*s)) {
                s = force_version(s, FALSE);
            }
@@ -5289,7 +5298,7 @@
 
        case KEY_sort:
            checkcomma(s,PL_tokenbuf,"subroutine name");
-           s = skipspace(s);
+           s = SKIPSPACE1(s);
            if (*s == ';' || *s == ')')         /* probably a close */
                Perl_croak(aTHX_ "sort is now a reserved word");
            PL_expect = XTERM;
@@ -5409,7 +5418,7 @@
                }
 
                if (have_proto) {
-                   PL_nextval[PL_nexttoke].opval =
+                   NEXTVAL_NEXTTOKE.opval =
                        (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
                    PL_lex_stuff = NULL;
                    force_next(THING);
@@ -9191,7 +9200,7 @@
     register char * const e = d + destlen + 3;    /* two-character token, 
ending NUL */
 
     if (isSPACE(*s))
-       s = skipspace(s);
+       s = PEEKSPACE(s);
     if (isDIGIT(*s)) {
        while (isDIGIT(*s)) {
            if (d >= e)
@@ -9939,8 +9948,9 @@
     char *last = NULL;                 /* last position for nesting bracket */
 
     /* skip space before the delimiter */
-    if (isSPACE(*s))
-       s = skipspace(s);
+    if (isSPACE(*s)) {
+       s = PEEKSPACE(s);
+    }
 
     /* mark where we are, in case we need to report errors */
     CLINE;
@@ -10672,7 +10682,7 @@
        PL_expect = XTERM;
        if (needargs) {
            PL_lex_state = LEX_NORMAL;
-           PL_nextval[PL_nexttoke].ival = 0;
+           NEXTVAL_NEXTTOKE.ival = 0;
            force_next(',');
        }
        else
@@ -10683,9 +10693,9 @@
            else if (PL_encoding)
                sv_recode_to_utf8(stuff, PL_encoding);
        }
-       PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
+       NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0, stuff);
        force_next(THING);
-       PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
+       NEXTVAL_NEXTTOKE.ival = OP_FORMLINE;
        force_next(LSTOP);
     }
     else {
End of Patch.

Reply via email to