|
|
|
|
@@ -477,13 +477,11 @@ th, td
|
|
|
|
|
|
|
|
|
|
<p>I figured that it may be easiest to just go through the function seciton by section.</p>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<p><div class="codehilite"></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaL_newstate</span><span class="p">();</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
@@ -492,7 +490,7 @@ th, td
|
|
|
|
|
|
|
|
|
|
<br />
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="n">QInstance</span><span class="o">*</span><span class="w"> </span><span class="n">ins</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QInstance</span><span class="p">();</span>
|
|
|
|
|
@@ -507,7 +505,7 @@ th, td
|
|
|
|
|
|
|
|
|
|
<br />
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="n">luaL_openlibs</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
@@ -518,7 +516,7 @@ th, td
|
|
|
|
|
|
|
|
|
|
<p>Which is:</p>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">lua/linit.c</small></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">lua/linit.c</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">luaL_Reg</span><span class="w"> </span><span class="n">loadedlibs</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
|
|
|
|
|
@@ -541,14 +539,13 @@ th, td
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<p>You can notice that it does not include every library, thats because QScript values safety and stability. Some libraries allow for bad things to happen, like unrestricted file access.</p></div></div></div></div>
|
|
|
|
|
<p><p>You can notice that it does not include every library, thats because QScript values safety and stability. Some libraries allow for bad things to happen, like unrestricted file access.</p></div></div></p></div></div>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="n">luaL_newmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">);</span>
|
|
|
|
|
@@ -563,7 +560,7 @@ th, td
|
|
|
|
|
<p>Here the QSCRIPT_OBJECT metatable starts being defined and here is where things start to get a little wild.<br />
|
|
|
|
|
The Lua_QScript_Index function is responsible for getting a value or method from the QObject.</p>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Index</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
@@ -608,7 +605,6 @@ The Lua_QScript_Index function is responsible for getting a value or method from
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
@@ -651,19 +647,15 @@ It searches first through the values, and then the methods. If any one is found,
|
|
|
|
|
<p>You can notice that it can store multiple types, and there is not even a separate variable that says which one it is!<br />
|
|
|
|
|
The reason, is that we already have that variable... it's the metatable!</p>
|
|
|
|
|
|
|
|
|
|
<p>We already know if the userdata has a specific metatable, that the pointer stored in the userdata is what we want.</p></div></div></div></div>
|
|
|
|
|
<p><p>We already know if the userdata has a specific metatable, that the pointer stored in the userdata is what we want.</p></div></div></p></div></div>
|
|
|
|
|
|
|
|
|
|
<br />
|
|
|
|
|
|
|
|
|
|
In fact, here are all the Lua functions that get included.
|
|
|
|
|
|
|
|
|
|
<br />
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<br />
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"markdown="1"><div class="inlineframedinside" markdown="1"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_New_Index</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
@@ -701,6 +693,422 @@ In fact, here are all the Lua functions that get included.
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div></div></div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<p>This sets a value in the QObject. It checks if the value accessed actually exists in the object, and if so, sets the objects value to the given one.</p></div></div>
|
|
|
|
|
<br />
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Object</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"QSCRIPT_CLASS"</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QClass</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-></span><span class="n">cls</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QObject</span><span class="o">*</span><span class="w"> </span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QObject</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QObject</span><span class="p">)</span><span class="o">+</span><span class="n">cls</span><span class="o">-></span><span class="n">vars_count</span><span class="o">*</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QValue</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">obj</span><span class="o">-></span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cls</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">g_pQScript</span><span class="o">-></span><span class="n">InitializeObject</span><span class="p">((</span><span class="n">QScriptObject</span><span class="p">)</span><span class="n">obj</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">((</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">)))</span><span class="o">-></span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obj</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<p><code>object()</code> createa a new object from the passed class. It initializes it and returns it to Lua.</p></div></div>
|
|
|
|
|
<br />
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Class</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">parentluaclass</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QClass</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_gettop</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_gettop</span><span class="p">(</span><span class="n">L</span><span class="p">)</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">parentluaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS"</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
|
|
|
|
|
<span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">parentluaclass</span><span class="o">-></span><span class="n">cls</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaclass</span><span class="o">-></span><span class="n">creator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QClassCreator</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QClassCreator</span><span class="o">*</span><span class="w"> </span><span class="n">child</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-></span><span class="n">creator</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">child</span><span class="o">-></span><span class="n">parent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cls</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">child</span><span class="o">-></span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS_CREATOR"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<p><code>class()</code> creates a new class creator. It takes an optional class as the parent class and returns a new QClassCreator struct.</p></div></div>
|
|
|
|
|
<br />
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Class_Creator_NewIndex</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS_CREATOR"</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QClassCreator</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-></span><span class="n">creator</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QClassCreatorMethod</span><span class="o">*</span><span class="w"> </span><span class="n">meth</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QClassCreatorMethod</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">QClassCreatorMethod</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushvalue</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QCallback</span><span class="o">*</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QCallback</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_ref</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">LUA_REGISTRYINDEX</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_interface</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">L</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">meth</span><span class="o">-></span><span class="n">scripting_func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">callback</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">meth</span><span class="o">-></span><span class="n">is_scripting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">meth</span><span class="o">-></span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">char</span><span class="p">[</span><span class="n">strlen</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">];</span>
|
|
|
|
|
<span class="w"> </span><span class="n">strcpy</span><span class="p">(</span><span class="k">const_cast</span><span class="o"><</span><span class="kt">char</span><span class="o">*></span><span class="p">(</span><span class="n">meth</span><span class="o">-></span><span class="n">name</span><span class="p">),</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">meth</span><span class="o">-></span><span class="n">is_private</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">meth</span><span class="o">-></span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">meth</span><span class="o">-></span><span class="n">params_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">cls</span><span class="o">-></span><span class="n">methods</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">meth</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QVar</span><span class="o">*</span><span class="w"> </span><span class="n">var</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QVar</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">is_private</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">char</span><span class="p">[</span><span class="n">strlen</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">];</span>
|
|
|
|
|
<span class="w"> </span><span class="n">strcpy</span><span class="p">(</span><span class="k">const_cast</span><span class="o"><</span><span class="kt">char</span><span class="o">*></span><span class="p">(</span><span class="n">var</span><span class="o">-></span><span class="n">name</span><span class="p">),</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_String</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">str</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tolstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="o"><<</span><span class="n">Qlog2</span><span class="p">(</span><span class="n">strlen</span><span class="p">(</span><span class="n">str</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_modifiable_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="n">var</span><span class="o">-></span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">strcpy</span><span class="p">(</span><span class="n">var</span><span class="o">-></span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_modifiable_string</span><span class="p">,</span><span class="w"> </span><span class="n">str</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isinteger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Int</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tointeger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isnumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Float</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_float</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tonumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Bool</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">defaultval</span><span class="p">.</span><span class="n">value_bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">bool</span><span class="p">)</span><span class="n">lua_toboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">var</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_None</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">cls</span><span class="o">-></span><span class="n">vars</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">var</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<p>Creates a variable or function in the <code>QClassCreator</code> struct.</p></div></div>
|
|
|
|
|
<br />
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Finish</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">luaclass</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">luaclass</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS_CREATOR"</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QClassCreator</span><span class="o">*</span><span class="w"> </span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaclass</span><span class="o">-></span><span class="n">creator</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaclass</span><span class="o">-></span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QClass</span><span class="o">*</span><span class="p">)</span><span class="n">g_pQScript</span><span class="o">-></span><span class="n">FinishClass</span><span class="p">((</span><span class="n">QScriptClassCreator</span><span class="p">)</span><span class="n">cls</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
|
|
|
|
|
|
|
|
|
|
<p><br /></p>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Export</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_Debug</span><span class="w"> </span><span class="n">dbg</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_getstack</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">dbg</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, function can only be executed in global context</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QInstance</span><span class="o">*</span><span class="w"> </span><span class="n">ins</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QInstance</span><span class="o">*</span><span class="p">)</span><span class="n">lua_touserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="n">lua_upvalueindex</span><span class="p">(</span><span class="mi">1</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QFunction</span><span class="o">*</span><span class="w"> </span><span class="n">func</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">usr</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushglobaltable</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushnil</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">lua_next</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">-2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">exp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QExport</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">usr</span><span class="o">-></span><span class="n">obj</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QExport_Object</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ins</span><span class="o">-></span><span class="n">exports</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">exp</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="c1">// TODO : error here, must be a global variable</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS"</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushglobaltable</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushnil</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">lua_next</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">usr</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS"</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">exp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QExport</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">usr</span><span class="o">-></span><span class="n">cls</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QExport_Class</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ins</span><span class="o">-></span><span class="n">exports</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">exp</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="c1">// TODO : error here, must be a global variable</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushglobaltable</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushnil</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">lua_next</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">lua_rawequal</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QFunction</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="o">-></span><span class="n">always_zero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QFunction_Scripting</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QCallback</span><span class="o">*</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QCallback</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushvalue</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_ref</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">LUA_REGISTRYINDEX</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">L</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_interface</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="o">-></span><span class="n">func_scripting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">callback</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">exp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">QExport</span><span class="p">();</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">func</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QExport_Function</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">exp</span><span class="o">-></span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tostring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-2</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ins</span><span class="o">-></span><span class="n">exports</span><span class="p">.</span><span class="n">AddToTail</span><span class="p">(</span><span class="n">exp</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pop</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="c1">// TODO : error here, must be a global variable</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="c1">// TODO : error here, must be a QObject, QClass or QFunction</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
|
|
|
|
|
|
|
|
|
|
<p><br /></p>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Import</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_Debug</span><span class="w"> </span><span class="n">dbg</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_getstack</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">dbg</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, function can only be executed in global context</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QMod</span><span class="o">*</span><span class="w"> </span><span class="n">mod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QMod</span><span class="o">*</span><span class="p">)</span><span class="n">lua_touserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">lua_upvalueindex</span><span class="p">(</span><span class="mi">1</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">path</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">luaL_checkstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">)))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, string is required</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">IsValidPath</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, nuh uh</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">mod</span><span class="o">-></span><span class="n">instances</span><span class="p">.</span><span class="n">Defined</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">mod</span><span class="o">-></span><span class="n">instances</span><span class="p">[</span><span class="n">path</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">g_pQScript</span><span class="o">-></span><span class="n">LoadFile</span><span class="p">(</span><span class="n">path</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QInstance</span><span class="o">*</span><span class="w"> </span><span class="n">inst</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mod</span><span class="o">-></span><span class="n">instances</span><span class="p">[</span><span class="n">path</span><span class="p">];</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">inst</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// TODO : error here, most likely a import loop or bad path</span>
|
|
|
|
|
<span class="w"> </span><span class="n">CUtlVector</span><span class="o"><</span><span class="n">QExport</span><span class="o">*>*</span><span class="w"> </span><span class="n">exports</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&</span><span class="n">mod</span><span class="o">-></span><span class="n">instances</span><span class="p">[</span><span class="n">path</span><span class="p">]</span><span class="o">-></span><span class="n">exports</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_createtable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">exports</span><span class="o">-></span><span class="n">Count</span><span class="p">());</span>
|
|
|
|
|
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">exports</span><span class="o">-></span><span class="n">Count</span><span class="p">();</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QExport</span><span class="o">*</span><span class="w"> </span><span class="n">qexport</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">exports</span><span class="o">-></span><span class="n">Element</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">qexport</span><span class="o">-></span><span class="n">name</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">qexport</span><span class="o">-></span><span class="n">type</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QExport_Object</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ud</span><span class="o">-></span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">qexport</span><span class="o">-></span><span class="n">obj</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QExport_Class</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ud</span><span class="o">-></span><span class="n">cls</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">qexport</span><span class="o">-></span><span class="n">cls</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_CLASS"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QExport_Function</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">ud</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">qexport</span><span class="o">-></span><span class="n">func</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_FUNCTION"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_settable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">-3</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
|
|
|
|
|
|
|
|
|
|
<p><br /></p>
|
|
|
|
|
|
|
|
|
|
<div class="inlineframed"><div class="inlineframedinside"><p><small style="position:relative; top:8px; margin:0px;">luainterface/luainterface.cpp</small></p>
|
|
|
|
|
|
|
|
|
|
<div class="codehilite">
|
|
|
|
|
<pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="nf">Lua_QScript_Function_Call</span><span class="p">(</span><span class="n">lua_State</span><span class="o">*</span><span class="w"> </span><span class="n">L</span><span class="p">)</span>
|
|
|
|
|
<span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">usr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_checkudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"QSCRIPT_FUNCTION"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">usr</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QFunction</span><span class="o">*</span><span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">usr</span><span class="o">-></span><span class="n">func</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">func</span><span class="o">-></span><span class="n">always_zero</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QArgs</span><span class="o">*</span><span class="w"> </span><span class="n">args</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QReturn</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_remove</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_gettop</span><span class="p">(</span><span class="n">L</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">func</span><span class="o">-></span><span class="n">type</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Module</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">LuaActualCallback</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">func</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Native</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Warning</span><span class="p">(</span><span class="s">"Calling QFunction_Native is unsuppported in Lua yet (you can add it if you want at line %i in file luainterface.cpp)</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">__LINE__</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Scripting</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QArgs</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="n">count</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">QArg</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">QArgs</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">count</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">self</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="w"> </span><span class="n">nusr</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="nc">QValue</span><span class="w"> </span><span class="n">val</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isinteger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Int</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_int</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tointeger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isnumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Float</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_float</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">float</span><span class="p">)</span><span class="n">lua_tonumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Bool</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_toboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_String</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lua_tolstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lua_isfunction</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Function</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QCallback</span><span class="o">*</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QCallback</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QCallback</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushvalue</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">callback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_ref</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">LUA_REGISTRYINDEX</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">current_interface</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">callback</span><span class="o">-></span><span class="n">env</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">L</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QFunction</span><span class="o">*</span><span class="w"> </span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QFunction</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">QFunction</span><span class="p">));</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="o">-></span><span class="n">always_zero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="o">-></span><span class="n">func_scripting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">callback</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">func</span><span class="o">-></span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QFunction_Scripting</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_function</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QScriptFunction</span><span class="p">)</span><span class="n">func</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">nusr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">luaL_testudata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">))</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">QType_Object</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">val</span><span class="p">.</span><span class="n">value_object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QScriptObject</span><span class="p">)</span><span class="n">nusr</span><span class="o">-></span><span class="n">obj</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">args</span><span class="o">-></span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">val</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">val</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">continue</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="n">QReturn</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="n">IBaseScriptingInterface</span><span class="o">*</span><span class="p">)</span><span class="n">func</span><span class="o">-></span><span class="n">func_scripting</span><span class="o">-></span><span class="n">lang</span><span class="p">)</span><span class="o">-></span><span class="n">CallCallback</span><span class="p">(</span><span class="n">func</span><span class="o">-></span><span class="n">func_scripting</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="p">.</span><span class="n">type</span><span class="p">)</span>
|
|
|
|
|
<span class="w"> </span><span class="p">{</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Bool</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushboolean</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_bool</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Float</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushnumber</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_float</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_String</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushstring</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_string</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Int</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="n">lua_pushinteger</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_int</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QType_Object</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="p">((</span><span class="n">Lua_Userdata</span><span class="o">*</span><span class="p">)</span><span class="n">lua_newuserdata</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">Lua_Userdata</span><span class="p">)))</span><span class="o">-></span><span class="n">obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">QObject</span><span class="o">*</span><span class="p">)</span><span class="n">ret</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">value_object</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="n">luaL_setmetatable</span><span class="p">(</span><span class="n">L</span><span class="p">,</span><span class="w"> </span><span class="s">"QSCRIPT_OBJECT"</span><span class="p">);</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="k">default</span><span class="o">:</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">QFunction_Void</span><span class="p">:</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="w"> </span><span class="p">}</span>
|
|
|
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
|
|
|
|
|
|
<div class="framed"><div class="framedinside"><p>This page is a stub. You should expand it by making a pull request on our <a href="https://github.com/SourceBoxGame/wiki">GitHub repository</a></p></div></div></div></div>
|
|
|
|
|
|
|
|
|
|
</div>
|