Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142195823
D14472.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D14472.diff
View Options
Index: head/contrib/lua/src/llimits.h
===================================================================
--- head/contrib/lua/src/llimits.h
+++ head/contrib/lua/src/llimits.h
@@ -66,7 +66,9 @@
#else
typedef union {
lua_Number n;
+#if LUA_FLOAT_TYPE != LUA_FLOAT_INT64
double u;
+#endif
void *s;
lua_Integer i;
long l;
Index: head/contrib/lua/src/lstrlib.c
===================================================================
--- head/contrib/lua/src/lstrlib.c
+++ head/contrib/lua/src/lstrlib.c
@@ -1134,7 +1134,11 @@
/* dummy structure to get native alignment requirements */
struct cD {
char c;
- union { double d; void *p; lua_Integer i; lua_Number n; } u;
+ union {
+#if LUA_FLOAT_TYPE != LUA_FLOAT_INT64
+ double d;
+#endif
+ void *p; lua_Integer i; lua_Number n; } u;
};
#define MAXALIGN (offsetof(struct cD, u))
@@ -1144,8 +1148,10 @@
** Union for serializing floats
*/
typedef union Ftypes {
+#if LUA_FLOAT_TYPE != LUA_FLOAT_INT64
float f;
double d;
+#endif
lua_Number n;
char buff[5 * sizeof(lua_Number)]; /* enough for any float type */
} Ftypes;
@@ -1235,8 +1241,10 @@
case 'j': *size = sizeof(lua_Integer); return Kint;
case 'J': *size = sizeof(lua_Integer); return Kuint;
case 'T': *size = sizeof(size_t); return Kuint;
+#if LUA_FLOAT_TYPE != LUA_FLOAT_INT64
case 'f': *size = sizeof(float); return Kfloat;
case 'd': *size = sizeof(double); return Kfloat;
+#endif
case 'n': *size = sizeof(lua_Number); return Kfloat;
case 'i': *size = getnumlimit(h, fmt, sizeof(int)); return Kint;
case 'I': *size = getnumlimit(h, fmt, sizeof(int)); return Kuint;
@@ -1369,9 +1377,13 @@
volatile Ftypes u;
char *buff = luaL_prepbuffsize(&b, size);
lua_Number n = luaL_checknumber(L, arg); /* get argument */
+#if LUA_FLOAT_TYPE != LUA_FLOAT_INT64
if (size == sizeof(u.f)) u.f = (float)n; /* copy it into 'u' */
else if (size == sizeof(u.d)) u.d = (double)n;
else u.n = n;
+#else
+ u.n = n;
+#endif
/* move 'u' to final result, correcting endianness if needed */
copywithendian(buff, u.buff, size, h.islittle);
luaL_addsize(&b, size);
@@ -1507,9 +1519,13 @@
volatile Ftypes u;
lua_Number num;
copywithendian(u.buff, data + pos, size, h.islittle);
+#if LUA_FLOAT_TYPE != LUA_FLOAT_INT64
if (size == sizeof(u.f)) num = (lua_Number)u.f;
else if (size == sizeof(u.d)) num = (lua_Number)u.d;
else num = u.n;
+#else
+ num = u.n;
+#endif
lua_pushnumber(L, num);
break;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 18, 2:18 AM (1 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27703132
Default Alt Text
D14472.diff (2 KB)
Attached To
Mode
D14472: When the LUA_FLOAT_TYPE != LUA_FLOAT_INT64, we can't reference float or double so ifdef that code out when the numbers aren't float at all.
Attached
Detach File
Event Timeline
Log In to Comment