瀏覽代碼

Detail

Warnings with clang when using long double for Lua floats.
Roberto Ierusalimschy 3 年之前
父節點
當前提交
8dd2c912d2
共有 3 個文件被更改,包括 8 次插入8 次删除
  1. 1 1
      lcode.c
  2. 2 2
      lmathlib.c
  3. 5 5
      lobject.c

+ 1 - 1
lcode.c

@@ -607,7 +607,7 @@ static int luaK_numberK (FuncState *fs, lua_Number r) {
     return addk(fs, &o, &o);  /* use number itself as key */
     return addk(fs, &o, &o);  /* use number itself as key */
   else {  /* must build an alternative key */
   else {  /* must build an alternative key */
     const int nbm = l_floatatt(MANT_DIG);
     const int nbm = l_floatatt(MANT_DIG);
-    const lua_Number q = l_mathop(ldexp)(1.0, -nbm + 1);
+    const lua_Number q = l_mathop(ldexp)(l_mathop(1.0), -nbm + 1);
     const lua_Number k = (ik == 0) ? q : r + r*q;  /* new key */
     const lua_Number k = (ik == 0) ? q : r + r*q;  /* new key */
     TValue kv;
     TValue kv;
     setfltvalue(&kv, k);
     setfltvalue(&kv, k);

+ 2 - 2
lmathlib.c

@@ -475,7 +475,7 @@ static lua_Number I2d (Rand64 x) {
 
 
 /* 2^(-FIGS) = 1.0 / 2^30 / 2^3 / 2^(FIGS-33) */
 /* 2^(-FIGS) = 1.0 / 2^30 / 2^3 / 2^(FIGS-33) */
 #define scaleFIG  \
 #define scaleFIG  \
-	((lua_Number)1.0 / (UONE << 30) / 8.0 / (UONE << (FIGS - 33)))
+    (l_mathop(1.0) / (UONE << 30) / l_mathop(8.0) / (UONE << (FIGS - 33)))
 
 
 /*
 /*
 ** use FIGS - 32 bits from lower half, throwing out the other
 ** use FIGS - 32 bits from lower half, throwing out the other
@@ -486,7 +486,7 @@ static lua_Number I2d (Rand64 x) {
 /*
 /*
 ** higher 32 bits go after those (FIGS - 32) bits: shiftHI = 2^(FIGS - 32)
 ** higher 32 bits go after those (FIGS - 32) bits: shiftHI = 2^(FIGS - 32)
 */
 */
-#define shiftHI		((lua_Number)(UONE << (FIGS - 33)) * 2.0)
+#define shiftHI		((lua_Number)(UONE << (FIGS - 33)) * l_mathop(2.0))
 
 
 
 
 static lua_Number I2d (Rand64 x) {
 static lua_Number I2d (Rand64 x) {

+ 5 - 5
lobject.c

@@ -164,7 +164,7 @@ static int isneg (const char **s) {
 */
 */
 static lua_Number lua_strx2number (const char *s, char **endptr) {
 static lua_Number lua_strx2number (const char *s, char **endptr) {
   int dot = lua_getlocaledecpoint();
   int dot = lua_getlocaledecpoint();
-  lua_Number r = 0.0;  /* result (accumulator) */
+  lua_Number r = l_mathop(0.0);  /* result (accumulator) */
   int sigdig = 0;  /* number of significant digits */
   int sigdig = 0;  /* number of significant digits */
   int nosigdig = 0;  /* number of non-significant digits */
   int nosigdig = 0;  /* number of non-significant digits */
   int e = 0;  /* exponent correction */
   int e = 0;  /* exponent correction */
@@ -174,7 +174,7 @@ static lua_Number lua_strx2number (const char *s, char **endptr) {
   while (lisspace(cast_uchar(*s))) s++;  /* skip initial spaces */
   while (lisspace(cast_uchar(*s))) s++;  /* skip initial spaces */
   neg = isneg(&s);  /* check sign */
   neg = isneg(&s);  /* check sign */
   if (!(*s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X')))  /* check '0x' */
   if (!(*s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X')))  /* check '0x' */
-    return 0.0;  /* invalid format (no '0x') */
+    return l_mathop(0.0);  /* invalid format (no '0x') */
   for (s += 2; ; s++) {  /* skip '0x' and read numeral */
   for (s += 2; ; s++) {  /* skip '0x' and read numeral */
     if (*s == dot) {
     if (*s == dot) {
       if (hasdot) break;  /* second dot? stop loop */
       if (hasdot) break;  /* second dot? stop loop */
@@ -184,14 +184,14 @@ static lua_Number lua_strx2number (const char *s, char **endptr) {
       if (sigdig == 0 && *s == '0')  /* non-significant digit (zero)? */
       if (sigdig == 0 && *s == '0')  /* non-significant digit (zero)? */
         nosigdig++;
         nosigdig++;
       else if (++sigdig <= MAXSIGDIG)  /* can read it without overflow? */
       else if (++sigdig <= MAXSIGDIG)  /* can read it without overflow? */
-          r = (r * cast_num(16.0)) + luaO_hexavalue(*s);
+          r = (r * l_mathop(16.0)) + luaO_hexavalue(*s);
       else e++; /* too many digits; ignore, but still count for exponent */
       else e++; /* too many digits; ignore, but still count for exponent */
       if (hasdot) e--;  /* decimal digit? correct exponent */
       if (hasdot) e--;  /* decimal digit? correct exponent */
     }
     }
     else break;  /* neither a dot nor a digit */
     else break;  /* neither a dot nor a digit */
   }
   }
   if (nosigdig + sigdig == 0)  /* no digits? */
   if (nosigdig + sigdig == 0)  /* no digits? */
-    return 0.0;  /* invalid format */
+    return l_mathop(0.0);  /* invalid format */
   *endptr = cast_charp(s);  /* valid up to here */
   *endptr = cast_charp(s);  /* valid up to here */
   e *= 4;  /* each digit multiplies/divides value by 2^4 */
   e *= 4;  /* each digit multiplies/divides value by 2^4 */
   if (*s == 'p' || *s == 'P') {  /* exponent part? */
   if (*s == 'p' || *s == 'P') {  /* exponent part? */
@@ -200,7 +200,7 @@ static lua_Number lua_strx2number (const char *s, char **endptr) {
     s++;  /* skip 'p' */
     s++;  /* skip 'p' */
     neg1 = isneg(&s);  /* sign */
     neg1 = isneg(&s);  /* sign */
     if (!lisdigit(cast_uchar(*s)))
     if (!lisdigit(cast_uchar(*s)))
-      return 0.0;  /* invalid; must have at least one digit */
+      return l_mathop(0.0);  /* invalid; must have at least one digit */
     while (lisdigit(cast_uchar(*s)))  /* read exponent */
     while (lisdigit(cast_uchar(*s)))  /* read exponent */
       exp1 = exp1 * 10 + *(s++) - '0';
       exp1 = exp1 * 10 + *(s++) - '0';
     if (neg1) exp1 = -exp1;
     if (neg1) exp1 = -exp1;