Commit b7ad3ad6 authored by Vinicius Jarina's avatar Vinicius Jarina
Browse files

Updated KopiLua hash

Moved luanet functions to KopiLua
parent 5fc72461
Subproject commit fa091a6e786c9665dc3d0f491770fa8576e1cf76
Subproject commit f86c4bf4f9afb2716f80c97c972d6dad24f1cebf
......@@ -33,9 +33,6 @@ namespace LuaInterface
public class LuaLib
{
// Not sure of the purpose of this, but I'm keeping it -kevinh
private static object tag = 0;
// steffenj: BEGIN additional Lua API functions new in Lua 5.1
public static int lua_gc (LuaCore.lua_State luaState, GCOptions what, int data)
{
......@@ -283,6 +280,11 @@ namespace LuaInterface
LuaCore.lua_call (luaState, nArgs, nResults);
}
public static void lua_pushstdcallcfunction (LuaCore.lua_State luaState, LuaCore.lua_CFunction function)
{
LuaCore.lua_pushstdcallcfunction (luaState, function);
}
public static int lua_pcall (LuaCore.lua_State luaState, int nArgs, int nResults, int errfunc)
{
return LuaCore.lua_pcall (luaState, nArgs, nResults, errfunc);
......@@ -336,10 +338,6 @@ namespace LuaInterface
LuaCore.lua_atpanic (luaState, (LuaCore.lua_CFunction)panicf);
}
public static void lua_pushstdcallcfunction (LuaCore.lua_State luaState, LuaCore.lua_CFunction function)
{
LuaCore.lua_pushcfunction (luaState, function);
}
public static void lua_pushnumber (LuaCore.lua_State luaState, double number)
{
......@@ -392,130 +390,55 @@ namespace LuaInterface
return LuaCore.luaL_loadfile (luaState, filename);
}
public static void lua_error (LuaCore.lua_State luaState)
{
LuaCore.lua_error (luaState);
}
public static bool lua_checkstack (LuaCore.lua_State luaState, int extra)
public static bool luaL_checkmetatable (LuaCore.lua_State luaState, int index)
{
return LuaCore.lua_checkstack (luaState, extra) != 0;
return LuaCore.luaL_checkmetatable (luaState, index);
}
public static int lua_next (LuaCore.lua_State luaState, int index)
public static int luanet_tonetobject (LuaCore.lua_State luaState, int index)
{
return LuaCore.lua_next (luaState, index);
return LuaCore.luanet_tonetobject (luaState, index);
}
public static void lua_pushlightuserdata (LuaCore.lua_State luaState, object udata)
public static void luanet_newudata (LuaCore.lua_State luaState, int val)
{
LuaCore.lua_pushlightuserdata (luaState, udata);
LuaCore.luanet_newudata (luaState, val);
}
public static int luanet_rawnetobj (LuaCore.lua_State luaState, int obj)
{
byte[] bytes = lua_touserdata (luaState, obj) as byte[];
return fourBytesToInt (bytes);
}
// Starting with 5.1 the auxlib version of checkudata throws an exception if the type isn't right
// Instead, we want to run our own version that checks the type and just returns null for failure
private static object checkudata_raw (LuaCore.lua_State L, int ud, string tname)
{
object p = LuaCore.lua_touserdata (L, ud);
if (p != null) {
/* value is a userdata? */
if (LuaCore.lua_getmetatable (L, ud) != 0) {
bool isEqual;
/* does it have a metatable? */
LuaCore.lua_getfield (L, (int)LuaIndexes.Registry, tname); /* get correct metatable */
isEqual = LuaCore.lua_rawequal (L, -1, -2) != 0;
// NASTY - we need our own version of the lua_pop macro
// lua_pop(L, 2); /* remove both metatables */
LuaCore.lua_settop (L, -(2) - 1);
if (isEqual) /* does it have the correct mt? */
return p;
}
}
return null;
return LuaCore.luanet_rawnetobj (luaState, obj);
}
public static int luanet_checkudata (LuaCore.lua_State luaState, int ud, string tname)
{
object udata = checkudata_raw (luaState, ud, tname);
return !udata.IsNull () ? fourBytesToInt (udata as byte[]) : -1;
return LuaCore.luanet_checkudata (luaState, ud, tname);
}
public static bool luaL_checkmetatable (LuaCore.lua_State luaState, int index)
public static void lua_error (LuaCore.lua_State luaState)
{
bool retVal = false;
if (lua_getmetatable (luaState, index) != 0) {
lua_pushlightuserdata (luaState, tag);
lua_rawget (luaState, -2);
retVal = !lua_isnil (luaState, -1);
lua_settop (luaState, -3);
}
return retVal;
LuaCore.lua_error (luaState);
}
public static object luanet_gettag ()
public static bool lua_checkstack (LuaCore.lua_State luaState, int extra)
{
return tag;
return LuaCore.lua_checkstack (luaState, extra) != 0;
}
public static void luanet_newudata (LuaCore.lua_State luaState, int val)
public static int lua_next (LuaCore.lua_State luaState, int index)
{
var userdata = lua_newuserdata (luaState, sizeof(int)) as byte[];
intToFourBytes (val, userdata);
return LuaCore.lua_next (luaState, index);
}
public static int luanet_tonetobject (LuaCore.lua_State luaState, int index)
public static void lua_pushlightuserdata (LuaCore.lua_State luaState, LuaCore.LuaTag udata)
{
byte[] udata;
if (lua_type (luaState, index) == LuaTypes.UserData) {
if (luaL_checkmetatable (luaState, index)) {
udata = lua_touserdata (luaState, index) as byte[];
if (!udata.IsNull ())
return fourBytesToInt (udata);
}
udata = checkudata_raw (luaState, index, "luaNet_class") as byte[];
if (!udata.IsNull ())
return fourBytesToInt (udata);
udata = checkudata_raw (luaState, index, "luaNet_searchbase") as byte[];
if (!udata.IsNull ())
return fourBytesToInt (udata);
udata = checkudata_raw (luaState, index, "luaNet_function") as byte[];
if (!udata.IsNull ())
return fourBytesToInt (udata);
}
return -1;
LuaCore.lua_pushlightuserdata (luaState, udata);
}
private static int fourBytesToInt (byte[] bytes)
public static LuaCore.LuaTag luanet_gettag ()
{
return bytes [0] + (bytes [1] << 8) + (bytes [2] << 16) + (bytes [3] << 24);
return LuaCore.luanet_gettag ();
}
private static void intToFourBytes (int val, byte[] bytes)
{
// gfoot: is this really a good idea?
bytes [0] = (byte)val;
bytes [1] = (byte)(val >> 8);
bytes [2] = (byte)(val >> 16);
bytes [3] = (byte)(val >> 24);
}
}
}
\ No newline at end of file
......@@ -21,8 +21,10 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>False</ConsolePause>
<MtouchLink>None</MtouchLink>
<MtouchLink>Full</MtouchLink>
<MtouchDebug>True</MtouchDebug>
<MtouchI18n />
<MtouchArch>ARMv7</MtouchArch>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>none</DebugType>
......@@ -31,7 +33,9 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>False</ConsolePause>
<MtouchLink>None</MtouchLink>
<MtouchLink>Full</MtouchLink>
<MtouchI18n />
<MtouchArch>ARMv7</MtouchArch>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
<DebugSymbols>True</DebugSymbols>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment