aboutsummaryrefslogtreecommitdiff
path: root/lobject.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2012-05-11 11:10:50 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2012-05-11 11:10:50 -0300
commit77cbd817d1a525a161f8f24e98459191edb9a181 (patch)
tree0a5c621a34772b73b3b52559afccdc6decce9afa /lobject.h
parent4ec7d6de95bcf9fa35a9b268a41154b142190691 (diff)
downloadlua-77cbd817d1a525a161f8f24e98459191edb9a181.tar.gz
lua-77cbd817d1a525a161f8f24e98459191edb9a181.tar.bz2
lua-77cbd817d1a525a161f8f24e98459191edb9a181.zip
better(?) handling of '#define's for IEEE-related tricks + avoid using
IEEE trick for 64-bit integer types (lua_Integer on 64-bit machines)
Diffstat (limited to 'lobject.h')
-rw-r--r--lobject.h37
1 files changed, 19 insertions, 18 deletions
diff --git a/lobject.h b/lobject.h
index 1fa6df80..1d29a22c 100644
--- a/lobject.h
+++ b/lobject.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.h,v 2.68 2012/01/25 21:05:40 roberto Exp roberto $ 2** $Id: lobject.h,v 2.69 2012/05/08 13:53:33 roberto Exp roberto $
3** Type definitions for Lua objects 3** Type definitions for Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -266,6 +266,8 @@ typedef struct lua_TValue TValue;
266#define setsvalue2n setsvalue 266#define setsvalue2n setsvalue
267 267
268 268
269/* check whether a number is valid (useful only for NaN trick) */
270#define luai_checknum(L,o,c) { /* empty */ }
269 271
270 272
271/* 273/*
@@ -273,10 +275,7 @@ typedef struct lua_TValue TValue;
273** NaN Trick 275** NaN Trick
274** ======================================================= 276** =======================================================
275*/ 277*/
276 278#if defined(LUA_NANTRICK)
277#if defined(LUA_NANTRICK) \
278 || defined(LUA_NANTRICK_LE) \
279 || defined(LUA_NANTRICK_BE)
280 279
281/* 280/*
282** numbers are represented in the 'd_' field. All other values have the 281** numbers are represented in the 'd_' field. All other values have the
@@ -284,15 +283,23 @@ typedef struct lua_TValue TValue;
284** a "signaled NaN", which is never generated by regular operations by 283** a "signaled NaN", which is never generated by regular operations by
285** the CPU (nor by 'strtod') 284** the CPU (nor by 'strtod')
286*/ 285*/
287#if !defined(NNMARK) 286
287/* allows for external implementation for part of the trick */
288#if !defined(NNMARK) /* { */
289
290
291#if !defined(LUA_IEEEENDIAN)
292#error option 'LUA_NANTRICK' needs 'LUA_IEEEENDIAN'
293#endif
294
295
288#define NNMARK 0x7FF7A500 296#define NNMARK 0x7FF7A500
289#define NNMASK 0x7FFFFF00 297#define NNMASK 0x7FFFFF00
290#endif
291 298
292#undef TValuefields 299#undef TValuefields
293#undef NILCONSTANT 300#undef NILCONSTANT
294 301
295#if defined(LUA_NANTRICK_LE) 302#if (LUA_IEEEENDIAN == 0) /* { */
296 303
297/* little endian */ 304/* little endian */
298#define TValuefields \ 305#define TValuefields \
@@ -303,7 +310,7 @@ typedef struct lua_TValue TValue;
303#define d_(o) ((o)->u.d__) 310#define d_(o) ((o)->u.d__)
304#define tt_(o) ((o)->u.i.tt__) 311#define tt_(o) ((o)->u.i.tt__)
305 312
306#elif defined(LUA_NANTRICK_BE) 313#else /* }{ */
307 314
308/* big endian */ 315/* big endian */
309#define TValuefields \ 316#define TValuefields \
@@ -314,10 +321,9 @@ typedef struct lua_TValue TValue;
314#define d_(o) ((o)->u.d__) 321#define d_(o) ((o)->u.d__)
315#define tt_(o) ((o)->u.i.tt__) 322#define tt_(o) ((o)->u.i.tt__)
316 323
317#elif !defined(TValuefields) 324#endif /* } */
318#error option 'LUA_NANTRICK' needs declaration for 'TValuefields'
319 325
320#endif 326#endif /* } */
321 327
322 328
323/* correspondence with standard representation */ 329/* correspondence with standard representation */
@@ -367,14 +373,9 @@ typedef struct lua_TValue TValue;
367 (ttisnumber(o1) ? ttisnumber(o2) : (tt_(o1) == tt_(o2))) 373 (ttisnumber(o1) ? ttisnumber(o2) : (tt_(o1) == tt_(o2)))
368 374
369 375
370 376#undef luai_checknum
371#define luai_checknum(L,o,c) { if (!ttisnumber(o)) c; } 377#define luai_checknum(L,o,c) { if (!ttisnumber(o)) c; }
372 378
373
374#else
375
376#define luai_checknum(L,o,c) { /* empty */ }
377
378#endif 379#endif
379/* }====================================================== */ 380/* }====================================================== */
380 381