At 8:42 on 02/06/2002 PST, "Brent Dax" <[EMAIL PROTECTED]> wrote:
> Andy Dougherty:
> # On Wed, 6 Feb 2002, Mattia Barbon wrote:
> # > Probably not: IIRC the standard requires the parts inside
> # > #if 0/#endif to be tokenizable.
> #
> # If I recall correctly, some AIX compilers will complain about
> # such code,
> # so this is a real-world issue, not just a theoretical possibility.
> 
> Then just delete the stuff.  It's just some Perl 5 code I tried to adapt
> to Parrot but gave up on.

OK.  Revised patch:

Index: misc.c
===================================================================
RCS file: /home/perlcvs/parrot/misc.c,v
retrieving revision 1.6
diff -u -r1.6 misc.c
--- misc.c      5 Feb 2002 17:15:22 -0000       1.6
+++ misc.c      6 Feb 2002 16:52:58 -0000
@@ -160,7 +160,7 @@
 
                buf[i+len]=0;
        }
-       else { //right-align
+       else { /* right-align */
                memmove(buf+howmuch, buf, (size_t)len);
 
                for(i=0; i < howmuch; i++) {
@@ -515,739 +515,3 @@
        va_end(args);
 }
 
-#if 0
-void   /* barely started conversion to Parrot, but abandoned it. */
-perl5s_vsprintf(struct Parrot_Interp *interpreter, STRING *targ, const char *pat, 
INTVAL patlen, va_list *args)
-{
-    char *p;
-    char *q;
-    char *patend;
-    INTVAL origlen;
-    INTVAL svix = 0;
-    static char nullstr[] = "(null)";
-    STRING *argsv = NULL;
-
-    /* special-case "", "%s", and "%_" */
-       if (patlen == 0) {
-               return;
-       }
-
-    if (patlen == 2 && pat[0] == '%') {
-       switch (pat[1]) {
-       case 's':
-           if (args) {
-                       char *s = va_arg(*args, char*);
-                       //sv_catpv(sv, s ? s : nullstr);
-                       targ=string_concat(interpreter, "
-           }
-           else if (svix < svmax) {
-               sv_catsv(sv, *svargs);
-               if (DO_UTF8(*svargs))
-                   SvUTF8_on(sv);
-           }
-           return;
-       case '_':
-           if (args) {
-               argsv = va_arg(*args, SV*);
-               sv_catsv(sv, argsv);
-               if (DO_UTF8(argsv))
-                   SvUTF8_on(sv);
-               return;
-           }
-           /* See comment on '_' below */
-           break;
-       }
-    }
-
-    patend = (char*)pat + patlen;
-    for (p = (char*)pat; p < patend; p = q) {
-       bool alt = FALSE;
-       bool left = FALSE;
-       bool vectorize = FALSE;
-       bool vectorarg = FALSE;
-       bool vec_utf = FALSE;
-       char fill = ' ';
-       char plus = 0;
-       char intsize = 0;
-       INTVAL width = 0;
-       INTVAL zeros = 0;
-       bool has_precis = FALSE;
-       INTVAL precis = 0;
-       bool is_utf = FALSE;
-       
-       char esignbuf[4];
-       U8 utf8buf[UTF8_MAXLEN+1];
-       INTVAL esignlen = 0;
-
-       char *eptr = Nullch;
-       INTVAL elen = 0;
-       /* Times 4: a decimal digit takes more than 3 binary digits.
-        * NV_DIG: mantissa takes than many decimal digits.
-        * Plus 32: Playing safe. */
-       char ebuf[IV_DIG * 4 + NV_DIG + 32];
-        /* large enough for "%#.#f" --chip */
-       /* what about long double NVs? --jhi */
-
-       SV *vecsv;
-       U8 *vecstr = Null(U8*);
-       INTVAL veclen = 0;
-       char c;
-       int i;
-       unsigned base = 0;
-       IV iv = 0;
-       UV uv = 0;
-       NV nv;
-       INTVAL have;
-       INTVAL need;
-       INTVAL gap;
-       char *dotstr = ".";
-       INTVAL dotstrlen = 1;
-       INTVAL efix = 0; /* explicit format parameter index */
-       INTVAL ewix = 0; /* explicit width index */
-       INTVAL epix = 0; /* explicit precision index */
-       INTVAL evix = 0; /* explicit vector index */
-       bool asterisk = FALSE;
-
-       /* echo everything up to the next format specification */
-       for (q = p; q < patend && *q != '%'; ++q) ;
-       if (q > p) {
-           sv_catpvn(sv, p, q - p);
-           p = q;
-       }
-       if (q++ >= patend)
-           break;
-
-/*
-    We allow format specification elements in this order:
-       \d+\$              explicit format parameter index
-       [-+ 0#]+           flags
-       \*?(\d+\$)?v       vector with optional (optionally specified) arg
-       \d+|\*(\d+\$)?     width using optional (optionally specified) arg
-       \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
-       [hlqLV]            size
-    [%bcdefginopsux_DFOUX] format (mandatory)
-*/
-       if (EXPECT_NUMBER(q, width)) {
-           if (*q == '$') {
-               ++q;
-               efix = width;
-           } else {
-               goto gotwidth;
-           }
-       }
-
-       /* FLAGS */
-
-       while (*q) {
-           switch (*q) {
-           case ' ':
-           case '+':
-               plus = *q++;
-               continue;
-
-           case '-':
-               left = TRUE;
-               q++;
-               continue;
-
-           case '0':
-               fill = *q++;
-               continue;
-
-           case '#':
-               alt = TRUE;
-               q++;
-               continue;
-
-           default:
-               break;
-           }
-           break;
-       }
-
-      tryasterisk:
-       if (*q == '*') {
-           q++;
-           if (EXPECT_NUMBER(q, ewix))
-               if (*q++ != '$')
-                   goto unknown;
-           asterisk = TRUE;
-       }
-       if (*q == 'v') {
-           q++;
-           if (vectorize)
-               goto unknown;
-           if ((vectorarg = asterisk)) {
-               evix = ewix;
-               ewix = 0;
-               asterisk = FALSE;
-           }
-           vectorize = TRUE;
-           goto tryasterisk;
-       }
-
-       if (!asterisk)
-           EXPECT_NUMBER(q, width);
-
-       if (vectorize) {
-           if (vectorarg) {
-               if (args)
-                   vecsv = va_arg(*args, SV*);
-               else
-                   vecsv = (evix ? evix <= svmax : svix < svmax) ?
-                       svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
-               dotstr = SvPVx(vecsv, dotstrlen);
-               if (DO_UTF8(vecsv))
-                   is_utf = TRUE;
-           }
-           if (args) {
-               vecsv = va_arg(*args, SV*);
-               vecstr = (U8*)SvPVx(vecsv,veclen);
-               vec_utf = DO_UTF8(vecsv);
-           }
-           else if (efix ? efix <= svmax : svix < svmax) {
-               vecsv = svargs[efix ? efix-1 : svix++];
-               vecstr = (U8*)SvPVx(vecsv,veclen);
-               vec_utf = DO_UTF8(vecsv);
-           }
-           else {
-               vecstr = (U8*)"";
-               veclen = 0;
-           }
-       }
-
-       if (asterisk) {
-           if (args)
-               i = va_arg(*args, int);
-           else
-               i = (ewix ? ewix <= svmax : svix < svmax) ?
-                   SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
-           left |= (i < 0);
-           width = (i < 0) ? -i : i;
-       }
-      gotwidth:
-
-       /* PRECISION */
-
-       if (*q == '.') {
-           q++;
-           if (*q == '*') {
-               q++;
-               if (EXPECT_NUMBER(q, epix) && *q++ != '$') /* epix currently unused */
-                   goto unknown;
-               if (args)
-                   i = va_arg(*args, int);
-               else
-                   i = (ewix ? ewix <= svmax : svix < svmax)
-                       ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
-               precis = (i < 0) ? 0 : i;
-           }
-           else {
-               precis = 0;
-               while (isDIGIT(*q))
-                   precis = precis * 10 + (*q++ - '0');
-           }
-           has_precis = TRUE;
-       }
-
-       /* SIZE */
-
-       switch (*q) {
-#if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
-       case 'L':                       /* Ld */
-           /* FALL THROUGH */
-#endif
-#ifdef HAS_QUAD
-       case 'q':                       /* qd */
-           intsize = 'q';
-           q++;
-           break;
-#endif
-       case 'l':
-#if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
-             if (*(q + 1) == 'l') {    /* lld, llf */
-               intsize = 'q';
-               q += 2;
-               break;
-            }
-#endif
-           /* FALL THROUGH */
-       case 'h':
-           /* FALL THROUGH */
-       case 'V':
-           intsize = *q++;
-           break;
-       }
-
-       /* CONVERSION */
-
-       if (*q == '%') {
-           eptr = q++;
-           elen = 1;
-           goto string;
-       }
-
-       if (!args)
-           argsv = (efix ? efix <= svmax : svix < svmax) ?
-                   svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
-
-       switch (c = *q++) {
-
-           /* STRINGS */
-
-       case 'c':
-           uv = args ? va_arg(*args, int) : SvIVx(argsv);
-           if ((uv > 255 ||
-                (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
-               && !IN_BYTES) {
-               eptr = (char*)utf8buf;
-               elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
-               is_utf = TRUE;
-           }
-           else {
-               c = (char)uv;
-               eptr = &c;
-               elen = 1;
-           }
-           goto string;
-
-       case 's':
-           if (args) {
-               eptr = va_arg(*args, char*);
-               if (eptr)
-#ifdef MACOS_TRADITIONAL
-                 /* On MacOS, %#s format is used for Pascal strings */
-                 if (alt)
-                   elen = *eptr++;
-                 else
-#endif
-                   elen = strlen(eptr);
-               else {
-                   eptr = nullstr;
-                   elen = sizeof nullstr - 1;
-               }
-           }
-           else {
-               eptr = SvPVx(argsv, elen);
-               if (DO_UTF8(argsv)) {
-                   if (has_precis && precis < elen) {
-                       INTVAL p = precis;
-                       sv_pos_u2b(argsv, &p, 0); /* sticks at end */
-                       precis = p;
-                   }
-                   if (width) { /* fudge width (can't fudge elen) */
-                       width += elen - sv_len_utf8(argsv);
-                   }
-                   is_utf = TRUE;
-               }
-           }
-           goto string;
-
-       case '_':
-           /*
-            * The "%_" hack might have to be changed someday,
-            * if ISO or ANSI decide to use '_' for something.
-            * So we keep it hidden from users' code.
-            */
-           if (!args)
-               goto unknown;
-           argsv = va_arg(*args, SV*);
-           eptr = SvPVx(argsv, elen);
-           if (DO_UTF8(argsv))
-               is_utf = TRUE;
-
-       string:
-           vectorize = FALSE;
-           if (has_precis && elen > precis)
-               elen = precis;
-           break;
-
-           /* INTEGERS */
-
-       case 'p':
-           if (alt)
-               goto unknown;
-           uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
-           base = 16;
-           goto integer;
-
-       case 'D':
-#ifdef IV_IS_QUAD
-           intsize = 'q';
-#else
-           intsize = 'l';
-#endif
-           /* FALL THROUGH */
-       case 'd':
-       case 'i':
-           if (vectorize) {
-               INTVAL ulen;
-               if (!veclen)
-                   continue;
-               if (vec_utf)
-                   uv = utf8n_to_uvchr(vecstr, veclen, &ulen, UTF8_ALLOW_ANYUV);
-               else {
-                   uv = *vecstr;
-                   ulen = 1;
-               }
-               vecstr += ulen;
-               veclen -= ulen;
-               if (plus)
-                    esignbuf[esignlen++] = plus;
-           }
-           else if (args) {
-               switch (intsize) {
-               case 'h':       iv = (short)va_arg(*args, int); break;
-               default:        iv = va_arg(*args, int); break;
-               case 'l':       iv = va_arg(*args, long); break;
-               case 'V':       iv = va_arg(*args, IV); break;
-#ifdef HAS_QUAD
-               case 'q':       iv = va_arg(*args, Quad_t); break;
-#endif
-               }
-           }
-           else {
-               iv = SvIVx(argsv);
-               switch (intsize) {
-               case 'h':       iv = (short)iv; break;
-               default:        break;
-               case 'l':       iv = (long)iv; break;
-               case 'V':       break;
-#ifdef HAS_QUAD
-               case 'q':       iv = (Quad_t)iv; break;
-#endif
-               }
-           }
-           if ( !vectorize )   /* we already set uv above */
-           {
-               if (iv >= 0) {
-                   uv = iv;
-                   if (plus)
-                       esignbuf[esignlen++] = plus;
-               }
-               else {
-                   uv = -iv;
-                   esignbuf[esignlen++] = '-';
-               }
-           }
-           base = 10;
-           goto integer;
-
-       case 'U':
-#ifdef IV_IS_QUAD
-           intsize = 'q';
-#else
-           intsize = 'l';
-#endif
-           /* FALL THROUGH */
-       case 'u':
-           base = 10;
-           goto uns_integer;
-
-       case 'b':
-           base = 2;
-           goto uns_integer;
-
-       case 'O':
-#ifdef IV_IS_QUAD
-           intsize = 'q';
-#else
-           intsize = 'l';
-#endif
-           /* FALL THROUGH */
-       case 'o':
-           base = 8;
-           goto uns_integer;
-
-       case 'X':
-       case 'x':
-           base = 16;
-
-       uns_integer:
-           if (vectorize) {
-               INTVAL ulen;
-       vector:
-               if (!veclen)
-                   continue;
-               if (vec_utf)
-                   uv = utf8n_to_uvchr(vecstr, veclen, &ulen, UTF8_ALLOW_ANYUV);
-               else {
-                   uv = *vecstr;
-                   ulen = 1;
-               }
-               vecstr += ulen;
-               veclen -= ulen;
-           }
-           else if (args) {
-               switch (intsize) {
-               case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
-               default:   uv = va_arg(*args, unsigned); break;
-               case 'l':  uv = va_arg(*args, unsigned long); break;
-               case 'V':  uv = va_arg(*args, UV); break;
-#ifdef HAS_QUAD
-               case 'q':  uv = va_arg(*args, Quad_t); break;
-#endif
-               }
-           }
-           else {
-               uv = SvUVx(argsv);
-               switch (intsize) {
-               case 'h':       uv = (unsigned short)uv; break;
-               default:        break;
-               case 'l':       uv = (unsigned long)uv; break;
-               case 'V':       break;
-#ifdef HAS_QUAD
-               case 'q':       uv = (Quad_t)uv; break;
-#endif
-               }
-           }
-
-       integer:
-           eptr = ebuf + sizeof ebuf;
-           switch (base) {
-               unsigned dig;
-           case 16:
-               if (!uv)
-                   alt = FALSE;
-               p = (char*)((c == 'X')
-                           ? "0123456789ABCDEF" : "0123456789abcdef");
-               do {
-                   dig = uv & 15;
-                   *--eptr = p[dig];
-               } while (uv >>= 4);
-               if (alt) {
-                   esignbuf[esignlen++] = '0';
-                   esignbuf[esignlen++] = c;  /* 'x' or 'X' */
-               }
-               break;
-           case 8:
-               do {
-                   dig = uv & 7;
-                   *--eptr = '0' + dig;
-               } while (uv >>= 3);
-               if (alt && *eptr != '0')
-                   *--eptr = '0';
-               break;
-           case 2:
-               do {
-                   dig = uv & 1;
-                   *--eptr = '0' + dig;
-               } while (uv >>= 1);
-               if (alt) {
-                   esignbuf[esignlen++] = '0';
-                   esignbuf[esignlen++] = 'b';
-               }
-               break;
-           default:            /* it had better be ten or less */
-#if defined(PERL_Y2KWARN)
-               if (ckWARN(WARN_Y2K)) {
-                   INTVAL n;
-                   char *s = SvPV(sv,n);
-                   if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
-                       && (n == 2 || !isDIGIT(s[n-3])))
-                   {
-                       Perl_warner(aTHX_ WARN_Y2K,
-                                   "Possible Y2K bug: %%%c %s",
-                                   c, "format string following '19'");
-                   }
-               }
-#endif
-               do {
-                   dig = uv % base;
-                   *--eptr = '0' + dig;
-               } while (uv /= base);
-               break;
-           }
-           elen = (ebuf + sizeof ebuf) - eptr;
-           if (has_precis) {
-               if (precis > elen)
-                   zeros = precis - elen;
-               else if (precis == 0 && elen == 1 && *eptr == '0')
-                   elen = 0;
-           }
-           break;
-
-           /* FLOATING POINT */
-
-       case 'F':
-           c = 'f';            /* maybe %F isn't supported here */
-           /* FALL THROUGH */
-       case 'e': case 'E':
-       case 'f':
-       case 'g': case 'G':
-
-           /* This is evil, but floating point is even more evil */
-
-           vectorize = FALSE;
-           nv = args ? va_arg(*args, NV) : SvNVx(argsv);
-
-           need = 0;
-           if (c != 'e' && c != 'E') {
-               i = PERL_INT_MIN;
-               (void)Perl_frexp(nv, &i);
-               if (i == PERL_INT_MIN)
-                   Perl_die(aTHX_ "panic: frexp");
-               if (i > 0)
-                   need = BIT_DIGITS(i);
-           }
-           need += has_precis ? precis : 6; /* known default */
-           if (need < width)
-               need = width;
-
-           need += 20; /* fudge factor */
-           if (PL_efloatsize < need) {
-               Safefree(PL_efloatbuf);
-               PL_efloatsize = need + 20; /* more fudge */
-               New(906, PL_efloatbuf, PL_efloatsize, char);
-               PL_efloatbuf[0] = '\0';
-           }
-
-           eptr = ebuf + sizeof ebuf;
-           *--eptr = '\0';
-           *--eptr = c;
-#if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
-           {
-               /* Copy the one or more characters in a long double
-                * format before the 'base' ([efgEFG]) character to
-                * the format string. */
-               static char const prifldbl[] = PERL_PRIfldbl;
-               char const *p = prifldbl + sizeof(prifldbl) - 3;
-               while (p >= prifldbl) { *--eptr = *p--; }
-           }
-#endif
-           if (has_precis) {
-               base = precis;
-               do { *--eptr = '0' + (base % 10); } while (base /= 10);
-               *--eptr = '.';
-           }
-           if (width) {
-               base = width;
-               do { *--eptr = '0' + (base % 10); } while (base /= 10);
-           }
-           if (fill == '0')
-               *--eptr = fill;
-           if (left)
-               *--eptr = '-';
-           if (plus)
-               *--eptr = plus;
-           if (alt)
-               *--eptr = '#';
-           *--eptr = '%';
-
-           /* No taint.  Otherwise we are in the strange situation
-            * where printf() taints but print($float) doesn't.
-            * --jhi */
-           (void)sprintf(PL_efloatbuf, eptr, nv);
-
-           eptr = PL_efloatbuf;
-           elen = strlen(PL_efloatbuf);
-           break;
-
-           /* SPECIAL */
-
-       case 'n':
-           vectorize = FALSE;
-           i = SvCUR(sv) - origlen;
-           if (args) {
-               switch (intsize) {
-               case 'h':       *(va_arg(*args, short*)) = i; break;
-               default:        *(va_arg(*args, int*)) = i; break;
-               case 'l':       *(va_arg(*args, long*)) = i; break;
-               case 'V':       *(va_arg(*args, IV*)) = i; break;
-#ifdef HAS_QUAD
-               case 'q':       *(va_arg(*args, Quad_t*)) = i; break;
-#endif
-               }
-           }
-           else
-               sv_setuv_mg(argsv, (UV)i);
-           continue;   /* not "break" */
-
-           /* UNKNOWN */
-
-       default:
-      unknown:
-           vectorize = FALSE;
-           if (!args && ckWARN(WARN_PRINTF) &&
-                 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
-               SV *msg = sv_newmortal();
-               Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
-                         (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
-               if (c) {
-                   if (isPRINT(c))
-                       Perl_sv_catpvf(aTHX_ msg,
-                                      "\"%%%c\"", c & 0xFF);
-                   else
-                       Perl_sv_catpvf(aTHX_ msg,
-                                      "\"%%\\%03"UVof"\"",
-                                      (UV)c & 0xFF);
-               } else
-                   sv_catpv(msg, "end of string");
-               Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant 
*/
-           }
-
-           /* output mangled stuff ... */
-           if (c == '\0')
-               --q;
-           eptr = p;
-           elen = q - p;
-
-           /* ... right here, because formatting flags should not apply */
-           SvGROW(sv, SvCUR(sv) + elen + 1);
-           p = SvEND(sv);
-           Copy(eptr, p, elen, char);
-           p += elen;
-           *p = '\0';
-           SvCUR(sv) = p - SvPVX(sv);
-           continue;   /* not "break" */
-       }
-
-       have = esignlen + zeros + elen;
-       need = (have > width ? have : width);
-       gap = need - have;
-
-       SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
-       p = SvEND(sv);
-       if (esignlen && fill == '0') {
-           for (i = 0; i < esignlen; i++)
-               *p++ = esignbuf[i];
-       }
-       if (gap && !left) {
-           memset(p, fill, gap);
-           p += gap;
-       }
-       if (esignlen && fill != '0') {
-           for (i = 0; i < esignlen; i++)
-               *p++ = esignbuf[i];
-       }
-       if (zeros) {
-           for (i = zeros; i; i--)
-               *p++ = '0';
-       }
-       if (elen) {
-           Copy(eptr, p, elen, char);
-           p += elen;
-       }
-       if (gap && left) {
-           memset(p, ' ', gap);
-           p += gap;
-       }
-       if (vectorize) {
-           if (veclen) {
-               Copy(dotstr, p, dotstrlen, char);
-               p += dotstrlen;
-           }
-           else
-               vectorize = FALSE;              /* done iterating over vecstr */
-       }
-       if (is_utf)
-           SvUTF8_on(sv);
-       *p = '\0';
-       SvCUR(sv) = p - SvPVX(sv);
-       if (vectorize) {
-           esignlen = 0;
-           goto vector;
-       }
-    }
-}
-#endif
Index: warnings.c
===================================================================
RCS file: /home/perlcvs/parrot/warnings.c,v
retrieving revision 1.1
diff -u -r1.1 warnings.c
--- warnings.c  5 Feb 2002 13:12:07 -0000       1.1
+++ warnings.c  6 Feb 2002 16:52:58 -0000
@@ -58,4 +58,4 @@
        else {
                return 1;
        }
-}
\ No newline at end of file
+}


Reply via email to