better {local,gm}time documentation (from Mark-Jason Dominus)
[p5sagit/p5-mst-13.2.git] / toke.c
diff --git a/toke.c b/toke.c
index a601016..5740442 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -3984,7 +3984,7 @@ Perl_yylex(pTHX)
            LOP(OP_BIND,XTERM);
 
        case KEY_binmode:
-           UNI(OP_BINMODE);
+           LOP(OP_BINMODE,XTERM);
 
        case KEY_bless:
            LOP(OP_BLESS,XTERM);
@@ -6681,7 +6681,6 @@ Perl_scan_num(pTHX_ char *start)
     register char *s = start;          /* current position in buffer */
     register char *d;                  /* destination in temp buffer */
     register char *e;                  /* end of temp buffer */
-    UV tryuv;                          /* used to see if it can be an UV */
     NV value;                          /* number read, as a double */
     SV *sv = Nullsv;                   /* place to put the converted number */
     bool floatit;                      /* boolean: int or float? */
@@ -6939,10 +6938,9 @@ Perl_scan_num(pTHX_ char *start)
        /* make an sv from the string */
        sv = NEWSV(92,0);
 
-#if ( defined(USE_64_BIT_INT) && \
-       (!defined(HAS_STRTOLL)|| !defined(HAS_STRTOULL))) || \
-    (!defined(USE_64_BIT_INT) && \
-       (!defined(HAS_STRTOL) || !defined(HAS_STRTOUL)))
+       /* unfortunately this monster needs to be on one line or
+          makedepend will be confused. */
+#if (defined(USE_64_BIT_INT) && (!defined(HAS_STRTOLL)|| !defined(HAS_STRTOULL))) || (!defined(USE_64_BIT_INT) && (!defined(HAS_STRTOL) || !defined(HAS_STRTOUL)))
 
        /*
           No working strto[u]l[l]. Since atoi() doesn't do range checks,
@@ -6961,15 +6959,17 @@ Perl_scan_num(pTHX_ char *start)
           Note: if floatit is true, then we don't need to do the
           conversion at all.
        */
-       tryuv = U_V(value);
-       if (!floatit && (NV)tryuv == value) {
-           if (tryuv <= IV_MAX)
-               sv_setiv(sv, (IV)tryuv);
+       {
+           UV tryuv = U_V(value);
+           if (!floatit && (NV)tryuv == value) {
+               if (tryuv <= IV_MAX)
+                   sv_setiv(sv, (IV)tryuv);
+               else
+                   sv_setuv(sv, tryuv);
+           }
            else
-               sv_setuv(sv, tryuv);
+               sv_setnv(sv, value);
        }
-       else
-           sv_setnv(sv, value);
 #else
        /*
           strtol/strtoll sets errno to ERANGE if the number is too big
@@ -7003,7 +7003,8 @@ Perl_scan_num(pTHX_ char *start)
        if (floatit) {
            char *tp;
            errno = 0;
-#ifdef USE_LONG_DOUBLE
+/* For some reason VMS doesn't have strrold at the moment. Dunno why */
+#if defined(USE_LONG_DOUBLE) && (defined(HAS_STRTOLD) || !defined(VMS))
            value = strtold(PL_tokenbuf,&tp);
 #else
            value = strtod(PL_tokenbuf,&tp);
@@ -7021,7 +7022,7 @@ Perl_scan_num(pTHX_ char *start)
                              sv, Nullsv, NULL);
        break;
 
-    /* if it starts with a v, it could be a version number */
+    /* if it starts with a v, it could be a v-string */
     case 'v':
 vstring:
        {