File: | game/lua/lvm.cpp |
Location: | line 158, column 5 |
Description: | Value stored to 't' is never read |
1 | /* |
2 | ** $Id: lvm.c,v 2.63.1.4 2009/07/01 21:10:33 roberto Exp $ |
3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h |
5 | */ |
6 | |
7 | |
8 | #include <stdio.h> |
9 | #include <stdlib.h> |
10 | #include <string.h> |
11 | |
12 | #define lvm_c |
13 | #define LUA_CORE |
14 | |
15 | #include "lua.h" |
16 | |
17 | #include "ldebug.h" |
18 | #include "ldo.h" |
19 | #include "lfunc.h" |
20 | #include "lgc.h" |
21 | #include "lobject.h" |
22 | #include "lopcodes.h" |
23 | #include "lstate.h" |
24 | #include "lstring.h" |
25 | #include "ltable.h" |
26 | #include "ltm.h" |
27 | #include "lvm.h" |
28 | |
29 | |
30 | |
31 | /* limit for table tag-method chains (to avoid loops) */ |
32 | #define MAXTAGLOOP100 100 |
33 | |
34 | |
35 | const TValue *luaV_tonumber (const TValue *obj, TValue *n) { |
36 | lua_Number num; |
37 | if (ttisnumber(obj)(((obj)->tt) == 3)) return obj; |
38 | if (ttisstring(obj)(((obj)->tt) == 4) && luaO_str2d(svalue(obj)((const char *)(((&(obj)->value.gc->ts)) + 1)), &num)) { |
39 | setnvalue(n, num){ TValue *i_o=(n); i_o->value.n=(num); i_o->tt=3; }; |
40 | return n; |
41 | } |
42 | else |
43 | return NULL__null; |
44 | } |
45 | |
46 | |
47 | int luaV_tostring (lua_State *L, StkId obj) { |
48 | if (!ttisnumber(obj)(((obj)->tt) == 3)) |
49 | return 0; |
50 | else { |
51 | char s[LUAI_MAXNUMBER2STR32]; |
52 | lua_Number n = nvalue(obj)((obj)->value.n); |
53 | lua_number2str(s, n)sprintf((s), "%.14g", (n)); |
54 | setsvalue2s(L, obj, luaS_new(L, s)){ TValue *i_o=(obj); i_o->value.gc=((GCObject *)(((luaS_newlstr (L, s, strlen(s)))))); i_o->tt=4; ((void)0); }; |
55 | return 1; |
56 | } |
57 | } |
58 | |
59 | |
60 | static void traceexec (lua_State *L, const Instruction *pc) { |
61 | lu_byte mask = L->hookmask; |
62 | const Instruction *oldpc = L->savedpc; |
63 | L->savedpc = pc; |
64 | if ((mask & LUA_MASKCOUNT(1 << 3)) && L->hookcount == 0) { |
65 | resethookcount(L)(L->hookcount = L->basehookcount); |
66 | luaD_callhook(L, LUA_HOOKCOUNT3, -1); |
67 | } |
68 | if (mask & LUA_MASKLINE(1 << 2)) { |
69 | Proto *p = ci_func(L->ci)((&((L->ci)->func)->value.gc->cl))->l.p; |
70 | int npc = pcRel(pc, p)(((int)((pc) - (p)->code)) - 1); |
71 | int newline = getline(p, npc)(((p)->lineinfo) ? (p)->lineinfo[npc] : 0); |
72 | /* call linehook when enter a new function, when jump back (loop), |
73 | or when enter a new line */ |
74 | if (npc == 0 || pc <= oldpc || newline != getline(p, pcRel(oldpc, p))(((p)->lineinfo) ? (p)->lineinfo[(((int)((oldpc) - (p)-> code)) - 1)] : 0)) |
75 | luaD_callhook(L, LUA_HOOKLINE2, newline); |
76 | } |
77 | } |
78 | |
79 | |
80 | static void callTMres (lua_State *L, StkId res, const TValue *f, |
81 | const TValue *p1, const TValue *p2) { |
82 | ptrdiff_t result = savestack(L, res)((char *)(res) - (char *)L->stack); |
83 | setobj2s(L, L->top, f){ const TValue *o2=(f); TValue *o1=(L->top); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* push function */ |
84 | setobj2s(L, L->top+1, p1){ const TValue *o2=(p1); TValue *o1=(L->top+1); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* 1st argument */ |
85 | setobj2s(L, L->top+2, p2){ const TValue *o2=(p2); TValue *o1=(L->top+2); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* 2nd argument */ |
86 | luaD_checkstack(L, 3)if ((char *)L->stack_last - (char *)L->top <= (3)*(int )sizeof(TValue)) luaD_growstack(L, 3); else ((void)0);; |
87 | L->top += 3; |
88 | luaD_call(L, L->top - 3, 1); |
89 | res = restorestack(L, result)((TValue *)((char *)L->stack + (result))); |
90 | L->top--; |
91 | setobjs2s(L, res, L->top){ const TValue *o2=(L->top); TValue *o1=(res); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; |
92 | } |
93 | |
94 | |
95 | |
96 | static void callTM (lua_State *L, const TValue *f, const TValue *p1, |
97 | const TValue *p2, const TValue *p3) { |
98 | setobj2s(L, L->top, f){ const TValue *o2=(f); TValue *o1=(L->top); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* push function */ |
99 | setobj2s(L, L->top+1, p1){ const TValue *o2=(p1); TValue *o1=(L->top+1); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* 1st argument */ |
100 | setobj2s(L, L->top+2, p2){ const TValue *o2=(p2); TValue *o1=(L->top+2); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* 2nd argument */ |
101 | setobj2s(L, L->top+3, p3){ const TValue *o2=(p3); TValue *o1=(L->top+3); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* 3th argument */ |
102 | luaD_checkstack(L, 4)if ((char *)L->stack_last - (char *)L->top <= (4)*(int )sizeof(TValue)) luaD_growstack(L, 4); else ((void)0);; |
103 | L->top += 4; |
104 | luaD_call(L, L->top - 4, 0); |
105 | } |
106 | |
107 | |
108 | void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { |
109 | int loop; |
110 | for (loop = 0; loop < MAXTAGLOOP100; loop++) { |
111 | const TValue *tm; |
112 | if (ttistable(t)(((t)->tt) == 5)) { /* `t' is a table? */ |
113 | Table *h = hvalue(t)(&(t)->value.gc->h); |
114 | const TValue *res = luaH_get(h, key); /* do a primitive get */ |
115 | if (!ttisnil(res)(((res)->tt) == 0) || /* result is no nil? */ |
116 | (tm = fasttm(L, h->metatable, TM_INDEX)((h->metatable) == __null ? __null : ((h->metatable)-> flags & (1u<<(TM_INDEX))) ? __null : luaT_gettm(h-> metatable, TM_INDEX, ((L->l_G))->tmname[TM_INDEX]))) == NULL__null) { /* or no TM? */ |
117 | setobj2s(L, val, res){ const TValue *o2=(res); TValue *o1=(val); o1->value = o2 ->value; o1->tt=o2->tt; ((void)0); }; |
118 | return; |
119 | } |
120 | /* else will try the tag method */ |
121 | } |
122 | else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))(((tm = luaT_gettmbyobj(L, t, TM_INDEX))->tt) == 0)) |
123 | luaG_typeerror(L, t, "index"); |
124 | if (ttisfunction(tm)(((tm)->tt) == 6)) { |
125 | callTMres(L, val, tm, t, key); |
126 | return; |
127 | } |
128 | t = tm; /* else repeat with `tm' */ |
129 | } |
130 | luaG_runerror(L, "loop in gettable"); |
131 | } |
132 | |
133 | |
134 | void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { |
135 | int loop; |
136 | TValue temp; |
137 | for (loop = 0; loop < MAXTAGLOOP100; loop++) { |
138 | const TValue *tm; |
139 | if (ttistable(t)(((t)->tt) == 5)) { /* `t' is a table? */ |
140 | Table *h = hvalue(t)(&(t)->value.gc->h); |
141 | TValue *oldval = luaH_set(L, h, key); /* do a primitive set */ |
142 | if (!ttisnil(oldval)(((oldval)->tt) == 0) || /* result is no nil? */ |
143 | (tm = fasttm(L, h->metatable, TM_NEWINDEX)((h->metatable) == __null ? __null : ((h->metatable)-> flags & (1u<<(TM_NEWINDEX))) ? __null : luaT_gettm( h->metatable, TM_NEWINDEX, ((L->l_G))->tmname[TM_NEWINDEX ]))) == NULL__null) { /* or no TM? */ |
144 | setobj2t(L, oldval, val){ const TValue *o2=(val); TValue *o1=(oldval); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; |
145 | luaC_barriert(L, h, val){ if (((((val)->tt) >= 4) && (((((val)->value .gc))->gch.marked) & ((((1<<(0)) | (1<<(1) )))))) && ((((((GCObject *)((h)))))->gch.marked) & ((1<<(2))))) luaC_barrierback(L,h); }; |
146 | return; |
147 | } |
148 | /* else will try the tag method */ |
149 | } |
150 | else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))(((tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))->tt) == 0)) |
151 | luaG_typeerror(L, t, "index"); |
152 | if (ttisfunction(tm)(((tm)->tt) == 6)) { |
153 | callTM(L, tm, t, key, val); |
154 | return; |
155 | } |
156 | /* else repeat with `tm' */ |
157 | setobj(L, &temp, tm){ const TValue *o2=(tm); TValue *o1=(&temp); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; /* avoid pointing inside table (may rehash) */ |
158 | t = &temp; |
Value stored to 't' is never read | |
159 | t = tm; |
160 | } |
161 | luaG_runerror(L, "loop in settable"); |
162 | } |
163 | |
164 | |
165 | static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, |
166 | StkId res, TMS event) { |
167 | const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ |
168 | if (ttisnil(tm)(((tm)->tt) == 0)) |
169 | tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ |
170 | if (ttisnil(tm)(((tm)->tt) == 0)) return 0; |
171 | callTMres(L, res, tm, p1, p2); |
172 | return 1; |
173 | } |
174 | |
175 | |
176 | static const TValue *get_compTM (lua_State *L, Table *mt1, Table *mt2, |
177 | TMS event) { |
178 | const TValue *tm1 = fasttm(L, mt1, event)((mt1) == __null ? __null : ((mt1)->flags & (1u<< (event))) ? __null : luaT_gettm(mt1, event, ((L->l_G))-> tmname[event])); |
179 | const TValue *tm2; |
180 | if (tm1 == NULL__null) return NULL__null; /* no metamethod */ |
181 | if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ |
182 | tm2 = fasttm(L, mt2, event)((mt2) == __null ? __null : ((mt2)->flags & (1u<< (event))) ? __null : luaT_gettm(mt2, event, ((L->l_G))-> tmname[event])); |
183 | if (tm2 == NULL__null) return NULL__null; /* no metamethod */ |
184 | if (luaO_rawequalObj(tm1, tm2)) /* same metamethods? */ |
185 | return tm1; |
186 | return NULL__null; |
187 | } |
188 | |
189 | |
190 | static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, |
191 | TMS event) { |
192 | const TValue *tm1 = luaT_gettmbyobj(L, p1, event); |
193 | const TValue *tm2; |
194 | if (ttisnil(tm1)(((tm1)->tt) == 0)) return -1; /* no metamethod? */ |
195 | tm2 = luaT_gettmbyobj(L, p2, event); |
196 | if (!luaO_rawequalObj(tm1, tm2)) /* different metamethods? */ |
197 | return -1; |
198 | callTMres(L, L->top, tm1, p1, p2); |
199 | return !l_isfalse(L->top)((((L->top)->tt) == 0) || ((((L->top)->tt) == 1) && ((L->top)->value.b) == 0)); |
200 | } |
201 | |
202 | |
203 | static int l_strcmp (const TString *ls, const TString *rs) { |
204 | const char *l = getstr(ls)((const char *)((ls) + 1)); |
205 | size_t ll = ls->tsv.len; |
206 | const char *r = getstr(rs)((const char *)((rs) + 1)); |
207 | size_t lr = rs->tsv.len; |
208 | for (;;) { |
209 | int temp = strcoll(l, r); |
210 | if (temp != 0) return temp; |
211 | else { /* strings are equal up to a `\0' */ |
212 | size_t len = strlen(l); /* index of first `\0' in both strings */ |
213 | if (len == lr) /* r is finished? */ |
214 | return (len == ll) ? 0 : 1; |
215 | else if (len == ll) /* l is finished? */ |
216 | return -1; /* l is smaller than r (because r is not finished) */ |
217 | /* both strings longer than `len'; go on comparing (after the `\0') */ |
218 | len++; |
219 | l += len; ll -= len; r += len; lr -= len; |
220 | } |
221 | } |
222 | } |
223 | |
224 | |
225 | int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { |
226 | int res; |
227 | if (ttype(l)((l)->tt) != ttype(r)((r)->tt)) |
228 | return luaG_ordererror(L, l, r); |
229 | else if (ttisnumber(l)(((l)->tt) == 3)) |
230 | return luai_numlt(nvalue(l), nvalue(r))((((l)->value.n))<(((r)->value.n))); |
231 | else if (ttisstring(l)(((l)->tt) == 4)) |
232 | return l_strcmp(rawtsvalue(l)(&(l)->value.gc->ts), rawtsvalue(r)(&(r)->value.gc->ts)) < 0; |
233 | else if ((res = call_orderTM(L, l, r, TM_LT)) != -1) |
234 | return res; |
235 | return luaG_ordererror(L, l, r); |
236 | } |
237 | |
238 | |
239 | static int lessequal (lua_State *L, const TValue *l, const TValue *r) { |
240 | int res; |
241 | if (ttype(l)((l)->tt) != ttype(r)((r)->tt)) |
242 | return luaG_ordererror(L, l, r); |
243 | else if (ttisnumber(l)(((l)->tt) == 3)) |
244 | return luai_numle(nvalue(l), nvalue(r))((((l)->value.n))<=(((r)->value.n))); |
245 | else if (ttisstring(l)(((l)->tt) == 4)) |
246 | return l_strcmp(rawtsvalue(l)(&(l)->value.gc->ts), rawtsvalue(r)(&(r)->value.gc->ts)) <= 0; |
247 | else if ((res = call_orderTM(L, l, r, TM_LE)) != -1) /* first try `le' */ |
248 | return res; |
249 | else if ((res = call_orderTM(L, r, l, TM_LT)) != -1) /* else try `lt' */ |
250 | return !res; |
251 | return luaG_ordererror(L, l, r); |
252 | } |
253 | |
254 | |
255 | int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) { |
256 | const TValue *tm; |
257 | lua_assert(ttype(t1) == ttype(t2))((void)0); |
258 | switch (ttype(t1)((t1)->tt)) { |
259 | case LUA_TNIL0: return 1; |
260 | case LUA_TNUMBER3: return luai_numeq(nvalue(t1), nvalue(t2))((((t1)->value.n))==(((t2)->value.n))); |
261 | case LUA_TBOOLEAN1: return bvalue(t1)((t1)->value.b) == bvalue(t2)((t2)->value.b); /* true must be 1 !! */ |
262 | case LUA_TLIGHTUSERDATA2: return pvalue(t1)((t1)->value.p) == pvalue(t2)((t2)->value.p); |
263 | case LUA_TUSERDATA7: { |
264 | if (uvalue(t1)(&(&(t1)->value.gc->u)->uv) == uvalue(t2)(&(&(t2)->value.gc->u)->uv)) return 1; |
265 | tm = get_compTM(L, uvalue(t1)(&(&(t1)->value.gc->u)->uv)->metatable, uvalue(t2)(&(&(t2)->value.gc->u)->uv)->metatable, |
266 | TM_EQ); |
267 | break; /* will try TM */ |
268 | } |
269 | case LUA_TTABLE5: { |
270 | if (hvalue(t1)(&(t1)->value.gc->h) == hvalue(t2)(&(t2)->value.gc->h)) return 1; |
271 | tm = get_compTM(L, hvalue(t1)(&(t1)->value.gc->h)->metatable, hvalue(t2)(&(t2)->value.gc->h)->metatable, TM_EQ); |
272 | break; /* will try TM */ |
273 | } |
274 | default: return gcvalue(t1)((t1)->value.gc) == gcvalue(t2)((t2)->value.gc); |
275 | } |
276 | if (tm == NULL__null) return 0; /* no TM? */ |
277 | callTMres(L, L->top, tm, t1, t2); /* call TM */ |
278 | return !l_isfalse(L->top)((((L->top)->tt) == 0) || ((((L->top)->tt) == 1) && ((L->top)->value.b) == 0)); |
279 | } |
280 | |
281 | |
282 | void luaV_concat (lua_State *L, int total, int last) { |
283 | do { |
284 | StkId top = L->base + last + 1; |
285 | int n = 2; /* number of elements handled in this pass (at least 2) */ |
286 | if (!(ttisstring(top-2)(((top-2)->tt) == 4) || ttisnumber(top-2)(((top-2)->tt) == 3)) || !tostring(L, top-1)((((top-1)->tt) == 4) || (luaV_tostring(L, top-1)))) { |
287 | if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) |
288 | luaG_concaterror(L, top-2, top-1); |
289 | } else if (tsvalue(top-1)(&(&(top-1)->value.gc->ts)->tsv)->len == 0) /* second op is empty? */ |
290 | (void)tostring(L, top - 2)((((top - 2)->tt) == 4) || (luaV_tostring(L, top - 2))); /* result is first op (as string) */ |
291 | else { |
292 | /* at least two string values; get as many as possible */ |
293 | size_t tl = tsvalue(top-1)(&(&(top-1)->value.gc->ts)->tsv)->len; |
294 | char *buffer; |
295 | int i; |
296 | /* collect total length */ |
297 | for (n = 1; n < total && tostring(L, top-n-1)((((top-n-1)->tt) == 4) || (luaV_tostring(L, top-n-1))); n++) { |
298 | size_t l = tsvalue(top-n-1)(&(&(top-n-1)->value.gc->ts)->tsv)->len; |
299 | if (l >= MAX_SIZET((size_t)(~(size_t)0)-2) - tl) luaG_runerror(L, "string length overflow"); |
300 | tl += l; |
301 | } |
302 | buffer = luaZ_openspace(L, &G(L)(L->l_G)->buff, tl); |
303 | tl = 0; |
304 | for (i=n; i>0; i--) { /* concat all strings */ |
305 | size_t l = tsvalue(top-i)(&(&(top-i)->value.gc->ts)->tsv)->len; |
306 | memcpy(buffer+tl, svalue(top-i)((const char *)(((&(top-i)->value.gc->ts)) + 1)), l); |
307 | tl += l; |
308 | } |
309 | setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)){ TValue *i_o=(top-n); i_o->value.gc=((GCObject *)((luaS_newlstr (L, buffer, tl)))); i_o->tt=4; ((void)0); }; |
310 | } |
311 | total -= n-1; /* got `n' strings to create 1 new */ |
312 | last -= n-1; |
313 | } while (total > 1); /* repeat until only 1 result left */ |
314 | } |
315 | |
316 | |
317 | static void Arith (lua_State *L, StkId ra, const TValue *rb, |
318 | const TValue *rc, TMS op) { |
319 | TValue tempb, tempc; |
320 | const TValue *b, *c; |
321 | if ((b = luaV_tonumber(rb, &tempb)) != NULL__null && |
322 | (c = luaV_tonumber(rc, &tempc)) != NULL__null) { |
323 | lua_Number nb = nvalue(b)((b)->value.n), nc = nvalue(c)((c)->value.n); |
324 | switch (op) { |
325 | case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)){ TValue *i_o=(ra); i_o->value.n=(((nb)+(nc))); i_o->tt =3; }; break; |
326 | case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)){ TValue *i_o=(ra); i_o->value.n=(((nb)-(nc))); i_o->tt =3; }; break; |
327 | case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)){ TValue *i_o=(ra); i_o->value.n=(((nb)*(nc))); i_o->tt =3; }; break; |
328 | case TM_DIV: setnvalue(ra, luai_numdiv(nb, nc)){ TValue *i_o=(ra); i_o->value.n=(((nb)/(nc))); i_o->tt =3; }; break; |
329 | case TM_MOD: setnvalue(ra, luai_nummod(nb, nc)){ TValue *i_o=(ra); i_o->value.n=(((nb) - floor((nb)/(nc)) *(nc))); i_o->tt=3; }; break; |
330 | case TM_POW: setnvalue(ra, luai_numpow(nb, nc)){ TValue *i_o=(ra); i_o->value.n=((pow(nb,nc))); i_o->tt =3; }; break; |
331 | case TM_UNM: setnvalue(ra, luai_numunm(nb)){ TValue *i_o=(ra); i_o->value.n=((-(nb))); i_o->tt=3; }; break; |
332 | default: lua_assert(0)((void)0); break; |
333 | } |
334 | } |
335 | else if (!call_binTM(L, rb, rc, ra, op)) |
336 | luaG_aritherror(L, rb, rc); |
337 | } |
338 | |
339 | |
340 | |
341 | /* |
342 | ** some macros for common tasks in `luaV_execute' |
343 | */ |
344 | |
345 | #define runtime_check(L, c){ if (!(c)) break; } { if (!(c)) break; } |
346 | |
347 | #define RA(i)(base+(((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0 )<<8))<<0))))) (base+GETARG_A(i)(((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<< 8))<<0))))) |
348 | /* to be used after possible stack reallocation */ |
349 | #define RB(i)(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i))(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) |
350 | #define RC(i)(base+(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i))(base+(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) |
351 | #define RKB(i)((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~( Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~( Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) |
352 | ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i))((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~( Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) |
353 | #define RKC(i)((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))) |
354 | ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i))((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))) |
355 | #define KBx(i)(k+(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<(9 + 9)))<<0))))) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, k+GETARG_Bx(i))(k+(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<(9 + 9)))<<0))))) |
356 | |
357 | |
358 | #define dojump(L,pc,i){(pc) += (i); {((void) 0); ((void) 0);};} {(pc) += (i); luai_threadyield(L){((void) 0); ((void) 0);};} |
359 | |
360 | |
361 | #define Protect(x){ L->savedpc = pc; {x;}; base = L->base; } { L->savedpc = pc; {x;}; base = L->base; } |
362 | |
363 | |
364 | #define arith_op(op,tm){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=(op(nb, nc)); i_o->tt=3; }; } else { L-> savedpc = pc; {Arith(L, ra, rb, rc, tm);}; base = L->base; }; } { \ |
365 | TValue *rb = RKB(i)((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~( Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); \ |
366 | TValue *rc = RKC(i)((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))); \ |
367 | if (ttisnumber(rb)(((rb)->tt) == 3) && ttisnumber(rc)(((rc)->tt) == 3)) { \ |
368 | lua_Number nb = nvalue(rb)((rb)->value.n), nc = nvalue(rc)((rc)->value.n); \ |
369 | setnvalue(ra, op(nb, nc)){ TValue *i_o=(ra); i_o->value.n=(op(nb, nc)); i_o->tt= 3; }; \ |
370 | } \ |
371 | else \ |
372 | Protect(Arith(L, ra, rb, rc, tm)){ L->savedpc = pc; {Arith(L, ra, rb, rc, tm);}; base = L-> base; }; \ |
373 | } |
374 | |
375 | |
376 | |
377 | void luaV_execute (lua_State *L, int nexeccalls) { |
378 | LClosure *cl; |
379 | StkId base; |
380 | TValue *k; |
381 | const Instruction *pc; |
382 | reentry: /* entry point */ |
383 | lua_assert(isLua(L->ci))((void)0); |
384 | pc = L->savedpc; |
385 | cl = &clvalue(L->ci->func)(&(L->ci->func)->value.gc->cl)->l; |
386 | base = L->base; |
387 | k = cl->p->k; |
388 | /* main loop of interpreter */ |
389 | for (;;) { |
390 | const Instruction i = *pc++; |
391 | StkId ra; |
392 | if ((L->hookmask & (LUA_MASKLINE(1 << 2) | LUA_MASKCOUNT(1 << 3))) && |
393 | (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE(1 << 2))) { |
394 | traceexec(L, pc); |
395 | if (L->status == LUA_YIELD1) { /* did hook yield? */ |
396 | L->savedpc = pc - 1; |
397 | return; |
398 | } |
399 | base = L->base; |
400 | } |
401 | /* warning!! several calls may realloc the stack and invalidate `ra' */ |
402 | ra = RA(i)(base+(((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0 )<<8))<<0))))); |
403 | lua_assert(base == L->base && L->base == L->ci->base)((void)0); |
404 | lua_assert(base <= L->top && L->top <= L->stack + L->stacksize)((void)0); |
405 | lua_assert(L->top == L->ci->top || luaG_checkopenop(i))((void)0); |
406 | switch (GET_OPCODE(i)(((OpCode)(((i)>>0) & ((~((~(Instruction)0)<< 6))<<0))))) { |
407 | case OP_MOVE: { |
408 | setobjs2s(L, ra, RB(i)){ const TValue *o2=((base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0)))))); TValue *o1=(ra); o1->value = o2->value; o1->tt=o2->tt; ( (void)0); }; |
409 | continue; |
410 | } |
411 | case OP_LOADK: { |
412 | setobj2s(L, ra, KBx(i)){ const TValue *o2=((k+(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<(9 + 9)))<<0)))))); TValue *o1=(ra); o1->value = o2->value; o1->tt=o2->tt; ( (void)0); }; |
413 | continue; |
414 | } |
415 | case OP_LOADBOOL: { |
416 | setbvalue(ra, GETARG_B(i)){ TValue *i_o=(ra); i_o->value.b=((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))); i_o->tt=1; }; |
417 | if (GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0))))) pc++; /* skip next instruction (if C) */ |
418 | continue; |
419 | } |
420 | case OP_LOADNIL: { |
421 | TValue *rb = RB(i)(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))); |
422 | do { |
423 | setnilvalue(rb--)((rb--)->tt=0); |
424 | } while (rb >= ra); |
425 | continue; |
426 | } |
427 | case OP_GETUPVAL: { |
428 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
429 | setobj2s(L, ra, cl->upvals[b]->v){ const TValue *o2=(cl->upvals[b]->v); TValue *o1=(ra); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; |
430 | continue; |
431 | } |
432 | case OP_GETGLOBAL: { |
433 | TValue g; |
434 | TValue *rb = KBx(i)(k+(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<(9 + 9)))<<0))))); |
435 | sethvalue(L, &g, cl->env){ TValue *i_o=(&g); i_o->value.gc=((GCObject *)((cl-> env))); i_o->tt=5; ((void)0); }; |
436 | lua_assert(ttisstring(rb))((void)0); |
437 | Protect(luaV_gettable(L, &g, rb, ra)){ L->savedpc = pc; {luaV_gettable(L, &g, rb, ra);}; base = L->base; }; |
438 | continue; |
439 | } |
440 | case OP_GETTABLE: { |
441 | Protect(luaV_gettable(L, RB(i), RKC(i), ra)){ L->savedpc = pc; {luaV_gettable(L, (base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))), ra);}; base = L->base; }; |
442 | continue; |
443 | } |
444 | case OP_SETGLOBAL: { |
445 | TValue g; |
446 | sethvalue(L, &g, cl->env){ TValue *i_o=(&g); i_o->value.gc=((GCObject *)((cl-> env))); i_o->tt=5; ((void)0); }; |
447 | lua_assert(ttisstring(KBx(i)))((void)0); |
448 | Protect(luaV_settable(L, &g, KBx(i), ra)){ L->savedpc = pc; {luaV_settable(L, &g, (k+(((int)((( i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<( 9 + 9)))<<0))))), ra);}; base = L->base; }; |
449 | continue; |
450 | } |
451 | case OP_SETUPVAL: { |
452 | UpVal *uv = cl->upvals[GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))]; |
453 | setobj(L, uv->v, ra){ const TValue *o2=(ra); TValue *o1=(uv->v); o1->value = o2->value; o1->tt=o2->tt; ((void)0); }; |
454 | luaC_barrier(L, uv, ra){ if (((((ra)->tt) >= 4) && (((((ra)->value. gc))->gch.marked) & ((((1<<(0)) | (1<<(1)) ))))) && ((((((GCObject *)((uv)))))->gch.marked) & ((1<<(2))))) luaC_barrierf(L,(((GCObject *)((uv)))),(( ra)->value.gc)); }; |
455 | continue; |
456 | } |
457 | case OP_SETTABLE: { |
458 | Protect(luaV_settable(L, ra, RKB(i), RKC(i))){ L->savedpc = pc; {luaV_settable(L, ra, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))));}; base = L->base; }; |
459 | continue; |
460 | } |
461 | case OP_NEWTABLE: { |
462 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
463 | int c = GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0)))); |
464 | sethvalue(L, ra, luaH_new(L, luaO_fb2int(b), luaO_fb2int(c))){ TValue *i_o=(ra); i_o->value.gc=((GCObject *)((luaH_new( L, luaO_fb2int(b), luaO_fb2int(c))))); i_o->tt=5; ((void)0 ); }; |
465 | Protect(luaC_checkGC(L)){ L->savedpc = pc; {{ ((void)0); if ((L->l_G)->totalbytes >= (L->l_G)->GCthreshold) luaC_step(L); };}; base = L->base; }; |
466 | continue; |
467 | } |
468 | case OP_SELF: { |
469 | StkId rb = RB(i)(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))); |
470 | setobjs2s(L, ra+1, rb){ const TValue *o2=(rb); TValue *o1=(ra+1); o1->value = o2 ->value; o1->tt=o2->tt; ((void)0); }; |
471 | Protect(luaV_gettable(L, rb, RKC(i), ra)){ L->savedpc = pc; {luaV_gettable(L, rb, ((((((int)(((i)>> ((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> ((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> ((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<< 0))))), ra);}; base = L->base; }; |
472 | continue; |
473 | } |
474 | case OP_ADD: { |
475 | arith_op(luai_numadd, TM_ADD){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=(((nb)+(nc))); i_o->tt=3; }; } else { L ->savedpc = pc; {Arith(L, ra, rb, rc, TM_ADD);}; base = L-> base; }; }; |
476 | continue; |
477 | } |
478 | case OP_SUB: { |
479 | arith_op(luai_numsub, TM_SUB){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=(((nb)-(nc))); i_o->tt=3; }; } else { L ->savedpc = pc; {Arith(L, ra, rb, rc, TM_SUB);}; base = L-> base; }; }; |
480 | continue; |
481 | } |
482 | case OP_MUL: { |
483 | arith_op(luai_nummul, TM_MUL){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=(((nb)*(nc))); i_o->tt=3; }; } else { L ->savedpc = pc; {Arith(L, ra, rb, rc, TM_MUL);}; base = L-> base; }; }; |
484 | continue; |
485 | } |
486 | case OP_DIV: { |
487 | arith_op(luai_numdiv, TM_DIV){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=(((nb)/(nc))); i_o->tt=3; }; } else { L ->savedpc = pc; {Arith(L, ra, rb, rc, TM_DIV);}; base = L-> base; }; }; |
488 | continue; |
489 | } |
490 | case OP_MOD: { |
491 | arith_op(luai_nummod, TM_MOD){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=(((nb) - floor((nb)/(nc))*(nc))); i_o-> tt=3; }; } else { L->savedpc = pc; {Arith(L, ra, rb, rc, TM_MOD );}; base = L->base; }; }; |
492 | continue; |
493 | } |
494 | case OP_POW: { |
495 | arith_op(luai_numpow, TM_POW){ TValue *rb = ((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>(((0 + 6) + 8) + 9) ) & ((~((~(Instruction)0)<<9))<<0))))) & ~ (1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8 ) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); TValue *rc = ((((((int)(((i)>>((0 + 6) + 8)) & ((~ ((~(Instruction)0)<<9))<<0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>((0 + 6) + 8)) & (( ~((~(Instruction)0)<<9))<<0))))); if ((((rb)-> tt) == 3) && (((rc)->tt) == 3)) { lua_Number nb = ( (rb)->value.n), nc = ((rc)->value.n); { TValue *i_o=(ra ); i_o->value.n=((pow(nb,nc))); i_o->tt=3; }; } else { L ->savedpc = pc; {Arith(L, ra, rb, rc, TM_POW);}; base = L-> base; }; }; |
496 | continue; |
497 | } |
498 | case OP_UNM: { |
499 | TValue *rb = RB(i)(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))); |
500 | if (ttisnumber(rb)(((rb)->tt) == 3)) { |
501 | lua_Number nb = nvalue(rb)((rb)->value.n); |
502 | setnvalue(ra, luai_numunm(nb)){ TValue *i_o=(ra); i_o->value.n=((-(nb))); i_o->tt=3; }; |
503 | } |
504 | else { |
505 | Protect(Arith(L, ra, rb, rb, TM_UNM)){ L->savedpc = pc; {Arith(L, ra, rb, rb, TM_UNM);}; base = L->base; }; |
506 | } |
507 | continue; |
508 | } |
509 | case OP_NOT: { |
510 | int res = l_isfalse(RB(i))(((((base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~( (~(Instruction)0)<<9))<<0))))))->tt) == 0) || ( ((((base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~(( ~(Instruction)0)<<9))<<0))))))->tt) == 1) && (((base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~(( ~(Instruction)0)<<9))<<0))))))->value.b) == 0) ); /* next assignment may change this value */ |
511 | setbvalue(ra, res){ TValue *i_o=(ra); i_o->value.b=(res); i_o->tt=1; }; |
512 | continue; |
513 | } |
514 | case OP_LEN: { |
515 | const TValue *rb = RB(i)(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))); |
516 | switch (ttype(rb)((rb)->tt)) { |
517 | case LUA_TTABLE5: { |
518 | setnvalue(ra, cast_num(luaH_getn(hvalue(rb)))){ TValue *i_o=(ra); i_o->value.n=(((lua_Number)((luaH_getn ((&(rb)->value.gc->h)))))); i_o->tt=3; }; |
519 | break; |
520 | } |
521 | case LUA_TSTRING4: { |
522 | setnvalue(ra, cast_num(tsvalue(rb)->len)){ TValue *i_o=(ra); i_o->value.n=(((lua_Number)(((&(& (rb)->value.gc->ts)->tsv)->len)))); i_o->tt=3; }; |
523 | break; |
524 | } |
525 | default: { /* try metamethod */ |
526 | Protect({ L->savedpc = pc; {if (!call_binTM(L, rb, (&luaO_nilobject_ ), ra, TM_LEN)) luaG_typeerror(L, rb, "get length of");;}; base = L->base; } |
527 | if (!call_binTM(L, rb, luaO_nilobject, ra, TM_LEN)){ L->savedpc = pc; {if (!call_binTM(L, rb, (&luaO_nilobject_ ), ra, TM_LEN)) luaG_typeerror(L, rb, "get length of");;}; base = L->base; } |
528 | luaG_typeerror(L, rb, "get length of");{ L->savedpc = pc; {if (!call_binTM(L, rb, (&luaO_nilobject_ ), ra, TM_LEN)) luaG_typeerror(L, rb, "get length of");;}; base = L->base; } |
529 | ){ L->savedpc = pc; {if (!call_binTM(L, rb, (&luaO_nilobject_ ), ra, TM_LEN)) luaG_typeerror(L, rb, "get length of");;}; base = L->base; } |
530 | } |
531 | } |
532 | continue; |
533 | } |
534 | case OP_CONCAT: { |
535 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
536 | int c = GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0)))); |
537 | Protect(luaV_concat(L, c-b+1, c); luaC_checkGC(L)){ L->savedpc = pc; {luaV_concat(L, c-b+1, c); { ((void)0); if ((L->l_G)->totalbytes >= (L->l_G)->GCthreshold ) luaC_step(L); };}; base = L->base; }; |
538 | setobjs2s(L, RA(i), base+b){ const TValue *o2=(base+b); TValue *o1=((base+(((int)(((i)>> (0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) ); o1->value = o2->value; o1->tt=o2->tt; ((void)0 ); }; |
539 | continue; |
540 | } |
541 | case OP_JMP: { |
542 | dojump(L, pc, GETARG_sBx(i)){(pc) += (((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};}; |
543 | continue; |
544 | } |
545 | case OP_EQ: { |
546 | TValue *rb = RKB(i)((((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~( Instruction)0)<<9))<<0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<<0))))); |
547 | TValue *rc = RKC(i)((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0))))); |
548 | Protect({ L->savedpc = pc; {if ((((rb)->tt) == ((rc)->tt) && luaV_equalval(L, rb, rc)) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
549 | if (equalobj(L, rb, rc) == GETARG_A(i)){ L->savedpc = pc; {if ((((rb)->tt) == ((rc)->tt) && luaV_equalval(L, rb, rc)) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
550 | dojump(L, pc, GETARG_sBx(*pc));{ L->savedpc = pc; {if ((((rb)->tt) == ((rc)->tt) && luaV_equalval(L, rb, rc)) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
551 | ){ L->savedpc = pc; {if ((((rb)->tt) == ((rc)->tt) && luaV_equalval(L, rb, rc)) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
552 | pc++; |
553 | continue; |
554 | } |
555 | case OP_LT: { |
556 | Protect({ L->savedpc = pc; {if (luaV_lessthan(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
557 | if (luaV_lessthan(L, RKB(i), RKC(i)) == GETARG_A(i)){ L->savedpc = pc; {if (luaV_lessthan(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
558 | dojump(L, pc, GETARG_sBx(*pc));{ L->savedpc = pc; {if (luaV_lessthan(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
559 | ){ L->savedpc = pc; {if (luaV_lessthan(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
560 | pc++; |
561 | continue; |
562 | } |
563 | case OP_LE: { |
564 | Protect({ L->savedpc = pc; {if (lessequal(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
565 | if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i)){ L->savedpc = pc; {if (lessequal(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
566 | dojump(L, pc, GETARG_sBx(*pc));{ L->savedpc = pc; {if (lessequal(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
567 | ){ L->savedpc = pc; {if (lessequal(L, ((((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & (1 << (9 - 1))) ? k+((int)((((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))) & ~(1 << (9 - 1))) : base+(((int)(((i)>> (((0 + 6) + 8) + 9)) & ((~((~(Instruction)0)<<9))<< 0))))), ((((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & (1 << (9 - 1))) ? k+ ((int)((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<9))<<0))))) & ~(1 << (9 - 1))) : base +(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction) 0)<<9))<<0)))))) == (((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0)<<8))<<0))))) {(pc) += (((( (int)(((*pc)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};};;}; base = L->base; } |
568 | pc++; |
569 | continue; |
570 | } |
571 | case OP_TEST: { |
572 | if (l_isfalse(ra)((((ra)->tt) == 0) || ((((ra)->tt) == 1) && ((ra )->value.b) == 0)) != GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0))))) |
573 | dojump(L, pc, GETARG_sBx(*pc)){(pc) += (((((int)(((*pc)>>((0 + 6) + 8)) & ((~((~( Instruction)0)<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>>1))); {((void) 0); ((void) 0);};}; |
574 | pc++; |
575 | continue; |
576 | } |
577 | case OP_TESTSET: { |
578 | TValue *rb = RB(i)(base+(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))); |
579 | if (l_isfalse(rb)((((rb)->tt) == 0) || ((((rb)->tt) == 1) && ((rb )->value.b) == 0)) != GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0))))) { |
580 | setobjs2s(L, ra, rb){ const TValue *o2=(rb); TValue *o1=(ra); o1->value = o2-> value; o1->tt=o2->tt; ((void)0); }; |
581 | dojump(L, pc, GETARG_sBx(*pc)){(pc) += (((((int)(((*pc)>>((0 + 6) + 8)) & ((~((~( Instruction)0)<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>>1))); {((void) 0); ((void) 0);};}; |
582 | } |
583 | pc++; |
584 | continue; |
585 | } |
586 | case OP_CALL: { |
587 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
588 | int nresults = GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0)))) - 1; |
589 | if (b != 0) L->top = ra+b; /* else previous instruction set top */ |
590 | L->savedpc = pc; |
591 | switch (luaD_precall(L, ra, nresults)) { |
592 | case PCRLUA0: { |
593 | nexeccalls++; |
594 | goto reentry; /* restart luaV_execute over new Lua function */ |
595 | } |
596 | case PCRC1: { |
597 | /* it was a C function (`precall' called it); adjust results */ |
598 | if (nresults >= 0) L->top = L->ci->top; |
599 | base = L->base; |
600 | continue; |
601 | } |
602 | default: { |
603 | return; /* yield */ |
604 | } |
605 | } |
606 | } |
607 | case OP_TAILCALL: { |
608 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
609 | if (b != 0) L->top = ra+b; /* else previous instruction set top */ |
610 | L->savedpc = pc; |
611 | lua_assert(GETARG_C(i) - 1 == LUA_MULTRET)((void)0); |
612 | switch (luaD_precall(L, ra, LUA_MULTRET(-1))) { |
613 | case PCRLUA0: { |
614 | /* tail call: put new frame in place of previous one */ |
615 | CallInfo *ci = L->ci - 1; /* previous frame */ |
616 | int aux; |
617 | StkId func = ci->func; |
618 | StkId pfunc = (ci+1)->func; /* previous function index */ |
619 | if (L->openupval) luaF_close(L, ci->base); |
620 | L->base = ci->base = ci->func + ((ci+1)->base - pfunc); |
621 | for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */ |
622 | setobjs2s(L, func+aux, pfunc+aux){ const TValue *o2=(pfunc+aux); TValue *o1=(func+aux); o1-> value = o2->value; o1->tt=o2->tt; ((void)0); }; |
623 | ci->top = L->top = func+aux; /* correct top */ |
624 | lua_assert(L->top == L->base + clvalue(func)->l.p->maxstacksize)((void)0); |
625 | ci->savedpc = L->savedpc; |
626 | ci->tailcalls++; /* one more call lost */ |
627 | L->ci--; /* remove new frame */ |
628 | goto reentry; |
629 | } |
630 | case PCRC1: { /* it was a C function (`precall' called it) */ |
631 | base = L->base; |
632 | continue; |
633 | } |
634 | default: { |
635 | return; /* yield */ |
636 | } |
637 | } |
638 | } |
639 | case OP_RETURN: { |
640 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
641 | if (b != 0) L->top = ra+b-1; |
642 | if (L->openupval) luaF_close(L, base); |
643 | L->savedpc = pc; |
644 | b = luaD_poscall(L, ra); |
645 | if (--nexeccalls == 0) /* was previous function running `here'? */ |
646 | return; /* no: return */ |
647 | else { /* yes: continue its execution */ |
648 | if (b) L->top = L->ci->top; |
649 | lua_assert(isLua(L->ci))((void)0); |
650 | lua_assert(GET_OPCODE(*((L->ci)->savedpc - 1)) == OP_CALL)((void)0); |
651 | goto reentry; |
652 | } |
653 | } |
654 | case OP_FORLOOP: { |
655 | lua_Number step = nvalue(ra+2)((ra+2)->value.n); |
656 | lua_Number idx = luai_numadd(nvalue(ra), step)((((ra)->value.n))+(step)); /* increment index */ |
657 | lua_Number limit = nvalue(ra+1)((ra+1)->value.n); |
658 | if (luai_numlt(0, step)((0)<(step)) ? luai_numle(idx, limit)((idx)<=(limit)) |
659 | : luai_numle(limit, idx)((limit)<=(idx))) { |
660 | dojump(L, pc, GETARG_sBx(i)){(pc) += (((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};}; /* jump back */ |
661 | setnvalue(ra, idx){ TValue *i_o=(ra); i_o->value.n=(idx); i_o->tt=3; }; /* update internal index... */ |
662 | setnvalue(ra+3, idx){ TValue *i_o=(ra+3); i_o->value.n=(idx); i_o->tt=3; }; /* ...and external index */ |
663 | } |
664 | continue; |
665 | } |
666 | case OP_FORPREP: { |
667 | const TValue *init = ra; |
668 | const TValue *plimit = ra+1; |
669 | const TValue *pstep = ra+2; |
670 | L->savedpc = pc; /* next steps may throw errors */ |
671 | if (!tonumber(init, ra)(((init)->tt) == 3 || (((init) = luaV_tonumber(init,ra)) != __null))) |
672 | luaG_runerror(L, LUA_QL("for")"'" "for" "'" " initial value must be a number"); |
673 | else if (!tonumber(plimit, ra+1)(((plimit)->tt) == 3 || (((plimit) = luaV_tonumber(plimit, ra+1)) != __null))) |
674 | luaG_runerror(L, LUA_QL("for")"'" "for" "'" " limit must be a number"); |
675 | else if (!tonumber(pstep, ra+2)(((pstep)->tt) == 3 || (((pstep) = luaV_tonumber(pstep,ra+ 2)) != __null))) |
676 | luaG_runerror(L, LUA_QL("for")"'" "for" "'" " step must be a number"); |
677 | setnvalue(ra, luai_numsub(nvalue(ra), nvalue(pstep))){ TValue *i_o=(ra); i_o->value.n=(((((ra)->value.n))-(( (pstep)->value.n)))); i_o->tt=3; }; |
678 | dojump(L, pc, GETARG_sBx(i)){(pc) += (((((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction )0)<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>> 1))); {((void) 0); ((void) 0);};}; |
679 | continue; |
680 | } |
681 | case OP_TFORLOOP: { |
682 | StkId cb = ra + 3; /* call base */ |
683 | setobjs2s(L, cb+2, ra+2){ const TValue *o2=(ra+2); TValue *o1=(cb+2); o1->value = o2 ->value; o1->tt=o2->tt; ((void)0); }; |
684 | setobjs2s(L, cb+1, ra+1){ const TValue *o2=(ra+1); TValue *o1=(cb+1); o1->value = o2 ->value; o1->tt=o2->tt; ((void)0); }; |
685 | setobjs2s(L, cb, ra){ const TValue *o2=(ra); TValue *o1=(cb); o1->value = o2-> value; o1->tt=o2->tt; ((void)0); }; |
686 | L->top = cb+3; /* func. + 2 args (state and index) */ |
687 | Protect(luaD_call(L, cb, GETARG_C(i))){ L->savedpc = pc; {luaD_call(L, cb, (((int)(((i)>>( (0 + 6) + 8)) & ((~((~(Instruction)0)<<9))<<0 )))));}; base = L->base; }; |
688 | L->top = L->ci->top; |
689 | cb = RA(i)(base+(((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0 )<<8))<<0))))) + 3; /* previous call may change the stack */ |
690 | if (!ttisnil(cb)(((cb)->tt) == 0)) { /* continue loop? */ |
691 | setobjs2s(L, cb-1, cb){ const TValue *o2=(cb); TValue *o1=(cb-1); o1->value = o2 ->value; o1->tt=o2->tt; ((void)0); }; /* save control variable */ |
692 | dojump(L, pc, GETARG_sBx(*pc)){(pc) += (((((int)(((*pc)>>((0 + 6) + 8)) & ((~((~( Instruction)0)<<(9 + 9)))<<0))))-(((1<<(9 + 9))-1)>>1))); {((void) 0); ((void) 0);};}; /* jump back */ |
693 | } |
694 | pc++; |
695 | continue; |
696 | } |
697 | case OP_SETLIST: { |
698 | int n = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))); |
699 | int c = GETARG_C(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<9))<<0)))); |
700 | int last; |
701 | Table *h; |
702 | if (n == 0) { |
703 | n = cast_int(L->top - ra)((int)((L->top - ra))) - 1; |
704 | L->top = L->ci->top; |
705 | } |
706 | if (c == 0) c = cast_int(*pc++)((int)((*pc++))); |
707 | runtime_check(L, ttistable(ra)){ if (!((((ra)->tt) == 5))) break; }; |
708 | h = hvalue(ra)(&(ra)->value.gc->h); |
709 | last = ((c-1)*LFIELDS_PER_FLUSH50) + n; |
710 | if (last > h->sizearray) /* needs more space? */ |
711 | luaH_resizearray(L, h, last); /* pre-alloc it at once */ |
712 | for (; n > 0; n--) { |
713 | TValue *val = ra+n; |
714 | setobj2t(L, luaH_setnum(L, h, last--), val){ const TValue *o2=(val); TValue *o1=(luaH_setnum(L, h, last-- )); o1->value = o2->value; o1->tt=o2->tt; ((void) 0); }; |
715 | luaC_barriert(L, h, val){ if (((((val)->tt) >= 4) && (((((val)->value .gc))->gch.marked) & ((((1<<(0)) | (1<<(1) )))))) && ((((((GCObject *)((h)))))->gch.marked) & ((1<<(2))))) luaC_barrierback(L,h); }; |
716 | } |
717 | continue; |
718 | } |
719 | case OP_CLOSE: { |
720 | luaF_close(L, ra); |
721 | continue; |
722 | } |
723 | case OP_CLOSURE: { |
724 | Proto *p; |
725 | Closure *ncl; |
726 | int nup, j; |
727 | p = cl->p->p[GETARG_Bx(i)(((int)(((i)>>((0 + 6) + 8)) & ((~((~(Instruction)0 )<<(9 + 9)))<<0))))]; |
728 | nup = p->nups; |
729 | ncl = luaF_newLclosure(L, nup, cl->env); |
730 | ncl->l.p = p; |
731 | for (j=0; j<nup; j++, pc++) { |
732 | if (GET_OPCODE(*pc)(((OpCode)(((*pc)>>0) & ((~((~(Instruction)0)<< 6))<<0)))) == OP_GETUPVAL) |
733 | ncl->l.upvals[j] = cl->upvals[GETARG_B(*pc)(((int)(((*pc)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))]; |
734 | else { |
735 | lua_assert(GET_OPCODE(*pc) == OP_MOVE)((void)0); |
736 | ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc)(((int)(((*pc)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0))))); |
737 | } |
738 | } |
739 | setclvalue(L, ra, ncl){ TValue *i_o=(ra); i_o->value.gc=((GCObject *)((ncl))); i_o ->tt=6; ((void)0); }; |
740 | Protect(luaC_checkGC(L)){ L->savedpc = pc; {{ ((void)0); if ((L->l_G)->totalbytes >= (L->l_G)->GCthreshold) luaC_step(L); };}; base = L->base; }; |
741 | continue; |
742 | } |
743 | case OP_VARARG: { |
744 | int b = GETARG_B(i)(((int)(((i)>>(((0 + 6) + 8) + 9)) & ((~((~(Instruction )0)<<9))<<0)))) - 1; |
745 | int j; |
746 | CallInfo *ci = L->ci; |
747 | int n = cast_int(ci->base - ci->func)((int)((ci->base - ci->func))) - cl->p->numparams - 1; |
748 | if (b == LUA_MULTRET(-1)) { |
749 | Protect(luaD_checkstack(L, n)){ L->savedpc = pc; {if ((char *)L->stack_last - (char * )L->top <= (n)*(int)sizeof(TValue)) luaD_growstack(L, n ); else ((void)0);;}; base = L->base; }; |
750 | ra = RA(i)(base+(((int)(((i)>>(0 + 6)) & ((~((~(Instruction)0 )<<8))<<0))))); /* previous call may change the stack */ |
751 | b = n; |
752 | L->top = ra + n; |
753 | } |
754 | for (j = 0; j < b; j++) { |
755 | if (j < n) { |
756 | setobjs2s(L, ra + j, ci->base - n + j){ const TValue *o2=(ci->base - n + j); TValue *o1=(ra + j) ; o1->value = o2->value; o1->tt=o2->tt; ((void)0) ; }; |
757 | } |
758 | else { |
759 | setnilvalue(ra + j)((ra + j)->tt=0); |
760 | } |
761 | } |
762 | continue; |
763 | } |
764 | } |
765 | } |
766 | } |