summaryrefslogtreecommitdiff
path: root/apps/plugins/lua/llimits.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/lua/llimits.h')
-rw-r--r--apps/plugins/lua/llimits.h221
1 files changed, 20 insertions, 201 deletions
diff --git a/apps/plugins/lua/llimits.h b/apps/plugins/lua/llimits.h
index 152dd05515..a31ad160ad 100644
--- a/apps/plugins/lua/llimits.h
+++ b/apps/plugins/lua/llimits.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: llimits.h,v 1.103.1.1 2013/04/12 18:48:47 roberto Exp $ 2** $Id$
3** Limits, basic types, and some other `installation-dependent' definitions 3** Limits, basic types, and some other `installation-dependent' definitions
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -15,7 +15,7 @@
15#include "lua.h" 15#include "lua.h"
16 16
17 17
18typedef unsigned LUA_INT32 lu_int32; 18typedef LUAI_UINT32 lu_int32;
19 19
20typedef LUAI_UMEM lu_mem; 20typedef LUAI_UMEM lu_mem;
21 21
@@ -31,8 +31,6 @@ typedef unsigned char lu_byte;
31 31
32#define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) 32#define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2)
33 33
34#define MAX_LMEM ((l_mem) ((MAX_LUMEM >> 1) - 2))
35
36 34
37#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ 35#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */
38 36
@@ -46,10 +44,6 @@ typedef unsigned char lu_byte;
46 44
47 45
48/* type to ensure maximum alignment */ 46/* type to ensure maximum alignment */
49#if !defined(LUAI_USER_ALIGNMENT_T)
50#define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; }
51#endif
52
53typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; 47typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;
54 48
55 49
@@ -58,75 +52,36 @@ typedef LUAI_UACNUMBER l_uacNumber;
58 52
59 53
60/* internal assertions for in-house debugging */ 54/* internal assertions for in-house debugging */
61#if defined(lua_assert) 55#ifdef lua_assert
56
62#define check_exp(c,e) (lua_assert(c), (e)) 57#define check_exp(c,e) (lua_assert(c), (e))
63/* to avoid problems with conditions too long */ 58#define api_check(l,e) lua_assert(e)
64#define lua_longassert(c) { if (!(c)) lua_assert(0); } 59
65#else 60#else
61
66#define lua_assert(c) ((void)0) 62#define lua_assert(c) ((void)0)
67#define check_exp(c,e) (e) 63#define check_exp(c,e) (e)
68#define lua_longassert(c) ((void)0) 64#define api_check luai_apicheck
69#endif
70 65
71/*
72** assertion for checking API calls
73*/
74#if !defined(luai_apicheck)
75
76#if defined(LUA_USE_APICHECK)
77#include <assert.h>
78#define luai_apicheck(L,e) assert(e)
79#else
80#define luai_apicheck(L,e) lua_assert(e)
81#endif 66#endif
82 67
83#endif
84
85#define api_check(l,e,msg) luai_apicheck(l,(e) && msg)
86
87 68
88#if !defined(UNUSED) 69#ifndef UNUSED
89#define UNUSED(x) ((void)(x)) /* to avoid warnings */ 70#define UNUSED(x) ((void)(x)) /* to avoid warnings */
90#endif 71#endif
91 72
92 73
74#ifndef cast
93#define cast(t, exp) ((t)(exp)) 75#define cast(t, exp) ((t)(exp))
76#endif
94 77
95#define cast_byte(i) cast(lu_byte, (i)) 78#define cast_byte(i) cast(lu_byte, (i))
96#define cast_num(i) cast(lua_Number, (i)) 79#define cast_num(i) cast(lua_Number, (i))
97#define cast_int(i) cast(int, (i)) 80#define cast_int(i) cast(int, (i))
98#define cast_uchar(i) cast(unsigned char, (i))
99
100
101/*
102** non-return type
103*/
104#if defined(__GNUC__)
105#define l_noret void __attribute__((noreturn))
106#elif defined(_MSC_VER)
107#define l_noret void __declspec(noreturn)
108#else
109#define l_noret void
110#endif
111 81
112 82
113 83
114/* 84/*
115** maximum depth for nested C calls and syntactical nested non-terminals
116** in a program. (Value must fit in an unsigned short int.)
117*/
118#if !defined(LUAI_MAXCCALLS)
119#define LUAI_MAXCCALLS 200
120#endif
121
122/*
123** maximum number of upvalues in a closure (both C and Lua). (Value
124** must fit in an unsigned char.)
125*/
126#define MAXUPVAL UCHAR_MAX
127
128
129/*
130** type for virtual-machine instructions 85** type for virtual-machine instructions
131** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) 86** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h)
132*/ 87*/
@@ -140,170 +95,34 @@ typedef lu_int32 Instruction;
140 95
141 96
142/* minimum size for the string table (must be power of 2) */ 97/* minimum size for the string table (must be power of 2) */
143#if !defined(MINSTRTABSIZE) 98#ifndef MINSTRTABSIZE
144#define MINSTRTABSIZE 32 99#define MINSTRTABSIZE 32
145#endif 100#endif
146 101
147 102
148/* minimum size for string buffer */ 103/* minimum size for string buffer */
149#if !defined(LUA_MINBUFFER) 104#ifndef LUA_MINBUFFER
150#define LUA_MINBUFFER 32 105#define LUA_MINBUFFER 32
151#endif 106#endif
152 107
153 108
154#if !defined(lua_lock) 109#ifndef lua_lock
155#define lua_lock(L) ((void) 0) 110#define lua_lock(L) ((void) 0)
156#define lua_unlock(L) ((void) 0) 111#define lua_unlock(L) ((void) 0)
157#endif 112#endif
158 113
159#if !defined(luai_threadyield) 114#ifndef luai_threadyield
160#define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} 115#define luai_threadyield(L) {lua_unlock(L); lua_lock(L);}
161#endif 116#endif
162 117
163 118
164/* 119/*
165** these macros allow user-specific actions on threads when you defined
166** LUAI_EXTRASPACE and need to do something extra when a thread is
167** created/deleted/resumed/yielded.
168*/
169#if !defined(luai_userstateopen)
170#define luai_userstateopen(L) ((void)L)
171#endif
172
173#if !defined(luai_userstateclose)
174#define luai_userstateclose(L) ((void)L)
175#endif
176
177#if !defined(luai_userstatethread)
178#define luai_userstatethread(L,L1) ((void)L)
179#endif
180
181#if !defined(luai_userstatefree)
182#define luai_userstatefree(L,L1) ((void)L)
183#endif
184
185#if !defined(luai_userstateresume)
186#define luai_userstateresume(L,n) ((void)L)
187#endif
188
189#if !defined(luai_userstateyield)
190#define luai_userstateyield(L,n) ((void)L)
191#endif
192
193/*
194** lua_number2int is a macro to convert lua_Number to int.
195** lua_number2integer is a macro to convert lua_Number to lua_Integer.
196** lua_number2unsigned is a macro to convert a lua_Number to a lua_Unsigned.
197** lua_unsigned2number is a macro to convert a lua_Unsigned to a lua_Number.
198** luai_hashnum is a macro to hash a lua_Number value into an integer.
199** The hash must be deterministic and give reasonable values for
200** both small and large values (outside the range of integers).
201*/
202
203#if defined(MS_ASMTRICK) || defined(LUA_MSASMTRICK) /* { */
204/* trick with Microsoft assembler for X86 */
205
206#define lua_number2int(i,n) __asm {__asm fld n __asm fistp i}
207#define lua_number2integer(i,n) lua_number2int(i, n)
208#define lua_number2unsigned(i,n) \
209 {__int64 l; __asm {__asm fld n __asm fistp l} i = (unsigned int)l;}
210
211
212#elif defined(LUA_IEEE754TRICK) /* }{ */
213/* the next trick should work on any machine using IEEE754 with
214 a 32-bit int type */
215
216union luai_Cast { double l_d; LUA_INT32 l_p[2]; };
217
218#if !defined(LUA_IEEEENDIAN) /* { */
219#define LUAI_EXTRAIEEE \
220 static const union luai_Cast ieeeendian = {-(33.0 + 6755399441055744.0)};
221#define LUA_IEEEENDIANLOC (ieeeendian.l_p[1] == 33)
222#else
223#define LUA_IEEEENDIANLOC LUA_IEEEENDIAN
224#define LUAI_EXTRAIEEE /* empty */
225#endif /* } */
226
227#define lua_number2int32(i,n,t) \
228 { LUAI_EXTRAIEEE \
229 volatile union luai_Cast u; u.l_d = (n) + 6755399441055744.0; \
230 (i) = (t)u.l_p[LUA_IEEEENDIANLOC]; }
231
232#define luai_hashnum(i,n) \
233 { volatile union luai_Cast u; u.l_d = (n) + 1.0; /* avoid -0 */ \
234 (i) = u.l_p[0]; (i) += u.l_p[1]; } /* add double bits for his hash */
235
236#define lua_number2int(i,n) lua_number2int32(i, n, int)
237#define lua_number2unsigned(i,n) lua_number2int32(i, n, lua_Unsigned)
238
239/* the trick can be expanded to lua_Integer when it is a 32-bit value */
240#if defined(LUA_IEEELL)
241#define lua_number2integer(i,n) lua_number2int32(i, n, lua_Integer)
242#endif
243
244#endif /* } */
245
246
247/* the following definitions always work, but may be slow */
248
249#if !defined(lua_number2int)
250#define lua_number2int(i,n) ((i)=(int)(n))
251#endif
252
253#if !defined(lua_number2integer)
254#define lua_number2integer(i,n) ((i)=(lua_Integer)(n))
255#endif
256
257#if !defined(lua_number2unsigned) /* { */
258/* the following definition assures proper modulo behavior */
259#if defined(LUA_NUMBER_DOUBLE) || defined(LUA_NUMBER_FLOAT)
260#include <math.h>
261#define SUPUNSIGNED ((lua_Number)(~(lua_Unsigned)0) + 1)
262#define lua_number2unsigned(i,n) \
263 ((i)=(lua_Unsigned)((n) - floor((n)/SUPUNSIGNED)*SUPUNSIGNED))
264#else
265#define lua_number2unsigned(i,n) ((i)=(lua_Unsigned)(n))
266#endif
267#endif /* } */
268
269
270#if !defined(lua_unsigned2number)
271/* on several machines, coercion from unsigned to double is slow,
272 so it may be worth to avoid */
273#define lua_unsigned2number(u) \
274 (((u) <= (lua_Unsigned)INT_MAX) ? (lua_Number)(int)(u) : (lua_Number)(u))
275#endif
276
277
278
279#if defined(ltable_c) && !defined(luai_hashnum)
280
281#include <float.h>
282#include <math.h>
283
284#define luai_hashnum(i,n) { int e; \
285 n = l_mathop(frexp)(n, &e) * (lua_Number)(INT_MAX - DBL_MAX_EXP); \
286 lua_number2int(i, n); i += e; }
287
288#endif
289
290
291
292/*
293** macro to control inclusion of some hard tests on stack reallocation 120** macro to control inclusion of some hard tests on stack reallocation
294*/ 121*/
295#if !defined(HARDSTACKTESTS) 122#ifndef HARDSTACKTESTS
296#define condmovestack(L) ((void)0) 123#define condhardstacktests(x) ((void)0)
297#else
298/* realloc stack keeping its size */
299#define condmovestack(L) luaD_reallocstack((L), (L)->stacksize)
300#endif
301
302#if !defined(HARDMEMTESTS)
303#define condchangemem(L) condmovestack(L)
304#else 124#else
305#define condchangemem(L) \ 125#define condhardstacktests(x) x
306 ((void)(!(G(L)->gcrunning) || (luaC_fullgc(L, 0), 1)))
307#endif 126#endif
308 127
309#endif 128#endif