|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
-** $Id: lobject.h,v 2.61 2011/07/04 20:29:02 roberto Exp roberto $
|
|
|
+** $Id: lobject.h,v 2.62 2011/09/24 21:12:01 roberto Exp roberto $
|
|
|
** Type definitions for Lua objects
|
|
|
** See Copyright Notice in lua.h
|
|
|
*/
|
|
@@ -264,51 +264,73 @@ typedef struct lua_TValue TValue;
|
|
|
** =======================================================
|
|
|
*/
|
|
|
|
|
|
-#if defined(LUA_NANTRICKLE) || defined(LUA_NANTRICKBE)
|
|
|
+#if defined(LUA_NANTRICK) \
|
|
|
+ || defined(LUA_NANTRICK_LE) \
|
|
|
+ || defined(LUA_NANTRICK_BE)
|
|
|
|
|
|
/*
|
|
|
** numbers are represented in the 'd_' field. All other values have the
|
|
|
-** value (NNMARK | tag) in 'tt_'. A number with such pattern would be
|
|
|
+** value (NNMARK | tag) in 'tt__'. A number with such pattern would be
|
|
|
** a "signaled NaN", which is never generated by regular operations by
|
|
|
** the CPU (nor by 'strtod')
|
|
|
*/
|
|
|
#if !defined(NNMARK)
|
|
|
#define NNMARK 0x7FF7A500
|
|
|
+#define NNMASK 0x7FFFFF00
|
|
|
#endif
|
|
|
|
|
|
#undef TValuefields
|
|
|
#undef NILCONSTANT
|
|
|
-#if defined(LUA_NANTRICKLE)
|
|
|
+
|
|
|
+#if defined(LUA_NANTRICK_LE)
|
|
|
+
|
|
|
/* little endian */
|
|
|
#define TValuefields \
|
|
|
- union { struct { Value v_; int tt_; } i; double d_; } u
|
|
|
+ union { struct { Value v__; int tt__; } i; double d__; } u
|
|
|
#define NILCONSTANT {{{NULL}, tag2tt(LUA_TNIL)}}
|
|
|
-#else
|
|
|
+/* field-access macros */
|
|
|
+#define v_(o) ((o)->u.i.v__)
|
|
|
+#define d_(o) ((o)->u.d__)
|
|
|
+#define tt_(o) ((o)->u.i.tt__)
|
|
|
+
|
|
|
+#elif defined(LUA_NANTRICK_BE)
|
|
|
+
|
|
|
/* big endian */
|
|
|
#define TValuefields \
|
|
|
- union { struct { int tt_; Value v_; } i; double d_; } u
|
|
|
+ union { struct { int tt__; Value v__; } i; double d__; } u
|
|
|
#define NILCONSTANT {{tag2tt(LUA_TNIL), {NULL}}}
|
|
|
+/* field-access macros */
|
|
|
+#define v_(o) ((o)->u.i.v__)
|
|
|
+#define d_(o) ((o)->u.d__)
|
|
|
+#define tt_(o) ((o)->u.i.tt__)
|
|
|
+
|
|
|
+#elif !defined(TValuefields)
|
|
|
+#error option 'LUA_NANTRICK' needs declaration for 'TValuefields'
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
+
|
|
|
+/* correspondence with standard representation */
|
|
|
+#undef val_
|
|
|
+#define val_(o) v_(o)
|
|
|
+#undef num_
|
|
|
+#define num_(o) d_(o)
|
|
|
+
|
|
|
+
|
|
|
#undef numfield
|
|
|
#define numfield /* no such field; numbers are the entire struct */
|
|
|
|
|
|
/* basic check to distinguish numbers from non-numbers */
|
|
|
#undef ttisnumber
|
|
|
-#define ttisnumber(o) (((o)->u.i.tt_ & 0x7fffff00) != NNMARK)
|
|
|
+#define ttisnumber(o) ((tt_(o) & NNMASK) != NNMARK)
|
|
|
|
|
|
#define tag2tt(t) (NNMARK | (t))
|
|
|
|
|
|
-#undef val_
|
|
|
-#define val_(o) ((o)->u.i.v_)
|
|
|
-#undef num_
|
|
|
-#define num_(o) ((o)->u.d_)
|
|
|
-
|
|
|
#undef rttype
|
|
|
-#define rttype(o) (ttisnumber(o) ? LUA_TNUMBER : (o)->u.i.tt_ & 0xff)
|
|
|
+#define rttype(o) (ttisnumber(o) ? LUA_TNUMBER : tt_(o) & 0xff)
|
|
|
|
|
|
#undef settt_
|
|
|
-#define settt_(o,t) ((o)->u.i.tt_=tag2tt(t))
|
|
|
+#define settt_(o,t) (tt_(o) = tag2tt(t))
|
|
|
|
|
|
#undef setnvalue
|
|
|
#define setnvalue(obj,x) \
|
|
@@ -326,11 +348,11 @@ typedef struct lua_TValue TValue;
|
|
|
*/
|
|
|
|
|
|
#undef checktag
|
|
|
-#define checktag(o,t) ((o)->u.i.tt_ == tag2tt(t))
|
|
|
+#define checktag(o,t) (tt_(o) == tag2tt(t))
|
|
|
|
|
|
#undef ttisequal
|
|
|
#define ttisequal(o1,o2) \
|
|
|
- (ttisnumber(o1) ? ttisnumber(o2) : ((o1)->u.i.tt_ == (o2)->u.i.tt_))
|
|
|
+ (ttisnumber(o1) ? ttisnumber(o2) : (tt_(o1) == tt_(o2)))
|
|
|
|
|
|
|
|
|
|