<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>rpm: lua/ltests.c Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.7 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul></div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div> <h1>lua/ltests.c</h1><a href="ltests_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> <a name="l00002"></a>00002 <span class="comment">** $Id: ltests.c,v 1.2 2004/03/23 05:09:14 jbj Exp $</span> <a name="l00003"></a>00003 <span class="comment">** Internal Module for Debugging of the Lua Implementation</span> <a name="l00004"></a>00004 <span class="comment">** See Copyright Notice in lua.h</span> <a name="l00005"></a>00005 <span class="comment">*/</span> <a name="l00006"></a>00006 <a name="l00007"></a>00007 <a name="l00008"></a>00008 <span class="preprocessor">#include <ctype.h></span> <a name="l00009"></a>00009 <span class="preprocessor">#include <limits.h></span> <a name="l00010"></a>00010 <span class="preprocessor">#include <stdio.h></span> <a name="l00011"></a>00011 <span class="preprocessor">#include <stdlib.h></span> <a name="l00012"></a>00012 <span class="preprocessor">#include <string.h></span> <a name="l00013"></a>00013 <a name="l00014"></a><a class="code" href="ltests_8c.html#c39a541b94db326b1335180e523cb077">00014</a> <span class="preprocessor">#define ltests_c</span> <a name="l00015"></a>00015 <span class="preprocessor"></span> <a name="l00016"></a>00016 <span class="preprocessor">#include "lua.h"</span> <a name="l00017"></a>00017 <a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="lapi_8h.html">lapi.h</a>"</span> <a name="l00019"></a>00019 <span class="preprocessor">#include "lauxlib.h"</span> <a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="lcode_8h.html">lcode.h</a>"</span> <a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="ldebug_8h.html">ldebug.h</a>"</span> <a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="ldo_8h.html">ldo.h</a>"</span> <a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="lfunc_8h.html">lfunc.h</a>"</span> <a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="lmem_8h.html">lmem.h</a>"</span> <a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="lopcodes_8h.html">lopcodes.h</a>"</span> <a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="lstate_8h.html">lstate.h</a>"</span> <a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="lstring_8h.html">lstring.h</a>"</span> <a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="ltable_8h.html">ltable.h</a>"</span> <a name="l00029"></a>00029 <span class="preprocessor">#include "lualib.h"</span> <a name="l00030"></a>00030 <a name="l00031"></a>00031 <a name="l00032"></a>00032 <a name="l00033"></a>00033 <span class="comment">/*</span> <a name="l00034"></a>00034 <span class="comment">** The whole module only makes sense with LUA_DEBUG on</span> <a name="l00035"></a>00035 <span class="comment">*/</span> <a name="l00036"></a>00036 <span class="preprocessor">#ifdef LUA_DEBUG</span> <a name="l00037"></a>00037 <span class="preprocessor"></span> <a name="l00038"></a>00038 <a name="l00039"></a>00039 <span class="preprocessor">#define lua_pushintegral(L,i) lua_pushnumber(L, cast(lua_Number, (i)))</span> <a name="l00040"></a>00040 <span class="preprocessor"></span> <a name="l00041"></a>00041 <a name="l00042"></a>00042 <span class="keyword">static</span> <a class="code" href="structlua__State.html">lua_State</a> *lua_state = NULL; <a name="l00043"></a>00043 <a name="l00044"></a>00044 <span class="keywordtype">int</span> islocked = 0; <a name="l00045"></a>00045 <a name="l00046"></a>00046 <a name="l00047"></a>00047 <span class="preprocessor">#define func_at(L,k) (L->ci->base+(k) - 1)</span> <a name="l00048"></a>00048 <span class="preprocessor"></span> <a name="l00049"></a>00049 <a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">void</span> setnameval (<a class="code" href="structlua__State.html">lua_State</a> *L, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structname.html">name</a>, <span class="keywordtype">int</span> val) <a name="l00051"></a>00051 <span class="comment">/*@*/</span> <a name="l00052"></a>00052 { <a name="l00053"></a>00053 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, name); <a name="l00054"></a>00054 lua_pushintegral(L, val); <a name="l00055"></a>00055 <a class="code" href="lapi_8c.html#4ca492cf3d2194aec9a6292708bf66c8">lua_settable</a>(L, -3); <a name="l00056"></a>00056 } <a name="l00057"></a>00057 <a name="l00058"></a>00058 <a name="l00059"></a>00059 <span class="comment">/*</span> <a name="l00060"></a>00060 <span class="comment">** {======================================================================</span> <a name="l00061"></a>00061 <span class="comment">** Controlled version for realloc.</span> <a name="l00062"></a>00062 <span class="comment">** =======================================================================</span> <a name="l00063"></a>00063 <span class="comment">*/</span> <a name="l00064"></a>00064 <a name="l00065"></a>00065 <span class="preprocessor">#define MARK 0x55 </span><span class="comment">/* 01010101 (a nice pattern) */</span> <a name="l00066"></a>00066 <a name="l00067"></a>00067 <span class="preprocessor">#ifndef EXTERNMEMCHECK</span> <a name="l00068"></a>00068 <span class="preprocessor"></span><span class="comment">/* full memory check */</span> <a name="l00069"></a>00069 <span class="preprocessor">#define HEADER (sizeof(L_Umaxalign)) </span><span class="comment">/* ensures maximum alignment for HEADER */</span> <a name="l00070"></a>00070 <span class="preprocessor">#define MARKSIZE 16 </span><span class="comment">/* size of marks after each block */</span> <a name="l00071"></a>00071 <span class="preprocessor">#define blockhead(b) (cast(char *, b) - HEADER)</span> <a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define setsize(newblock, size) (*cast(size_t *, newblock) = size)</span> <a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define checkblocksize(b, size) (size == (*cast(size_t *, blockhead(b))))</span> <a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define fillmem(mem,size) memset(mem, -MARK, size)</span> <a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#else</span> <a name="l00076"></a>00076 <span class="preprocessor"></span><span class="comment">/* external memory check: don't do it twice */</span> <a name="l00077"></a>00077 <span class="preprocessor">#define HEADER 0</span> <a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define MARKSIZE 0</span> <a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define blockhead(b) (b)</span> <a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define setsize(newblock, size) </span><span class="comment">/* empty */</span> <a name="l00081"></a>00081 <span class="preprocessor">#define checkblocksize(b,size) (1)</span> <a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define fillmem(mem,size) </span><span class="comment">/* empty */</span> <a name="l00083"></a>00083 <span class="preprocessor">#endif</span> <a name="l00084"></a>00084 <span class="preprocessor"></span> <a name="l00085"></a>00085 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> memdebug_numblocks = 0; <a name="l00086"></a>00086 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> memdebug_total = 0; <a name="l00087"></a>00087 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> memdebug_maxmem = 0; <a name="l00088"></a>00088 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> memdebug_memlimit = ULONG_MAX; <a name="l00089"></a>00089 <a name="l00090"></a>00090 <a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">void</span> *checkblock (<span class="keywordtype">void</span> *<a class="code" href="lparser_8c.html#235428bed4c6be6cb6d2760cd0fa9d34">block</a>, size_t size) <a name="l00092"></a>00092 <span class="comment">/*@*/</span> <a name="l00093"></a>00093 { <a name="l00094"></a>00094 <span class="keywordtype">void</span> *b = blockhead(block); <a name="l00095"></a>00095 <span class="keywordtype">int</span> i; <a name="l00096"></a>00096 <span class="keywordflow">for</span> (i=0;i<MARKSIZE;i++) <a name="l00097"></a>00097 <a class="code" href="llimits_8h.html#5978f5fda715bd80e845df1e16ad7780">lua_assert</a>(*(<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, b)+HEADER+size+i) == MARK+i); <span class="comment">/* corrupted block? */</span> <a name="l00098"></a>00098 <span class="keywordflow">return</span> b; <a name="l00099"></a>00099 } <a name="l00100"></a>00100 <a name="l00101"></a>00101 <a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keywordtype">void</span> freeblock (<span class="keywordtype">void</span> *block, size_t size) <a name="l00103"></a>00103 <span class="comment">/*@*/</span> <a name="l00104"></a>00104 { <a name="l00105"></a>00105 <span class="keywordflow">if</span> (block) { <a name="l00106"></a>00106 <a class="code" href="llimits_8h.html#5978f5fda715bd80e845df1e16ad7780">lua_assert</a>(checkblocksize(block, size)); <a name="l00107"></a>00107 block = checkblock(block, size); <a name="l00108"></a>00108 fillmem(block, size+HEADER+MARKSIZE); <span class="comment">/* erase block */</span> <a name="l00109"></a>00109 free(block); <span class="comment">/* free original block */</span> <a name="l00110"></a>00110 memdebug_numblocks--; <a name="l00111"></a>00111 memdebug_total -= size; <a name="l00112"></a>00112 } <a name="l00113"></a>00113 } <a name="l00114"></a>00114 <a name="l00115"></a>00115 <a name="l00116"></a>00116 <span class="keywordtype">void</span> *debug_realloc (<span class="keywordtype">void</span> *block, size_t oldsize, size_t size) { <a name="l00117"></a>00117 <a class="code" href="llimits_8h.html#5978f5fda715bd80e845df1e16ad7780">lua_assert</a>(oldsize == 0 || checkblocksize(block, oldsize)); <a name="l00118"></a>00118 <span class="comment">/* ISO does not specify what realloc(NULL, 0) does */</span> <a name="l00119"></a>00119 <a class="code" href="llimits_8h.html#5978f5fda715bd80e845df1e16ad7780">lua_assert</a>(block != NULL || size > 0); <a name="l00120"></a>00120 <span class="keywordflow">if</span> (size == 0) { <a name="l00121"></a>00121 freeblock(block, oldsize); <a name="l00122"></a>00122 <span class="keywordflow">return</span> NULL; <a name="l00123"></a>00123 } <a name="l00124"></a>00124 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (size > oldsize && memdebug_total+size-oldsize > memdebug_memlimit) <a name="l00125"></a>00125 <span class="keywordflow">return</span> NULL; <span class="comment">/* to test memory allocation errors */</span> <a name="l00126"></a>00126 <span class="keywordflow">else</span> { <a name="l00127"></a>00127 <span class="keywordtype">void</span> *newblock; <a name="l00128"></a>00128 <span class="keywordtype">int</span> i; <a name="l00129"></a>00129 size_t realsize = HEADER+size+MARKSIZE; <a name="l00130"></a>00130 size_t commonsize = (oldsize < size) ? oldsize : size; <a name="l00131"></a>00131 <span class="keywordflow">if</span> (realsize < size) <span class="keywordflow">return</span> NULL; <span class="comment">/* overflow! */</span> <a name="l00132"></a>00132 newblock = malloc(realsize); <span class="comment">/* alloc a new block */</span> <a name="l00133"></a>00133 <span class="keywordflow">if</span> (newblock == NULL) <span class="keywordflow">return</span> NULL; <a name="l00134"></a>00134 <span class="keywordflow">if</span> (block) { <a name="l00135"></a>00135 memcpy(<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, newblock)+HEADER, block, commonsize); <a name="l00136"></a>00136 freeblock(block, oldsize); <span class="comment">/* erase (and check) old copy */</span> <a name="l00137"></a>00137 } <a name="l00138"></a>00138 <span class="comment">/* initialize new part of the block with something `weird' */</span> <a name="l00139"></a>00139 fillmem(<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, newblock)+HEADER+commonsize, size-commonsize); <a name="l00140"></a>00140 memdebug_total += size; <a name="l00141"></a>00141 <span class="keywordflow">if</span> (memdebug_total > memdebug_maxmem) <a name="l00142"></a>00142 memdebug_maxmem = memdebug_total; <a name="l00143"></a>00143 memdebug_numblocks++; <a name="l00144"></a>00144 setsize(newblock, size); <a name="l00145"></a>00145 <span class="keywordflow">for</span> (i=0;i<MARKSIZE;i++) <a name="l00146"></a>00146 *(<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, newblock)+HEADER+size+i) = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span>, MARK+i); <a name="l00147"></a>00147 <span class="keywordflow">return</span> <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, newblock)+HEADER; <a name="l00148"></a>00148 } <a name="l00149"></a>00149 } <a name="l00150"></a>00150 <a name="l00151"></a>00151 <a name="l00152"></a>00152 <span class="comment">/* }====================================================================== */</span> <a name="l00153"></a>00153 <a name="l00154"></a>00154 <a name="l00155"></a>00155 <a name="l00156"></a>00156 <span class="comment">/*</span> <a name="l00157"></a>00157 <span class="comment">** {======================================================</span> <a name="l00158"></a>00158 <span class="comment">** Disassembler</span> <a name="l00159"></a>00159 <span class="comment">** =======================================================</span> <a name="l00160"></a>00160 <span class="comment">*/</span> <a name="l00161"></a>00161 <a name="l00162"></a>00162 <a name="l00163"></a>00163 <span class="keyword">static</span> <span class="keywordtype">char</span> *buildop (<a class="code" href="structProto.html">Proto</a> *p, <span class="keywordtype">int</span> pc, <span class="keywordtype">char</span> *buff) <a name="l00164"></a>00164 <span class="comment">/*@*/</span> <a name="l00165"></a>00165 { <a name="l00166"></a>00166 <a class="code" href="llimits_8h.html#f6c47c68c1e6b0387c915031e0e681e3">Instruction</a> i = p-><a class="code" href="structProto.html#53b66e4e4ac4b612a41b67a0ace9b6a5">code</a>[pc]; <a name="l00167"></a>00167 <a class="code" href="lopcodes_8h.html#beb7dfb0e9e2b3114e240a405d046ea7">OpCode</a> o = <a class="code" href="lopcodes_8h.html#aa146179c3677b790c5681dcd82f0acc">GET_OPCODE</a>(i); <a name="l00168"></a>00168 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structname.html">name</a> = luaP_opnames[o]; <a name="l00169"></a>00169 <span class="keywordtype">int</span> line = <a class="code" href="ldebug_8h.html#af173b063074236fab0f77f3b093a16c">getline</a>(p, pc); <a name="l00170"></a>00170 sprintf(buff, <span class="stringliteral">"(%4d) %4d - "</span>, line, pc); <a name="l00171"></a>00171 <span class="keywordflow">switch</span> (<a class="code" href="lopcodes_8h.html#fb3fdd221fb95fdd1c254f7ab479739e">getOpMode</a>(o)) { <a name="l00172"></a>00172 <span class="keywordflow">case</span> <a class="code" href="lopcodes_8h.html#56752d1aeb4bd4940e632396072d68af5032b5bab05a3312f6236ad8a6053cf3">iABC</a>: <a name="l00173"></a>00173 sprintf(buff+strlen(buff), <span class="stringliteral">"%-12s%4d %4d %4d"</span>, name, <a name="l00174"></a>00174 <a class="code" href="lopcodes_8h.html#1d504abc1e2246548f89977210dce0b9">GETARG_A</a>(i), <a class="code" href="lopcodes_8h.html#7a343159ef7669a438c2097b839b2b13">GETARG_B</a>(i), <a class="code" href="lopcodes_8h.html#f96cb84f2685fda7f36d3d099dba6a44">GETARG_C</a>(i)); <a name="l00175"></a>00175 <span class="keywordflow">break</span>; <a name="l00176"></a>00176 <span class="keywordflow">case</span> <a class="code" href="lopcodes_8h.html#56752d1aeb4bd4940e632396072d68afe162f330f7a1e7581cdbbb4af60dc8ea">iABx</a>: <a name="l00177"></a>00177 sprintf(buff+strlen(buff), <span class="stringliteral">"%-12s%4d %4d"</span>, name, <a class="code" href="lopcodes_8h.html#1d504abc1e2246548f89977210dce0b9">GETARG_A</a>(i), <a class="code" href="lopcodes_8h.html#cf8d228275fd2789dcf5f019bbabc019">GETARG_Bx</a>(i)); <a name="l00178"></a>00178 <span class="keywordflow">break</span>; <a name="l00179"></a>00179 <span class="keywordflow">case</span> <a class="code" href="lopcodes_8h.html#56752d1aeb4bd4940e632396072d68af5db94456d16691b254a6b2fc7b473e55">iAsBx</a>: <a name="l00180"></a>00180 sprintf(buff+strlen(buff), <span class="stringliteral">"%-12s%4d %4d"</span>, name, <a class="code" href="lopcodes_8h.html#1d504abc1e2246548f89977210dce0b9">GETARG_A</a>(i), <a class="code" href="lopcodes_8h.html#1f61a823709ac7847e481290a596c480">GETARG_sBx</a>(i)); <a name="l00181"></a>00181 <span class="keywordflow">break</span>; <a name="l00182"></a>00182 } <a name="l00183"></a>00183 <span class="keywordflow">return</span> buff; <a name="l00184"></a>00184 } <a name="l00185"></a>00185 <a name="l00186"></a>00186 <a name="l00187"></a>00187 <span class="preprocessor">#if 0</span> <a name="l00188"></a>00188 <span class="preprocessor"></span><span class="keywordtype">void</span> luaI_printcode (<a class="code" href="structProto.html">Proto</a> *pt, <span class="keywordtype">int</span> size) { <a name="l00189"></a>00189 <span class="keywordtype">int</span> pc; <a name="l00190"></a>00190 <span class="keywordflow">for</span> (pc=0; pc<size; pc++) { <a name="l00191"></a>00191 <span class="keywordtype">char</span> buff[100]; <a name="l00192"></a>00192 printf(<span class="stringliteral">"%s\n"</span>, buildop(pt, pc, buff)); <a name="l00193"></a>00193 } <a name="l00194"></a>00194 printf(<span class="stringliteral">"-------\n"</span>); <a name="l00195"></a>00195 } <a name="l00196"></a>00196 <span class="preprocessor">#endif</span> <a name="l00197"></a>00197 <span class="preprocessor"></span> <a name="l00198"></a>00198 <a name="l00199"></a>00199 <span class="keyword">static</span> <span class="keywordtype">int</span> listcode (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00200"></a>00200 <span class="comment">/*@*/</span> <a name="l00201"></a>00201 { <a name="l00202"></a>00202 <span class="keywordtype">int</span> pc; <a name="l00203"></a>00203 <a class="code" href="structProto.html">Proto</a> *p; <a name="l00204"></a>00204 luaL_argcheck(L, lua_isfunction(L, 1) && !<a class="code" href="lapi_8c.html#3b922032c9fe2930399186a3647cc3ad">lua_iscfunction</a>(L, 1), <a name="l00205"></a>00205 1, <span class="stringliteral">"Lua function expected"</span>); <a name="l00206"></a>00206 p = <a class="code" href="lobject_8h.html#4b49383d348897fe282c0d51354d8bc9">clvalue</a>(func_at(L, 1))->l.p; <a name="l00207"></a>00207 <a class="code" href="lapi_8c.html#e8d0d81a86e78f83cdf179cb39e43db3">lua_newtable</a>(L); <a name="l00208"></a>00208 setnameval(L, <span class="stringliteral">"maxstack"</span>, p-><a class="code" href="structProto.html#9c9ed4e9d996233f75cdf56b912e4803">maxstacksize</a>); <a name="l00209"></a>00209 setnameval(L, <span class="stringliteral">"numparams"</span>, p-><a class="code" href="structProto.html#3f106f177af6c68ffd8b042713266b98">numparams</a>); <a name="l00210"></a>00210 <span class="keywordflow">for</span> (pc=0; pc<p-><a class="code" href="structProto.html#43e4d3849b5859112d93bdc2534a7cc0">sizecode</a>; pc++) { <a name="l00211"></a>00211 <span class="keywordtype">char</span> buff[100]; <a name="l00212"></a>00212 lua_pushintegral(L, pc+1); <a name="l00213"></a>00213 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, buildop(p, pc, buff)); <a name="l00214"></a>00214 <a class="code" href="lapi_8c.html#4ca492cf3d2194aec9a6292708bf66c8">lua_settable</a>(L, -3); <a name="l00215"></a>00215 } <a name="l00216"></a>00216 <span class="keywordflow">return</span> 1; <a name="l00217"></a>00217 } <a name="l00218"></a>00218 <a name="l00219"></a>00219 <a name="l00220"></a>00220 <span class="keyword">static</span> <span class="keywordtype">int</span> listk (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00221"></a>00221 <span class="comment">/*@*/</span> <a name="l00222"></a>00222 { <a name="l00223"></a>00223 <a class="code" href="structProto.html">Proto</a> *p; <a name="l00224"></a>00224 <span class="keywordtype">int</span> i; <a name="l00225"></a>00225 luaL_argcheck(L, lua_isfunction(L, 1) && !<a class="code" href="lapi_8c.html#3b922032c9fe2930399186a3647cc3ad">lua_iscfunction</a>(L, 1), <a name="l00226"></a>00226 1, <span class="stringliteral">"Lua function expected"</span>); <a name="l00227"></a>00227 p = <a class="code" href="lobject_8h.html#4b49383d348897fe282c0d51354d8bc9">clvalue</a>(func_at(L, 1))->l.p; <a name="l00228"></a>00228 <a class="code" href="lapi_8c.html#e8d0d81a86e78f83cdf179cb39e43db3">lua_newtable</a>(L); <a name="l00229"></a>00229 <span class="keywordflow">for</span> (i=0; i<p-><a class="code" href="structProto.html#5bd719e0486168f6ecd4b01bf41a7444">sizek</a>; i++) { <a name="l00230"></a>00230 lua_pushintegral(L, i+1); <a name="l00231"></a>00231 <a class="code" href="lapi_8c.html#02494e72514383c21b1ca3642f6b09f5">luaA_pushobject</a>(L, p-><a class="code" href="structProto.html#f379e777efa031186320f7e90c14f8c9">k</a>+i); <a name="l00232"></a>00232 <a class="code" href="lapi_8c.html#4ca492cf3d2194aec9a6292708bf66c8">lua_settable</a>(L, -3); <a name="l00233"></a>00233 } <a name="l00234"></a>00234 <span class="keywordflow">return</span> 1; <a name="l00235"></a>00235 } <a name="l00236"></a>00236 <a name="l00237"></a>00237 <a name="l00238"></a>00238 <span class="keyword">static</span> <span class="keywordtype">int</span> listlocals (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00239"></a>00239 <span class="comment">/*@*/</span> <a name="l00240"></a>00240 { <a name="l00241"></a>00241 <a class="code" href="structProto.html">Proto</a> *p; <a name="l00242"></a>00242 <span class="keywordtype">int</span> pc = luaL_checkint(L, 2) - 1; <a name="l00243"></a>00243 <span class="keywordtype">int</span> i = 0; <a name="l00244"></a>00244 <span class="keyword">const</span> <span class="keywordtype">char</span> *name; <a name="l00245"></a>00245 luaL_argcheck(L, lua_isfunction(L, 1) && !<a class="code" href="lapi_8c.html#3b922032c9fe2930399186a3647cc3ad">lua_iscfunction</a>(L, 1), <a name="l00246"></a>00246 1, <span class="stringliteral">"Lua function expected"</span>); <a name="l00247"></a>00247 p = <a class="code" href="lobject_8h.html#4b49383d348897fe282c0d51354d8bc9">clvalue</a>(func_at(L, 1))->l.p; <a name="l00248"></a>00248 <span class="keywordflow">while</span> ((name = <a class="code" href="lfunc_8c.html#aa3cd5bc3901e7edf1ac428151cdfe8c">luaF_getlocalname</a>(p, ++i, pc)) != NULL) <a name="l00249"></a>00249 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, name); <a name="l00250"></a>00250 <span class="keywordflow">return</span> i-1; <a name="l00251"></a>00251 } <a name="l00252"></a>00252 <a name="l00253"></a>00253 <span class="comment">/* }====================================================== */</span> <a name="l00254"></a>00254 <a name="l00255"></a>00255 <a name="l00256"></a>00256 <a name="l00257"></a>00257 <a name="l00258"></a>00258 <span class="keyword">static</span> <span class="keywordtype">int</span> get_limits (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00259"></a>00259 <span class="comment">/*@*/</span> <a name="l00260"></a>00260 { <a name="l00261"></a>00261 <a class="code" href="lapi_8c.html#e8d0d81a86e78f83cdf179cb39e43db3">lua_newtable</a>(L); <a name="l00262"></a>00262 setnameval(L, <span class="stringliteral">"BITS_INT"</span>, <a class="code" href="llimits_8h.html#2d0a9daa55e43de002b68492b154c037">BITS_INT</a>); <a name="l00263"></a>00263 setnameval(L, <span class="stringliteral">"LFPF"</span>, <a class="code" href="lopcodes_8h.html#0888e2bcb54f6e603f09208763aadfe9">LFIELDS_PER_FLUSH</a>); <a name="l00264"></a>00264 setnameval(L, <span class="stringliteral">"MAXVARS"</span>, <a class="code" href="llimits_8h.html#0879a0e632584a9a8bee5ebffab571ca">MAXVARS</a>); <a name="l00265"></a>00265 setnameval(L, <span class="stringliteral">"MAXPARAMS"</span>, <a class="code" href="llimits_8h.html#5fdce82727e278d6647e0addafcd6db6">MAXPARAMS</a>); <a name="l00266"></a>00266 setnameval(L, <span class="stringliteral">"MAXSTACK"</span>, <a class="code" href="llimits_8h.html#acca6649d32984be8e1aa076bf42fe46">MAXSTACK</a>); <a name="l00267"></a>00267 setnameval(L, <span class="stringliteral">"MAXUPVALUES"</span>, <a class="code" href="llimits_8h.html#4f894ed3a3712e01f74b1a9616bad4a3">MAXUPVALUES</a>); <a name="l00268"></a>00268 <span class="keywordflow">return</span> 1; <a name="l00269"></a>00269 } <a name="l00270"></a>00270 <a name="l00271"></a>00271 <a name="l00272"></a>00272 <span class="keyword">static</span> <span class="keywordtype">int</span> mem_query (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00273"></a>00273 <span class="comment">/*@*/</span> <a name="l00274"></a>00274 { <a name="l00275"></a>00275 <span class="keywordflow">if</span> (lua_isnone(L, 1)) { <a name="l00276"></a>00276 lua_pushintegral(L, memdebug_total); <a name="l00277"></a>00277 lua_pushintegral(L, memdebug_numblocks); <a name="l00278"></a>00278 lua_pushintegral(L, memdebug_maxmem); <a name="l00279"></a>00279 <span class="keywordflow">return</span> 3; <a name="l00280"></a>00280 } <a name="l00281"></a>00281 <span class="keywordflow">else</span> { <a name="l00282"></a>00282 memdebug_memlimit = luaL_checkint(L, 1); <a name="l00283"></a>00283 <span class="keywordflow">return</span> 0; <a name="l00284"></a>00284 } <a name="l00285"></a>00285 } <a name="l00286"></a>00286 <a name="l00287"></a>00287 <a name="l00288"></a>00288 <span class="keyword">static</span> <span class="keywordtype">int</span> hash_query (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00289"></a>00289 <span class="comment">/*@*/</span> <a name="l00290"></a>00290 { <a name="l00291"></a>00291 <span class="keywordflow">if</span> (lua_isnone(L, 2)) { <a name="l00292"></a>00292 luaL_argcheck(L, <a class="code" href="lapi_8c.html#652b273947f0656686f998d8e90cd3ea">lua_type</a>(L, 1) == LUA_TSTRING, 1, <span class="stringliteral">"string expected"</span>); <a name="l00293"></a>00293 lua_pushintegral(L, <a class="code" href="lobject_8h.html#8661397faed512ccc9c70a4661f1a83d">tsvalue</a>(func_at(L, 1))->tsv.hash); <a name="l00294"></a>00294 } <a name="l00295"></a>00295 <span class="keywordflow">else</span> { <a name="l00296"></a>00296 <a class="code" href="structlua__TObject.html">TObject</a> *o = func_at(L, 1); <a name="l00297"></a>00297 <a class="code" href="structTable.html">Table</a> *t; <a name="l00298"></a>00298 luaL_checktype(L, 2, LUA_TTABLE); <a name="l00299"></a>00299 t = <a class="code" href="lobject_8h.html#336a6ce5e8340e6de133ec249cf47ebf">hvalue</a>(func_at(L, 2)); <a name="l00300"></a>00300 lua_pushintegral(L, <a class="code" href="ltable_8c.html#248adf3579e5e32f66ea45bad0ddc851">luaH_mainposition</a>(t, o) - t-><a class="code" href="structTable.html#519f179c707cb4e93bb66d09151c89e5">node</a>); <a name="l00301"></a>00301 } <a name="l00302"></a>00302 <span class="keywordflow">return</span> 1; <a name="l00303"></a>00303 } <a name="l00304"></a>00304 <a name="l00305"></a>00305 <a name="l00306"></a>00306 <span class="keyword">static</span> <span class="keywordtype">int</span> stacklevel (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00307"></a>00307 <span class="comment">/*@*/</span> <a name="l00308"></a>00308 { <a name="l00309"></a>00309 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> a = 0; <a name="l00310"></a>00310 lua_pushintegral(L, (<span class="keywordtype">int</span>)(L-><a class="code" href="structlua__State.html#195f448e76fd404953fa1962d28212a3">top</a> - L-><a class="code" href="structlua__State.html#27e1d5122ef7fffae7542814c72fdd2f">stack</a>)); <a name="l00311"></a>00311 lua_pushintegral(L, (<span class="keywordtype">int</span>)(L-><a class="code" href="structlua__State.html#797a585a2bdb638bd1ca78c15bbe46fb">stack_last</a> - L-><a class="code" href="structlua__State.html#27e1d5122ef7fffae7542814c72fdd2f">stack</a>)); <a name="l00312"></a>00312 lua_pushintegral(L, (<span class="keywordtype">int</span>)(L-><a class="code" href="structlua__State.html#7fbb5727050853f411ad64b4be9ab5c8">ci</a> - L-><a class="code" href="structlua__State.html#5e99f3f914a793d73684a19eb96dda3b">base_ci</a>)); <a name="l00313"></a>00313 lua_pushintegral(L, (<span class="keywordtype">int</span>)(L-><a class="code" href="structlua__State.html#683688539b11d067259dba8da8e1469a">end_ci</a> - L-><a class="code" href="structlua__State.html#5e99f3f914a793d73684a19eb96dda3b">base_ci</a>)); <a name="l00314"></a>00314 lua_pushintegral(L, (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)&a); <a name="l00315"></a>00315 <span class="keywordflow">return</span> 5; <a name="l00316"></a>00316 } <a name="l00317"></a>00317 <a name="l00318"></a>00318 <a name="l00319"></a>00319 <span class="keyword">static</span> <span class="keywordtype">int</span> table_query (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00320"></a>00320 <span class="comment">/*@*/</span> <a name="l00321"></a>00321 { <a name="l00322"></a>00322 <span class="keyword">const</span> <a class="code" href="structTable.html">Table</a> *t; <a name="l00323"></a>00323 <span class="keywordtype">int</span> i = luaL_optint(L, 2, -1); <a name="l00324"></a>00324 luaL_checktype(L, 1, LUA_TTABLE); <a name="l00325"></a>00325 t = <a class="code" href="lobject_8h.html#336a6ce5e8340e6de133ec249cf47ebf">hvalue</a>(func_at(L, 1)); <a name="l00326"></a>00326 <span class="keywordflow">if</span> (i == -1) { <a name="l00327"></a>00327 lua_pushintegral(L, t-><a class="code" href="structTable.html#2c648e99fcf88c4660c97e7d9408b50f">sizearray</a>); <a name="l00328"></a>00328 lua_pushintegral(L, <a class="code" href="lobject_8h.html#2fbf715e78eaa889ed0fb9d4514e736a">sizenode</a>(t)); <a name="l00329"></a>00329 lua_pushintegral(L, t-><a class="code" href="structTable.html#bab599417e4012c09675c2aff716b116">firstfree</a> - t-><a class="code" href="structTable.html#519f179c707cb4e93bb66d09151c89e5">node</a>); <a name="l00330"></a>00330 } <a name="l00331"></a>00331 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i < t->sizearray) { <a name="l00332"></a>00332 lua_pushintegral(L, i); <a name="l00333"></a>00333 <a class="code" href="lapi_8c.html#02494e72514383c21b1ca3642f6b09f5">luaA_pushobject</a>(L, &t-><a class="code" href="structTable.html#193ec6402a4e6e6aa976ca1ffe7186d3">array</a>[i]); <a name="l00334"></a>00334 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00335"></a>00335 } <a name="l00336"></a>00336 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((i -= t-><a class="code" href="structTable.html#2c648e99fcf88c4660c97e7d9408b50f">sizearray</a>) < <a class="code" href="lobject_8h.html#2fbf715e78eaa889ed0fb9d4514e736a">sizenode</a>(t)) { <a name="l00337"></a>00337 <span class="keywordflow">if</span> (!<a class="code" href="lobject_8h.html#8630c13eaefbeaba1aa0933cab6e0238">ttisnil</a>(<a class="code" href="ltable_8h.html#cbbecd9bd8fbb72a17f6e2f5acf7113d">gval</a>(<a class="code" href="ltable_8h.html#644cfa3b6d4be1782e818a8340b5f78b">gnode</a>(t, i))) || <a name="l00338"></a>00338 <a class="code" href="lobject_8h.html#8630c13eaefbeaba1aa0933cab6e0238">ttisnil</a>(<a class="code" href="ltable_8h.html#d8f233e3b7156cd470d0ac21d7b54c11">gkey</a>(<a class="code" href="ltable_8h.html#644cfa3b6d4be1782e818a8340b5f78b">gnode</a>(t, i))) || <a name="l00339"></a>00339 <a class="code" href="lobject_8h.html#7a1392f89b1f29ed3b1afa37a22d0be2">ttisnumber</a>(<a class="code" href="ltable_8h.html#d8f233e3b7156cd470d0ac21d7b54c11">gkey</a>(<a class="code" href="ltable_8h.html#644cfa3b6d4be1782e818a8340b5f78b">gnode</a>(t, i)))) { <a name="l00340"></a>00340 <a class="code" href="lapi_8c.html#02494e72514383c21b1ca3642f6b09f5">luaA_pushobject</a>(L, <a class="code" href="ltable_8h.html#d8f233e3b7156cd470d0ac21d7b54c11">gkey</a>(<a class="code" href="ltable_8h.html#644cfa3b6d4be1782e818a8340b5f78b">gnode</a>(t, i))); <a name="l00341"></a>00341 } <a name="l00342"></a>00342 <span class="keywordflow">else</span> <a name="l00343"></a>00343 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, <span class="stringliteral">"<undef>"</span>); <a name="l00344"></a>00344 <a class="code" href="lapi_8c.html#02494e72514383c21b1ca3642f6b09f5">luaA_pushobject</a>(L, <a class="code" href="ltable_8h.html#cbbecd9bd8fbb72a17f6e2f5acf7113d">gval</a>(<a class="code" href="ltable_8h.html#644cfa3b6d4be1782e818a8340b5f78b">gnode</a>(t, i))); <a name="l00345"></a>00345 <span class="keywordflow">if</span> (t-><a class="code" href="structTable.html#519f179c707cb4e93bb66d09151c89e5">node</a>[i].<a class="code" href="structNode.html#f67b110ca1a258b793bf69d306929b22">next</a>) <a name="l00346"></a>00346 lua_pushintegral(L, t-><a class="code" href="structTable.html#519f179c707cb4e93bb66d09151c89e5">node</a>[i].<a class="code" href="structNode.html#f67b110ca1a258b793bf69d306929b22">next</a> - t-><a class="code" href="structTable.html#519f179c707cb4e93bb66d09151c89e5">node</a>); <a name="l00347"></a>00347 <span class="keywordflow">else</span> <a name="l00348"></a>00348 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00349"></a>00349 } <a name="l00350"></a>00350 <span class="keywordflow">return</span> 3; <a name="l00351"></a>00351 } <a name="l00352"></a>00352 <a name="l00353"></a>00353 <a name="l00354"></a>00354 <span class="keyword">static</span> <span class="keywordtype">int</span> string_query (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00355"></a>00355 <span class="comment">/*@*/</span> <a name="l00356"></a>00356 { <a name="l00357"></a>00357 <a class="code" href="structstringtable.html">stringtable</a> *tb = &<a class="code" href="lstate_8h.html#103db2de6edf3420c6c6c9a282562406">G</a>(L)->strt; <a name="l00358"></a>00358 <span class="keywordtype">int</span> s = luaL_optint(L, 2, 0) - 1; <a name="l00359"></a>00359 <span class="keywordflow">if</span> (s==-1) { <a name="l00360"></a>00360 lua_pushintegral(L ,tb-><a class="code" href="structstringtable.html#e5c0aebea09828e0e250a34ebea683a3">nuse</a>); <a name="l00361"></a>00361 lua_pushintegral(L ,tb-><a class="code" href="structstringtable.html#10674affaad79ff819b6aa3b4618b94e">size</a>); <a name="l00362"></a>00362 <span class="keywordflow">return</span> 2; <a name="l00363"></a>00363 } <a name="l00364"></a>00364 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s < tb->size) { <a name="l00365"></a>00365 <a class="code" href="unionGCObject.html">GCObject</a> *ts; <a name="l00366"></a>00366 <span class="keywordtype">int</span> n = 0; <a name="l00367"></a>00367 <span class="keywordflow">for</span> (ts = tb-><a class="code" href="structstringtable.html#132ba77978bbf9852ad840e11975e347">hash</a>[s]; ts; ts = ts-><a class="code" href="unionGCObject.html#1abd8f26ec7f6d3c47da2b9411b87a95">gch</a>.<a class="code" href="structGCheader.html#bcc9ef17eccbf3208661a57a006a68ff">next</a>) { <a name="l00368"></a>00368 <a class="code" href="lobject_8h.html#2defbd1005c5aebb5807517ddea80f3f">setsvalue2s</a>(L-><a class="code" href="structlua__State.html#195f448e76fd404953fa1962d28212a3">top</a>, <a class="code" href="lstate_8h.html#ccac69fd582898bfa9fe9067c17a1948">gcotots</a>(ts)); <a name="l00369"></a>00369 <a class="code" href="ldo_8h.html#9c102d2b8b9a0a52bbb15eeeb4e0cbac">incr_top</a>(L); <a name="l00370"></a>00370 n++; <a name="l00371"></a>00371 } <a name="l00372"></a>00372 <span class="keywordflow">return</span> n; <a name="l00373"></a>00373 } <a name="l00374"></a>00374 <span class="keywordflow">return</span> 0; <a name="l00375"></a>00375 } <a name="l00376"></a>00376 <a name="l00377"></a>00377 <a name="l00378"></a>00378 <span class="keyword">static</span> <span class="keywordtype">int</span> tref (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00379"></a>00379 <span class="comment">/*@*/</span> <a name="l00380"></a>00380 { <a name="l00381"></a>00381 <span class="keywordtype">int</span> level = <a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L); <a name="l00382"></a>00382 <span class="keywordtype">int</span> lock = luaL_optint(L, 2, 1); <a name="l00383"></a>00383 luaL_checkany(L, 1); <a name="l00384"></a>00384 <a class="code" href="lapi_8c.html#602f61a9b583d69dc1c72c8970bd65e8">lua_pushvalue</a>(L, 1); <a name="l00385"></a>00385 lua_pushintegral(L, lua_ref(L, lock)); <a name="l00386"></a>00386 assert(<a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L) == level+1); <span class="comment">/* +1 for result */</span> <a name="l00387"></a>00387 <span class="keywordflow">return</span> 1; <a name="l00388"></a>00388 } <a name="l00389"></a>00389 <a name="l00390"></a>00390 <span class="keyword">static</span> <span class="keywordtype">int</span> getref (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00391"></a>00391 <span class="comment">/*@*/</span> <a name="l00392"></a>00392 { <a name="l00393"></a>00393 <span class="keywordtype">int</span> level = <a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L); <a name="l00394"></a>00394 lua_getref(L, luaL_checkint(L, 1)); <a name="l00395"></a>00395 assert(<a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L) == level+1); <a name="l00396"></a>00396 <span class="keywordflow">return</span> 1; <a name="l00397"></a>00397 } <a name="l00398"></a>00398 <a name="l00399"></a>00399 <span class="keyword">static</span> <span class="keywordtype">int</span> unref (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00400"></a>00400 <span class="comment">/*@*/</span> <a name="l00401"></a>00401 { <a name="l00402"></a>00402 <span class="keywordtype">int</span> level = <a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L); <a name="l00403"></a>00403 lua_unref(L, luaL_checkint(L, 1)); <a name="l00404"></a>00404 assert(<a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L) == level); <a name="l00405"></a>00405 <span class="keywordflow">return</span> 0; <a name="l00406"></a>00406 } <a name="l00407"></a>00407 <a name="l00408"></a>00408 <span class="keyword">static</span> <span class="keywordtype">int</span> metatable (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00409"></a>00409 <span class="comment">/*@*/</span> <a name="l00410"></a>00410 { <a name="l00411"></a>00411 luaL_checkany(L, 1); <a name="l00412"></a>00412 <span class="keywordflow">if</span> (lua_isnone(L, 2)) { <a name="l00413"></a>00413 <span class="keywordflow">if</span> (<a class="code" href="lapi_8c.html#4caa9ca5e47a30bd45e33d83bf2d6d6e">lua_getmetatable</a>(L, 1) == 0) <a name="l00414"></a>00414 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00415"></a>00415 } <a name="l00416"></a>00416 <span class="keywordflow">else</span> { <a name="l00417"></a>00417 <a class="code" href="lapi_8c.html#daa30f0d34786144c94644039d1d1b6e">lua_settop</a>(L, 2); <a name="l00418"></a>00418 luaL_checktype(L, 2, LUA_TTABLE); <a name="l00419"></a>00419 <a class="code" href="lapi_8c.html#15719ea4119bdf5b3f2a406534431a7e">lua_setmetatable</a>(L, 1); <a name="l00420"></a>00420 } <a name="l00421"></a>00421 <span class="keywordflow">return</span> 1; <a name="l00422"></a>00422 } <a name="l00423"></a>00423 <a name="l00424"></a>00424 <a name="l00425"></a>00425 <span class="keyword">static</span> <span class="keywordtype">int</span> upvalue (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00426"></a>00426 <span class="comment">/*@*/</span> <a name="l00427"></a>00427 { <a name="l00428"></a>00428 <span class="keywordtype">int</span> n = luaL_checkint(L, 2); <a name="l00429"></a>00429 luaL_checktype(L, 1, LUA_TFUNCTION); <a name="l00430"></a>00430 <span class="keywordflow">if</span> (lua_isnone(L, 3)) { <a name="l00431"></a>00431 <span class="keyword">const</span> <span class="keywordtype">char</span> *name = <a class="code" href="lapi_8c.html#fd5e7d6995dc52a5cb9e370ee3a710e6">lua_getupvalue</a>(L, 1, n); <a name="l00432"></a>00432 <span class="keywordflow">if</span> (name == NULL) <span class="keywordflow">return</span> 0; <a name="l00433"></a>00433 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, name); <a name="l00434"></a>00434 <span class="keywordflow">return</span> 2; <a name="l00435"></a>00435 } <a name="l00436"></a>00436 <span class="keywordflow">else</span> { <a name="l00437"></a>00437 <span class="keyword">const</span> <span class="keywordtype">char</span> *name = <a class="code" href="lapi_8c.html#6e2e5717e848fca56335a64739a8f2c0">lua_setupvalue</a>(L, 1, n); <a name="l00438"></a>00438 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, name); <a name="l00439"></a>00439 <span class="keywordflow">return</span> 1; <a name="l00440"></a>00440 } <a name="l00441"></a>00441 } <a name="l00442"></a>00442 <a name="l00443"></a>00443 <a name="l00444"></a>00444 <span class="keyword">static</span> <span class="keywordtype">int</span> newuserdata (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00445"></a>00445 <span class="comment">/*@*/</span> <a name="l00446"></a>00446 { <a name="l00447"></a>00447 size_t size = luaL_checkint(L, 1); <a name="l00448"></a>00448 <span class="keywordtype">char</span> *p = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, <a class="code" href="lapi_8c.html#467bb6f4780b27d6e7de6ee10a80dac5">lua_newuserdata</a>(L, size)); <a name="l00449"></a>00449 <span class="keywordflow">while</span> (size--) *p++ = <span class="charliteral">'\0'</span>; <a name="l00450"></a>00450 <span class="keywordflow">return</span> 1; <a name="l00451"></a>00451 } <a name="l00452"></a>00452 <a name="l00453"></a>00453 <a name="l00454"></a>00454 <span class="keyword">static</span> <span class="keywordtype">int</span> pushuserdata (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00455"></a>00455 <span class="comment">/*@*/</span> <a name="l00456"></a>00456 { <a name="l00457"></a>00457 <a class="code" href="lapi_8c.html#85e3e3d32b068aef62426828a104b561">lua_pushlightuserdata</a>(L, <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">void</span> *, luaL_checkint(L, 1))); <a name="l00458"></a>00458 <span class="keywordflow">return</span> 1; <a name="l00459"></a>00459 } <a name="l00460"></a>00460 <a name="l00461"></a>00461 <a name="l00462"></a>00462 <span class="keyword">static</span> <span class="keywordtype">int</span> udataval (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00463"></a>00463 <span class="comment">/*@*/</span> <a name="l00464"></a>00464 { <a name="l00465"></a>00465 lua_pushintegral(L, <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">int</span>, <a class="code" href="lapi_8c.html#0444ddf13e5618bca969e4b3b47bc0cc">lua_touserdata</a>(L, 1))); <a name="l00466"></a>00466 <span class="keywordflow">return</span> 1; <a name="l00467"></a>00467 } <a name="l00468"></a>00468 <a name="l00469"></a>00469 <a name="l00470"></a>00470 <span class="keyword">static</span> <span class="keywordtype">int</span> doonnewstack (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00471"></a>00471 <span class="comment">/*@*/</span> <a name="l00472"></a>00472 { <a name="l00473"></a>00473 <a class="code" href="structlua__State.html">lua_State</a> *L1 = <a class="code" href="lapi_8c.html#86b660d6f2b69734c35ec9fc718e4ca9">lua_newthread</a>(L); <a name="l00474"></a>00474 size_t l; <a name="l00475"></a>00475 <span class="keyword">const</span> <span class="keywordtype">char</span> *s = luaL_checklstring(L, 1, &l); <a name="l00476"></a>00476 <span class="keywordtype">int</span> status = luaL_loadbuffer(L1, s, l, s); <a name="l00477"></a>00477 <span class="keywordflow">if</span> (status == 0) <a name="l00478"></a>00478 status = <a class="code" href="lapi_8c.html#2a6cbad7f1c567378d17ded68b47f8f3">lua_pcall</a>(L1, 0, 0, 0); <a name="l00479"></a>00479 lua_pushintegral(L, status); <a name="l00480"></a>00480 <span class="keywordflow">return</span> 1; <a name="l00481"></a>00481 } <a name="l00482"></a>00482 <a name="l00483"></a>00483 <a name="l00484"></a>00484 <span class="keyword">static</span> <span class="keywordtype">int</span> s2d (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00485"></a>00485 <span class="comment">/*@*/</span> <a name="l00486"></a>00486 { <a name="l00487"></a>00487 <a class="code" href="lapi_8c.html#328625a03fbb5548f27b1af10f109f6a">lua_pushnumber</a>(L, *<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keyword">const</span> <span class="keywordtype">double</span> *, luaL_checkstring(L, 1))); <a name="l00488"></a>00488 <span class="keywordflow">return</span> 1; <a name="l00489"></a>00489 } <a name="l00490"></a>00490 <a name="l00491"></a>00491 <span class="keyword">static</span> <span class="keywordtype">int</span> d2s (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00492"></a>00492 <span class="comment">/*@*/</span> <a name="l00493"></a>00493 { <a name="l00494"></a>00494 <span class="keywordtype">double</span> d = luaL_checknumber(L, 1); <a name="l00495"></a>00495 <a class="code" href="lapi_8c.html#d457b6dc1bc1b6d5cf9b625c5b329e5e">lua_pushlstring</a>(L, <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">char</span> *, &d), <span class="keyword">sizeof</span>(d)); <a name="l00496"></a>00496 <span class="keywordflow">return</span> 1; <a name="l00497"></a>00497 } <a name="l00498"></a>00498 <a name="l00499"></a>00499 <a name="l00500"></a>00500 <span class="keyword">static</span> <span class="keywordtype">int</span> newstate (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00501"></a>00501 <span class="comment">/*@*/</span> <a name="l00502"></a>00502 { <a name="l00503"></a>00503 <a class="code" href="structlua__State.html">lua_State</a> *L1 = <a class="code" href="lstate_8c.html#eed61eafe52d3712fbdb108621948a5b">lua_open</a>(); <a name="l00504"></a>00504 <span class="keywordflow">if</span> (L1) { <a name="l00505"></a>00505 <a class="code" href="lstate_8h.html#bdbfc204d6c2509db9d616141b893018">lua_userstateopen</a>(L1); <span class="comment">/* init lock */</span> <a name="l00506"></a>00506 lua_pushintegral(L, (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)L1); <a name="l00507"></a>00507 } <a name="l00508"></a>00508 <span class="keywordflow">else</span> <a name="l00509"></a>00509 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00510"></a>00510 <span class="keywordflow">return</span> 1; <a name="l00511"></a>00511 } <a name="l00512"></a>00512 <a name="l00513"></a>00513 <a name="l00514"></a>00514 <span class="keyword">static</span> <span class="keywordtype">int</span> loadlib (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00515"></a>00515 <span class="comment">/*@*/</span> <a name="l00516"></a>00516 { <a name="l00517"></a>00517 <span class="keyword">static</span> <span class="keyword">const</span> luaL_reg libs[] = { <a name="l00518"></a>00518 {<span class="stringliteral">"mathlibopen"</span>, luaopen_math}, <a name="l00519"></a>00519 {<span class="stringliteral">"strlibopen"</span>, luaopen_string}, <a name="l00520"></a>00520 {<span class="stringliteral">"iolibopen"</span>, luaopen_io}, <a name="l00521"></a>00521 {<span class="stringliteral">"tablibopen"</span>, luaopen_table}, <a name="l00522"></a>00522 {<span class="stringliteral">"dblibopen"</span>, luaopen_debug}, <a name="l00523"></a>00523 {<span class="stringliteral">"baselibopen"</span>, luaopen_base}, <a name="l00524"></a>00524 {NULL, NULL} <a name="l00525"></a>00525 }; <a name="l00526"></a>00526 <a class="code" href="structlua__State.html">lua_State</a> *L1 = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<a class="code" href="structlua__State.html">lua_State</a> *, <a name="l00527"></a>00527 <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>, luaL_checknumber(L, 1))); <a name="l00528"></a>00528 <a class="code" href="lapi_8c.html#602f61a9b583d69dc1c72c8970bd65e8">lua_pushvalue</a>(L1, LUA_GLOBALSINDEX); <a name="l00529"></a>00529 luaL_openlib(L1, NULL, libs, 0); <a name="l00530"></a>00530 <span class="keywordflow">return</span> 0; <a name="l00531"></a>00531 } <a name="l00532"></a>00532 <a name="l00533"></a>00533 <span class="keyword">static</span> <span class="keywordtype">int</span> closestate (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00534"></a>00534 <span class="comment">/*@*/</span> <a name="l00535"></a>00535 { <a name="l00536"></a>00536 <a class="code" href="structlua__State.html">lua_State</a> *L1 = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<a class="code" href="structlua__State.html">lua_State</a> *, <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>, luaL_checknumber(L, 1))); <a name="l00537"></a>00537 <a class="code" href="lstate_8c.html#5d903983f1497b2fc58fba9df09e354d">lua_close</a>(L1); <a name="l00538"></a>00538 <a class="code" href="lstate_8h.html#1781f2a7d9161848a246d475a9171875">lua_unlock</a>(L); <span class="comment">/* close cannot unlock that */</span> <a name="l00539"></a>00539 <span class="keywordflow">return</span> 0; <a name="l00540"></a>00540 } <a name="l00541"></a>00541 <a name="l00542"></a>00542 <span class="keyword">static</span> <span class="keywordtype">int</span> doremote (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00543"></a>00543 <span class="comment">/*@*/</span> <a name="l00544"></a>00544 { <a name="l00545"></a>00545 <a class="code" href="structlua__State.html">lua_State</a> *L1 = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<a class="code" href="structlua__State.html">lua_State</a> *,<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>,luaL_checknumber(L, 1))); <a name="l00546"></a>00546 size_t lcode; <a name="l00547"></a>00547 <span class="keyword">const</span> <span class="keywordtype">char</span> *code = luaL_checklstring(L, 2, &lcode); <a name="l00548"></a>00548 <span class="keywordtype">int</span> status; <a name="l00549"></a>00549 <a class="code" href="lapi_8c.html#daa30f0d34786144c94644039d1d1b6e">lua_settop</a>(L1, 0); <a name="l00550"></a>00550 status = luaL_loadbuffer(L1, code, lcode, code); <a name="l00551"></a>00551 <span class="keywordflow">if</span> (status == 0) <a name="l00552"></a>00552 status = <a class="code" href="lapi_8c.html#2a6cbad7f1c567378d17ded68b47f8f3">lua_pcall</a>(L1, 0, LUA_MULTRET, 0); <a name="l00553"></a>00553 <span class="keywordflow">if</span> (status != 0) { <a name="l00554"></a>00554 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00555"></a>00555 lua_pushintegral(L, status); <a name="l00556"></a>00556 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, <a class="code" href="lapi_8c.html#a5fd989a5c635ba942898b849c3a22ab">lua_tostring</a>(L1, -1)); <a name="l00557"></a>00557 <span class="keywordflow">return</span> 3; <a name="l00558"></a>00558 } <a name="l00559"></a>00559 <span class="keywordflow">else</span> { <a name="l00560"></a>00560 <span class="keywordtype">int</span> i = 0; <a name="l00561"></a>00561 <span class="keywordflow">while</span> (!lua_isnone(L1, ++i)) <a name="l00562"></a>00562 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, <a class="code" href="lapi_8c.html#a5fd989a5c635ba942898b849c3a22ab">lua_tostring</a>(L1, i)); <a name="l00563"></a>00563 lua_pop(L1, i-1); <a name="l00564"></a>00564 <span class="keywordflow">return</span> i-1; <a name="l00565"></a>00565 } <a name="l00566"></a>00566 } <a name="l00567"></a>00567 <a name="l00568"></a>00568 <a name="l00569"></a>00569 <span class="keyword">static</span> <span class="keywordtype">int</span> log2_aux (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00570"></a>00570 <span class="comment">/*@*/</span> <a name="l00571"></a>00571 { <a name="l00572"></a>00572 lua_pushintegral(L, <a class="code" href="lobject_8c.html#dd64dfff81baeccf18056c1e0aa665f7">luaO_log2</a>(luaL_checkint(L, 1))); <a name="l00573"></a>00573 <span class="keywordflow">return</span> 1; <a name="l00574"></a>00574 } <a name="l00575"></a>00575 <a name="l00576"></a>00576 <span class="keyword">static</span> <span class="keywordtype">int</span> int2fb_aux (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00577"></a>00577 <span class="comment">/*@*/</span> <a name="l00578"></a>00578 { <a name="l00579"></a>00579 <span class="keywordtype">int</span> b = <a class="code" href="lobject_8c.html#cbb799248ff2c18c780d58034b448361">luaO_int2fb</a>(luaL_checkint(L, 1)); <a name="l00580"></a>00580 lua_pushintegral(L, b); <a name="l00581"></a>00581 lua_pushintegral(L, <a class="code" href="lobject_8h.html#373965334f4beab293057782143cdf80">fb2int</a>(b)); <a name="l00582"></a>00582 <span class="keywordflow">return</span> 2; <a name="l00583"></a>00583 } <a name="l00584"></a>00584 <a name="l00585"></a>00585 <a name="l00586"></a>00586 <span class="keyword">static</span> <span class="keywordtype">int</span> test_do (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00587"></a>00587 <span class="comment">/*@*/</span> <a name="l00588"></a>00588 { <a name="l00589"></a>00589 <span class="keyword">const</span> <span class="keywordtype">char</span> *p = luaL_checkstring(L, 1); <a name="l00590"></a>00590 <span class="keywordflow">if</span> (*p == <span class="charliteral">'@'</span>) <a name="l00591"></a>00591 lua_dofile(L, p+1); <a name="l00592"></a>00592 <span class="keywordflow">else</span> <a name="l00593"></a>00593 lua_dostring(L, p); <a name="l00594"></a>00594 <span class="keywordflow">return</span> <a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L); <a name="l00595"></a>00595 } <a name="l00596"></a>00596 <a name="l00597"></a>00597 <a name="l00598"></a>00598 <a name="l00599"></a>00599 <span class="comment">/*</span> <a name="l00600"></a>00600 <span class="comment">** {======================================================</span> <a name="l00601"></a>00601 <span class="comment">** function to test the API with C. It interprets a kind of assembler</span> <a name="l00602"></a>00602 <span class="comment">** language with calls to the API, so the test can be driven by Lua code</span> <a name="l00603"></a>00603 <span class="comment">** =======================================================</span> <a name="l00604"></a>00604 <span class="comment">*/</span> <a name="l00605"></a>00605 <a name="l00606"></a>00606 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> delimits = <span class="stringliteral">" \t\n,;"</span>; <a name="l00607"></a>00607 <a name="l00608"></a>00608 <span class="keyword">static</span> <span class="keywordtype">void</span> skip (<span class="keyword">const</span> <span class="keywordtype">char</span> **pc) <a name="l00609"></a>00609 <span class="comment">/*@*/</span> <a name="l00610"></a>00610 { <a name="l00611"></a>00611 <span class="keywordflow">while</span> (**pc != <span class="charliteral">'\0'</span> && strchr(delimits, **pc)) (*pc)++; <a name="l00612"></a>00612 } <a name="l00613"></a>00613 <a name="l00614"></a>00614 <span class="keyword">static</span> <span class="keywordtype">int</span> getnum_aux (<a class="code" href="structlua__State.html">lua_State</a> *L, <span class="keyword">const</span> <span class="keywordtype">char</span> **pc) <a name="l00615"></a>00615 <span class="comment">/*@*/</span> <a name="l00616"></a>00616 { <a name="l00617"></a>00617 <span class="keywordtype">int</span> res = 0; <a name="l00618"></a>00618 <span class="keywordtype">int</span> sig = 1; <a name="l00619"></a>00619 skip(pc); <a name="l00620"></a>00620 <span class="keywordflow">if</span> (**pc == <span class="charliteral">'.'</span>) { <a name="l00621"></a>00621 res = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">int</span>, <a class="code" href="lapi_8c.html#42c1f68101dc98a6ae4695c8577b17f8">lua_tonumber</a>(L, -1)); <a name="l00622"></a>00622 lua_pop(L, 1); <a name="l00623"></a>00623 (*pc)++; <a name="l00624"></a>00624 <span class="keywordflow">return</span> res; <a name="l00625"></a>00625 } <a name="l00626"></a>00626 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (**pc == <span class="charliteral">'-'</span>) { <a name="l00627"></a>00627 sig = -1; <a name="l00628"></a>00628 (*pc)++; <a name="l00629"></a>00629 } <a name="l00630"></a>00630 <span class="keywordflow">while</span> (isdigit(<a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">int</span>, **pc))) res = res*10 + (*(*pc)++) - <span class="charliteral">'0'</span>; <a name="l00631"></a>00631 <span class="keywordflow">return</span> sig*res; <a name="l00632"></a>00632 } <a name="l00633"></a>00633 <a name="l00634"></a>00634 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *getname_aux (<span class="keywordtype">char</span> *buff, <span class="keyword">const</span> <span class="keywordtype">char</span> **pc) <a name="l00635"></a>00635 <span class="comment">/*@*/</span> <a name="l00636"></a>00636 { <a name="l00637"></a>00637 <span class="keywordtype">int</span> i = 0; <a name="l00638"></a>00638 skip(pc); <a name="l00639"></a>00639 <span class="keywordflow">while</span> (**pc != <span class="charliteral">'\0'</span> && !strchr(delimits, **pc)) <a name="l00640"></a>00640 buff[i++] = *(*pc)++; <a name="l00641"></a>00641 buff[i] = <span class="charliteral">'\0'</span>; <a name="l00642"></a>00642 <span class="keywordflow">return</span> buff; <a name="l00643"></a>00643 } <a name="l00644"></a>00644 <a name="l00645"></a>00645 <a name="l00646"></a>00646 <span class="preprocessor">#define EQ(s1) (strcmp(s1, inst) == 0)</span> <a name="l00647"></a>00647 <span class="preprocessor"></span> <a name="l00648"></a>00648 <span class="preprocessor">#define getnum (getnum_aux(L, &pc))</span> <a name="l00649"></a>00649 <span class="preprocessor"></span><span class="preprocessor">#define getname (getname_aux(buff, &pc))</span> <a name="l00650"></a>00650 <span class="preprocessor"></span> <a name="l00651"></a>00651 <a name="l00652"></a>00652 <span class="keyword">static</span> <span class="keywordtype">int</span> testC (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00653"></a>00653 <span class="comment">/*@*/</span> <a name="l00654"></a>00654 { <a name="l00655"></a>00655 <span class="keywordtype">char</span> buff[30]; <a name="l00656"></a>00656 <span class="keyword">const</span> <span class="keywordtype">char</span> *pc = luaL_checkstring(L, 1); <a name="l00657"></a>00657 <span class="keywordflow">for</span> (;;) { <a name="l00658"></a>00658 <span class="keyword">const</span> <span class="keywordtype">char</span> *inst = getname; <a name="l00659"></a>00659 <span class="keywordflow">if</span> EQ(<span class="stringliteral">""</span>) return 0; <a name="l00660"></a>00660 else if EQ("isnumber") { <a name="l00661"></a>00661 lua_pushintegral(L, <a class="code" href="lapi_8c.html#99451f234bf085c9c46c3d17a5aef905">lua_isnumber</a>(L, getnum)); <a name="l00662"></a>00662 } <a name="l00663"></a>00663 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"isstring"</span>) { <a name="l00664"></a>00664 lua_pushintegral(L, <a class="code" href="lapi_8c.html#9f20233199a414b04c1c4b43f5d040f3">lua_isstring</a>(L, getnum)); <a name="l00665"></a>00665 } <a name="l00666"></a>00666 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"istable"</span>) { <a name="l00667"></a>00667 lua_pushintegral(L, lua_istable(L, getnum)); <a name="l00668"></a>00668 } <a name="l00669"></a>00669 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"iscfunction"</span>) { <a name="l00670"></a>00670 lua_pushintegral(L, <a class="code" href="lapi_8c.html#3b922032c9fe2930399186a3647cc3ad">lua_iscfunction</a>(L, getnum)); <a name="l00671"></a>00671 } <a name="l00672"></a>00672 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"isfunction"</span>) { <a name="l00673"></a>00673 lua_pushintegral(L, lua_isfunction(L, getnum)); <a name="l00674"></a>00674 } <a name="l00675"></a>00675 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"isuserdata"</span>) { <a name="l00676"></a>00676 lua_pushintegral(L, <a class="code" href="lapi_8c.html#a8a1dab86cfb4e0f9a4d1f699af0041b">lua_isuserdata</a>(L, getnum)); <a name="l00677"></a>00677 } <a name="l00678"></a>00678 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"isudataval"</span>) { <a name="l00679"></a>00679 lua_pushintegral(L, lua_islightuserdata(L, getnum)); <a name="l00680"></a>00680 } <a name="l00681"></a>00681 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"isnil"</span>) { <a name="l00682"></a>00682 lua_pushintegral(L, lua_isnil(L, getnum)); <a name="l00683"></a>00683 } <a name="l00684"></a>00684 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"isnull"</span>) { <a name="l00685"></a>00685 lua_pushintegral(L, lua_isnone(L, getnum)); <a name="l00686"></a>00686 } <a name="l00687"></a>00687 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"tonumber"</span>) { <a name="l00688"></a>00688 <a class="code" href="lapi_8c.html#328625a03fbb5548f27b1af10f109f6a">lua_pushnumber</a>(L, <a class="code" href="lapi_8c.html#42c1f68101dc98a6ae4695c8577b17f8">lua_tonumber</a>(L, getnum)); <a name="l00689"></a>00689 } <a name="l00690"></a>00690 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"tostring"</span>) { <a name="l00691"></a>00691 <span class="keyword">const</span> <span class="keywordtype">char</span> *s = <a class="code" href="lapi_8c.html#a5fd989a5c635ba942898b849c3a22ab">lua_tostring</a>(L, getnum); <a name="l00692"></a>00692 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, s); <a name="l00693"></a>00693 } <a name="l00694"></a>00694 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"strlen"</span>) { <a name="l00695"></a>00695 lua_pushintegral(L, <a class="code" href="lapi_8c.html#f498049768fefbde2736b3dab83cf69d">lua_strlen</a>(L, getnum)); <a name="l00696"></a>00696 } <a name="l00697"></a>00697 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"tocfunction"</span>) { <a name="l00698"></a>00698 lua_pushcfunction(L, <a class="code" href="lapi_8c.html#e790897a3311d599299895612986d850">lua_tocfunction</a>(L, getnum)); <a name="l00699"></a>00699 } <a name="l00700"></a>00700 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"return"</span>) { <a name="l00701"></a>00701 <span class="keywordflow">return</span> getnum; <a name="l00702"></a>00702 } <a name="l00703"></a>00703 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"gettop"</span>) { <a name="l00704"></a>00704 lua_pushintegral(L, <a class="code" href="lapi_8c.html#fbb08ecb69421875494105d4de68e5bf">lua_gettop</a>(L)); <a name="l00705"></a>00705 } <a name="l00706"></a>00706 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"settop"</span>) { <a name="l00707"></a>00707 <a class="code" href="lapi_8c.html#daa30f0d34786144c94644039d1d1b6e">lua_settop</a>(L, getnum); <a name="l00708"></a>00708 } <a name="l00709"></a>00709 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pop"</span>) { <a name="l00710"></a>00710 lua_pop(L, getnum); <a name="l00711"></a>00711 } <a name="l00712"></a>00712 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pushnum"</span>) { <a name="l00713"></a>00713 lua_pushintegral(L, getnum); <a name="l00714"></a>00714 } <a name="l00715"></a>00715 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pushnil"</span>) { <a name="l00716"></a>00716 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00717"></a>00717 } <a name="l00718"></a>00718 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pushbool"</span>) { <a name="l00719"></a>00719 <a class="code" href="lapi_8c.html#56bbb7479265e38da2e2596e6ec25faa">lua_pushboolean</a>(L, getnum); <a name="l00720"></a>00720 } <a name="l00721"></a>00721 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"tobool"</span>) { <a name="l00722"></a>00722 lua_pushintegral(L, <a class="code" href="lapi_8c.html#444aee9aa56b0b06175ee3c7bcf7927c">lua_toboolean</a>(L, getnum)); <a name="l00723"></a>00723 } <a name="l00724"></a>00724 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pushvalue"</span>) { <a name="l00725"></a>00725 <a class="code" href="lapi_8c.html#602f61a9b583d69dc1c72c8970bd65e8">lua_pushvalue</a>(L, getnum); <a name="l00726"></a>00726 } <a name="l00727"></a>00727 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pushcclosure"</span>) { <a name="l00728"></a>00728 <a class="code" href="lapi_8c.html#142802b91cdd22516b54599f51e101e4">lua_pushcclosure</a>(L, testC, getnum); <a name="l00729"></a>00729 } <a name="l00730"></a>00730 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"pushupvalues"</span>) { <a name="l00731"></a>00731 <a class="code" href="lapi_8c.html#54a1b13d3c1c104b32d398bdaa37b6a0">lua_pushupvalues</a>(L); <a name="l00732"></a>00732 } <a name="l00733"></a>00733 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"remove"</span>) { <a name="l00734"></a>00734 <a class="code" href="lapi_8c.html#7f2ac31d9ad6f0e0ff068d2fbbd08714">lua_remove</a>(L, getnum); <a name="l00735"></a>00735 } <a name="l00736"></a>00736 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"insert"</span>) { <a name="l00737"></a>00737 <a class="code" href="lapi_8c.html#ba6844115e26e0923488403436219e66">lua_insert</a>(L, getnum); <a name="l00738"></a>00738 } <a name="l00739"></a>00739 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"replace"</span>) { <a name="l00740"></a>00740 <a class="code" href="lapi_8c.html#66d3827120ac828f870502bff0d4ff75">lua_replace</a>(L, getnum); <a name="l00741"></a>00741 } <a name="l00742"></a>00742 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"gettable"</span>) { <a name="l00743"></a>00743 <a class="code" href="lapi_8c.html#6c759e1dc54a07d99eac4f19a4cd142a">lua_gettable</a>(L, getnum); <a name="l00744"></a>00744 } <a name="l00745"></a>00745 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"settable"</span>) { <a name="l00746"></a>00746 <a class="code" href="lapi_8c.html#4ca492cf3d2194aec9a6292708bf66c8">lua_settable</a>(L, getnum); <a name="l00747"></a>00747 } <a name="l00748"></a>00748 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"next"</span>) { <a name="l00749"></a>00749 <a class="code" href="lapi_8c.html#a8bf464b98335a075732200ad91ce1de">lua_next</a>(L, -2); <a name="l00750"></a>00750 } <a name="l00751"></a>00751 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"concat"</span>) { <a name="l00752"></a>00752 <a class="code" href="lapi_8c.html#1de3afee1daece63d455f23818c883d9">lua_concat</a>(L, getnum); <a name="l00753"></a>00753 } <a name="l00754"></a>00754 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"lessthan"</span>) { <a name="l00755"></a>00755 <span class="keywordtype">int</span> a = getnum; <a name="l00756"></a>00756 <a class="code" href="lapi_8c.html#56bbb7479265e38da2e2596e6ec25faa">lua_pushboolean</a>(L, <a class="code" href="lapi_8c.html#e2059ba2de707cb5657d1723aa23e752">lua_lessthan</a>(L, a, getnum)); <a name="l00757"></a>00757 } <a name="l00758"></a>00758 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"equal"</span>) { <a name="l00759"></a>00759 <span class="keywordtype">int</span> a = getnum; <a name="l00760"></a>00760 <a class="code" href="lapi_8c.html#56bbb7479265e38da2e2596e6ec25faa">lua_pushboolean</a>(L, <a class="code" href="lapi_8c.html#e9280336584359894597220e5691bbce">lua_equal</a>(L, a, getnum)); <a name="l00761"></a>00761 } <a name="l00762"></a>00762 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"rawcall"</span>) { <a name="l00763"></a>00763 <span class="keywordtype">int</span> narg = getnum; <a name="l00764"></a>00764 <span class="keywordtype">int</span> nres = getnum; <a name="l00765"></a>00765 <a class="code" href="lapi_8c.html#2d80481ca28902752c2b12c61d9d4234">lua_call</a>(L, narg, nres); <a name="l00766"></a>00766 } <a name="l00767"></a>00767 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"call"</span>) { <a name="l00768"></a>00768 <span class="keywordtype">int</span> narg = getnum; <a name="l00769"></a>00769 <span class="keywordtype">int</span> nres = getnum; <a name="l00770"></a>00770 <a class="code" href="lapi_8c.html#2a6cbad7f1c567378d17ded68b47f8f3">lua_pcall</a>(L, narg, nres, 0); <a name="l00771"></a>00771 } <a name="l00772"></a>00772 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"loadstring"</span>) { <a name="l00773"></a>00773 size_t sl; <a name="l00774"></a>00774 <span class="keyword">const</span> <span class="keywordtype">char</span> *s = luaL_checklstring(L, getnum, &sl); <a name="l00775"></a>00775 luaL_loadbuffer(L, s, sl, s); <a name="l00776"></a>00776 } <a name="l00777"></a>00777 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"loadfile"</span>) { <a name="l00778"></a>00778 luaL_loadfile(L, luaL_checkstring(L, getnum)); <a name="l00779"></a>00779 } <a name="l00780"></a>00780 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"setmetatable"</span>) { <a name="l00781"></a>00781 <a class="code" href="lapi_8c.html#15719ea4119bdf5b3f2a406534431a7e">lua_setmetatable</a>(L, getnum); <a name="l00782"></a>00782 } <a name="l00783"></a>00783 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"getmetatable"</span>) { <a name="l00784"></a>00784 <span class="keywordflow">if</span> (<a class="code" href="lapi_8c.html#4caa9ca5e47a30bd45e33d83bf2d6d6e">lua_getmetatable</a>(L, getnum) == 0) <a name="l00785"></a>00785 <a class="code" href="lapi_8c.html#1b4cd0d80f51e5545a97ca6c28c03c50">lua_pushnil</a>(L); <a name="l00786"></a>00786 } <a name="l00787"></a>00787 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"type"</span>) { <a name="l00788"></a>00788 <a class="code" href="lapi_8c.html#1281a7e2b52370cc416123bfd32b1b29">lua_pushstring</a>(L, <a class="code" href="lapi_8c.html#7d64f87addab440bbda96bb088816e17">lua_typename</a>(L, <a class="code" href="lapi_8c.html#652b273947f0656686f998d8e90cd3ea">lua_type</a>(L, getnum))); <a name="l00789"></a>00789 } <a name="l00790"></a>00790 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"getn"</span>) { <a name="l00791"></a>00791 <span class="keywordtype">int</span> i = getnum; <a name="l00792"></a>00792 lua_pushintegral(L, luaL_getn(L, i)); <a name="l00793"></a>00793 } <a name="l00794"></a>00794 <span class="keywordflow">else</span> <span class="keywordflow">if</span> EQ(<span class="stringliteral">"setn"</span>) { <a name="l00795"></a>00795 <span class="keywordtype">int</span> i = getnum; <a name="l00796"></a>00796 <span class="keywordtype">int</span> n = <a class="code" href="llimits_8h.html#f17d62ec9e237a7644de6b9b34a48a34">cast</a>(<span class="keywordtype">int</span>, <a class="code" href="lapi_8c.html#42c1f68101dc98a6ae4695c8577b17f8">lua_tonumber</a>(L, -1)); <a name="l00797"></a>00797 luaL_setn(L, i, n); <a name="l00798"></a>00798 lua_pop(L, 1); <a name="l00799"></a>00799 } <a name="l00800"></a>00800 <span class="keywordflow">else</span> luaL_error(L, <span class="stringliteral">"unknown instruction %s"</span>, buff); <a name="l00801"></a>00801 } <a name="l00802"></a>00802 <span class="keywordflow">return</span> 0; <a name="l00803"></a>00803 } <a name="l00804"></a>00804 <a name="l00805"></a>00805 <span class="comment">/* }====================================================== */</span> <a name="l00806"></a>00806 <a name="l00807"></a>00807 <a name="l00808"></a>00808 <span class="comment">/*</span> <a name="l00809"></a>00809 <span class="comment">** {======================================================</span> <a name="l00810"></a>00810 <span class="comment">** tests for yield inside hooks</span> <a name="l00811"></a>00811 <span class="comment">** =======================================================</span> <a name="l00812"></a>00812 <span class="comment">*/</span> <a name="l00813"></a>00813 <a name="l00814"></a>00814 <span class="keyword">static</span> <span class="keywordtype">void</span> yieldf (<a class="code" href="structlua__State.html">lua_State</a> *L, lua_Debug *<a class="code" href="apprentice_8c.html#c8d4c174ba04ae1893f41661ba9eedb7">ar</a>) <a name="l00815"></a>00815 <span class="comment">/*@*/</span> <a name="l00816"></a>00816 { <a name="l00817"></a>00817 <a class="code" href="ldo_8c.html#f341c25bf642f9244778e130c86d6260">lua_yield</a>(L, 0); <a name="l00818"></a>00818 } <a name="l00819"></a>00819 <a name="l00820"></a>00820 <span class="keyword">static</span> <span class="keywordtype">int</span> setyhook (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00821"></a>00821 <span class="comment">/*@*/</span> <a name="l00822"></a>00822 { <a name="l00823"></a>00823 <span class="keywordflow">if</span> (lua_isnoneornil(L, 1)) <a name="l00824"></a>00824 <a class="code" href="ldebug_8c.html#664ce25a0c30d2c1b1e89e7ea25be7f0">lua_sethook</a>(L, NULL, 0, 0); <span class="comment">/* turn off hooks */</span> <a name="l00825"></a>00825 <span class="keywordflow">else</span> { <a name="l00826"></a>00826 <span class="keyword">const</span> <span class="keywordtype">char</span> *smask = luaL_checkstring(L, 1); <a name="l00827"></a>00827 <span class="keywordtype">int</span> count = luaL_optint(L, 2, 0); <a name="l00828"></a>00828 <span class="keywordtype">int</span> mask = 0; <a name="l00829"></a>00829 <span class="keywordflow">if</span> (strchr(smask, <span class="charliteral">'l'</span>)) mask |= LUA_MASKLINE; <a name="l00830"></a>00830 <span class="keywordflow">if</span> (count > 0) mask |= LUA_MASKCOUNT; <a name="l00831"></a>00831 <a class="code" href="ldebug_8c.html#664ce25a0c30d2c1b1e89e7ea25be7f0">lua_sethook</a>(L, yieldf, mask, count); <a name="l00832"></a>00832 } <a name="l00833"></a>00833 <span class="keywordflow">return</span> 0; <a name="l00834"></a>00834 } <a name="l00835"></a>00835 <a name="l00836"></a>00836 <a name="l00837"></a>00837 <span class="keyword">static</span> <span class="keywordtype">int</span> coresume (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00838"></a>00838 <span class="comment">/*@*/</span> <a name="l00839"></a>00839 { <a name="l00840"></a>00840 <span class="keywordtype">int</span> status; <a name="l00841"></a>00841 <a class="code" href="structlua__State.html">lua_State</a> *co = <a class="code" href="lapi_8c.html#d1dcea410edb5c5595fc070f8bf2e9a0">lua_tothread</a>(L, 1); <a name="l00842"></a>00842 luaL_argcheck(L, co, 1, <span class="stringliteral">"coroutine expected"</span>); <a name="l00843"></a>00843 status = <a class="code" href="ldo_8c.html#98c5a7666ee815cadd261cd1b8c09a13">lua_resume</a>(co, 0); <a name="l00844"></a>00844 <span class="keywordflow">if</span> (status != 0) { <a name="l00845"></a>00845 <a class="code" href="lapi_8c.html#56bbb7479265e38da2e2596e6ec25faa">lua_pushboolean</a>(L, 0); <a name="l00846"></a>00846 <a class="code" href="lapi_8c.html#ba6844115e26e0923488403436219e66">lua_insert</a>(L, -2); <a name="l00847"></a>00847 <span class="keywordflow">return</span> 2; <span class="comment">/* return false + error message */</span> <a name="l00848"></a>00848 } <a name="l00849"></a>00849 <span class="keywordflow">else</span> { <a name="l00850"></a>00850 <a class="code" href="lapi_8c.html#56bbb7479265e38da2e2596e6ec25faa">lua_pushboolean</a>(L, 1); <a name="l00851"></a>00851 <span class="keywordflow">return</span> 1; <a name="l00852"></a>00852 } <a name="l00853"></a>00853 } <a name="l00854"></a>00854 <a name="l00855"></a>00855 <span class="comment">/* }====================================================== */</span> <a name="l00856"></a>00856 <a name="l00857"></a>00857 <a name="l00858"></a>00858 <a name="l00859"></a>00859 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>luaL_reg tests_funcs[] = { <a name="l00860"></a>00860 {<span class="stringliteral">"hash"</span>, hash_query}, <a name="l00861"></a>00861 {<span class="stringliteral">"limits"</span>, get_limits}, <a name="l00862"></a>00862 {<span class="stringliteral">"listcode"</span>, listcode}, <a name="l00863"></a>00863 {<span class="stringliteral">"listk"</span>, listk}, <a name="l00864"></a>00864 {<span class="stringliteral">"listlocals"</span>, listlocals}, <a name="l00865"></a>00865 {<span class="stringliteral">"loadlib"</span>, loadlib}, <a name="l00866"></a>00866 {<span class="stringliteral">"stacklevel"</span>, stacklevel}, <a name="l00867"></a>00867 {<span class="stringliteral">"querystr"</span>, string_query}, <a name="l00868"></a>00868 {<span class="stringliteral">"querytab"</span>, table_query}, <a name="l00869"></a>00869 {<span class="stringliteral">"doit"</span>, test_do}, <a name="l00870"></a>00870 {<span class="stringliteral">"testC"</span>, testC}, <a name="l00871"></a>00871 {<span class="stringliteral">"ref"</span>, tref}, <a name="l00872"></a>00872 {<span class="stringliteral">"getref"</span>, getref}, <a name="l00873"></a>00873 {<span class="stringliteral">"unref"</span>, unref}, <a name="l00874"></a>00874 {<span class="stringliteral">"d2s"</span>, d2s}, <a name="l00875"></a>00875 {<span class="stringliteral">"s2d"</span>, s2d}, <a name="l00876"></a>00876 {<span class="stringliteral">"metatable"</span>, metatable}, <a name="l00877"></a>00877 {<span class="stringliteral">"upvalue"</span>, upvalue}, <a name="l00878"></a>00878 {<span class="stringliteral">"newuserdata"</span>, newuserdata}, <a name="l00879"></a>00879 {<span class="stringliteral">"pushuserdata"</span>, pushuserdata}, <a name="l00880"></a>00880 {<span class="stringliteral">"udataval"</span>, udataval}, <a name="l00881"></a>00881 {<span class="stringliteral">"doonnewstack"</span>, doonnewstack}, <a name="l00882"></a>00882 {<span class="stringliteral">"newstate"</span>, newstate}, <a name="l00883"></a>00883 {<span class="stringliteral">"closestate"</span>, closestate}, <a name="l00884"></a>00884 {<span class="stringliteral">"doremote"</span>, doremote}, <a name="l00885"></a>00885 {<span class="stringliteral">"log2"</span>, log2_aux}, <a name="l00886"></a>00886 {<span class="stringliteral">"int2fb"</span>, int2fb_aux}, <a name="l00887"></a>00887 {<span class="stringliteral">"totalmem"</span>, mem_query}, <a name="l00888"></a>00888 {<span class="stringliteral">"resume"</span>, coresume}, <a name="l00889"></a>00889 {<span class="stringliteral">"setyhook"</span>, setyhook}, <a name="l00890"></a>00890 {NULL, NULL} <a name="l00891"></a>00891 }; <a name="l00892"></a>00892 <a name="l00893"></a>00893 <a name="l00894"></a>00894 <span class="keyword">static</span> <span class="keywordtype">void</span> fim (<span class="keywordtype">void</span>) <a name="l00895"></a>00895 <span class="comment">/*@*/</span> <a name="l00896"></a>00896 { <a name="l00897"></a>00897 <span class="keywordflow">if</span> (!islocked) <a name="l00898"></a>00898 <a class="code" href="lstate_8c.html#5d903983f1497b2fc58fba9df09e354d">lua_close</a>(lua_state); <a name="l00899"></a>00899 <a class="code" href="llimits_8h.html#5978f5fda715bd80e845df1e16ad7780">lua_assert</a>(memdebug_numblocks == 0); <a name="l00900"></a>00900 <a class="code" href="llimits_8h.html#5978f5fda715bd80e845df1e16ad7780">lua_assert</a>(memdebug_total == 0); <a name="l00901"></a>00901 } <a name="l00902"></a>00902 <a name="l00903"></a>00903 <a name="l00904"></a>00904 <span class="keyword">static</span> <span class="keywordtype">int</span> l_panic (<a class="code" href="structlua__State.html">lua_State</a> *L) <a name="l00905"></a>00905 <span class="comment">/*@*/</span> <a name="l00906"></a>00906 { <a name="l00907"></a>00907 <a class="code" href="llimits_8h.html#86d500a34c624c2cae56bc25a31b12f3">UNUSED</a>(L); <a name="l00908"></a>00908 fprintf(stderr, <span class="stringliteral">"unable to recover; exiting\n"</span>); <a name="l00909"></a>00909 <span class="keywordflow">return</span> 0; <a name="l00910"></a>00910 } <a name="l00911"></a>00911 <a name="l00912"></a>00912 <a name="l00913"></a>00913 <span class="keywordtype">int</span> luaB_opentests (<a class="code" href="structlua__State.html">lua_State</a> *L) { <a name="l00914"></a>00914 <a class="code" href="lapi_8c.html#90bf785da77985164dbe2eb0d64bf82e">lua_atpanic</a>(L, l_panic); <a name="l00915"></a>00915 <a class="code" href="lstate_8h.html#bdbfc204d6c2509db9d616141b893018">lua_userstateopen</a>(L); <span class="comment">/* init lock */</span> <a name="l00916"></a>00916 lua_state = L; <span class="comment">/* keep first state to be opened */</span> <a name="l00917"></a>00917 luaL_openlib(L, <span class="stringliteral">"T"</span>, tests_funcs, 0); <a name="l00918"></a>00918 atexit(fim); <a name="l00919"></a>00919 <span class="keywordflow">return</span> 0; <a name="l00920"></a>00920 } <a name="l00921"></a>00921 <a name="l00922"></a>00922 <a name="l00923"></a>00923 <span class="preprocessor">#undef main</span> <a name="l00924"></a>00924 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="rpmqv_8c.html#ef6c40289a6a07b460e1e2fc9568e404">main</a> (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *<a class="code" href="compress_8c.html#b233d58a2d9af13ae09ea8fd82556856">argv</a>[]) { <a name="l00925"></a>00925 <span class="keywordtype">char</span> *limit = <a class="code" href="system_8h.html#bc6595dbf6880c71628fecf0dbb23d66">getenv</a>(<span class="stringliteral">"MEMLIMIT"</span>); <a name="l00926"></a>00926 <span class="keywordflow">if</span> (limit) <a name="l00927"></a>00927 memdebug_memlimit = <a class="code" href="file_8h.html#b39d013bf56ccc7f9b406a8e44baf054">strtoul</a>(limit, NULL, 10); <a name="l00928"></a>00928 l_main(argc, argv); <a name="l00929"></a>00929 <span class="keywordflow">return</span> 0; <a name="l00930"></a>00930 } <a name="l00931"></a>00931 <a name="l00932"></a>00932 <span class="preprocessor">#endif</span> </pre></div><hr size="1"><address style="align: right;"><small>Generated on 1 Oct 2013 for rpm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address> </body> </html>