Kaynağa Gözat

fix number2integer conversion in ESP8266 for floating-point builds (#2609)

Javier Peletier 5 yıl önce
ebeveyn
işleme
c6653b5921
1 değiştirilmiş dosya ile 13 ekleme ve 3 silme
  1. 13 3
      app/lua/luaconf.h

+ 13 - 3
app/lua/luaconf.h

@@ -717,8 +717,18 @@ union luai_Cast { double l_d; long l_l; };
 
 /* this option always works, but may be slow */
 #else
-#define lua_number2int(i,d)	((i)=(int)(d))
-#define lua_number2integer(i,d)	((i)=(lua_Integer)(d))
+
+#ifdef LUA_NUMBER_INTEGRAL
+
+#define lua_number2int(i, d) ((i) = (int)(d))
+#define lua_number2integer(i, d) ((i) = (lua_Integer)(d))
+
+#else // for floating-point builds, cast to a larger integer first to avoid undefined behavior on overflows.
+
+#define lua_number2int(i, d) ((i) = (int)(long long)(d))
+#define lua_number2integer(i, d) ((i) = (lua_Integer)(long long)(d))
+
+#endif // LUA_NUMBER_INTEGRAL
 
 #endif
 
@@ -900,4 +910,4 @@ union luai_Cast { double l_d; long l_l; };
 #error "Pipes not supported in aggresive optimization mode (LUA_OPTIMIZE_MEMORY=2)"
 #endif
 
-#endif
+#endif