Sophie

Sophie

distrib > CentOS > 5 > x86_64 > by-pkgid > 67e32647b06c0323bf90c6b54a6438d1 > files > 403

rpm-apidocs-4.4.2.3-34.el5.x86_64.rpm

<!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&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;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 &lt;ctype.h&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;limits.h&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;string.h&gt;</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-&gt;ci-&gt;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&lt;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 &gt; 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 &gt; oldsize &amp;&amp; memdebug_total+size-oldsize &gt; 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 &lt; size) ? oldsize : size;
<a name="l00131"></a>00131     <span class="keywordflow">if</span> (realsize &lt; 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 &gt; 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&lt;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-&gt;<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&lt;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) &amp;&amp; !<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))-&gt;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-&gt;<a class="code" href="structProto.html#9c9ed4e9d996233f75cdf56b912e4803">maxstacksize</a>);
<a name="l00209"></a>00209   setnameval(L, <span class="stringliteral">"numparams"</span>, p-&gt;<a class="code" href="structProto.html#3f106f177af6c68ffd8b042713266b98">numparams</a>);
<a name="l00210"></a>00210   <span class="keywordflow">for</span> (pc=0; pc&lt;p-&gt;<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) &amp;&amp; !<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))-&gt;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&lt;p-&gt;<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-&gt;<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) &amp;&amp; !<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))-&gt;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))-&gt;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-&gt;<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-&gt;<a class="code" href="structlua__State.html#195f448e76fd404953fa1962d28212a3">top</a> - L-&gt;<a class="code" href="structlua__State.html#27e1d5122ef7fffae7542814c72fdd2f">stack</a>));
<a name="l00311"></a>00311   lua_pushintegral(L, (<span class="keywordtype">int</span>)(L-&gt;<a class="code" href="structlua__State.html#797a585a2bdb638bd1ca78c15bbe46fb">stack_last</a> - L-&gt;<a class="code" href="structlua__State.html#27e1d5122ef7fffae7542814c72fdd2f">stack</a>));
<a name="l00312"></a>00312   lua_pushintegral(L, (<span class="keywordtype">int</span>)(L-&gt;<a class="code" href="structlua__State.html#7fbb5727050853f411ad64b4be9ab5c8">ci</a> - L-&gt;<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-&gt;<a class="code" href="structlua__State.html#683688539b11d067259dba8da8e1469a">end_ci</a> - L-&gt;<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>)&amp;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-&gt;<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-&gt;<a class="code" href="structTable.html#bab599417e4012c09675c2aff716b116">firstfree</a> - t-&gt;<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 &lt; t-&gt;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, &amp;t-&gt;<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-&gt;<a class="code" href="structTable.html#2c648e99fcf88c4660c97e7d9408b50f">sizearray</a>) &lt; <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">"&lt;undef&gt;"</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-&gt;<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-&gt;<a class="code" href="structTable.html#519f179c707cb4e93bb66d09151c89e5">node</a>[i].<a class="code" href="structNode.html#f67b110ca1a258b793bf69d306929b22">next</a> - t-&gt;<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 = &amp;<a class="code" href="lstate_8h.html#103db2de6edf3420c6c6c9a282562406">G</a>(L)-&gt;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-&gt;<a class="code" href="structstringtable.html#e5c0aebea09828e0e250a34ebea683a3">nuse</a>);
<a name="l00361"></a>00361     lua_pushintegral(L ,tb-&gt;<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 &lt; tb-&gt;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-&gt;<a class="code" href="structstringtable.html#132ba77978bbf9852ad840e11975e347">hash</a>[s]; ts; ts = ts-&gt;<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-&gt;<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, &amp;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> *, &amp;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, &amp;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> &amp;&amp; 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> &amp;&amp; !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, &amp;pc))</span>
<a name="l00649"></a>00649 <span class="preprocessor"></span><span class="preprocessor">#define getname (getname_aux(buff, &amp;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, &amp;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 &gt; 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&nbsp;
<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>