private static int Print(IntPtr L) { int result; try { int num = LuaDLL.lua_gettop(L); StringBuilder stringBuilder = StringBuilderCache.Acquire(256); stringBuilder.Append(LuaStatic.LuaWhere(L)); for (int i = 1; i <= num; i++) { if (i > 1) { stringBuilder.Append(" "); } if (LuaDLL.lua_isstring(L, i) == 1) { stringBuilder.Append(LuaDLL.lua_tostring(L, i)); } else if (LuaDLL.lua_isnil(L, i)) { stringBuilder.Append("nil"); } else if (LuaDLL.lua_isboolean(L, i)) { stringBuilder.Append((!LuaDLL.lua_toboolean(L, i)) ? "false" : "true"); } else { IntPtr intPtr = LuaDLL.lua_topointer(L, i); if (intPtr == IntPtr.Zero) { stringBuilder.Append("nil"); } else { stringBuilder.AppendFormat("{0}:0x{1}", LuaDLL.luaL_typename(L, i), intPtr.ToString("X")); } } } Debugger.Log(stringBuilder.ToString()); result = 0; } catch (Exception e) { result = LuaDLL.toluaL_exception(L, e, null); } return(result); }
static int Print(IntPtr L) { try { int n = LuaDLL.lua_gettop(L); string s = LuaWhere(L); for (int i = 1; i <= n; i++) { if (i > 1) { s += " "; } if (LuaDLL.lua_isstring(L, i) == 1) { s += LuaDLL.lua_tostring(L, i); } else if (LuaDLL.lua_isnil(L, i)) { s += "nil"; } else if (LuaDLL.lua_isboolean(L, i)) { s += LuaDLL.lua_toboolean(L, i) ? "true" : "false"; } else { IntPtr p = LuaDLL.lua_topointer(L, i); if (p == IntPtr.Zero) { s += "nil"; } else { s += string.Format("{0}:0x{1}", LuaDLL.luaL_typename(L, i), p.ToString("X")); } } } Debugger.Log(s); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public static string CheckString(IntPtr L, int stackPos) { if (LuaDLL.lua_isstring(L, stackPos) == 1) { return(LuaDLL.lua_tostring(L, stackPos)); } if (LuaDLL.lua_isuserdata(L, stackPos) == 1) { return((string)ToLua.CheckObject(L, stackPos, typeof(string))); } if (LuaDLL.lua_isnil(L, stackPos)) { return(null); } LuaDLL.luaL_typerror(L, stackPos, "string", null); return(null); }
public static char[] CheckCharBuffer(IntPtr L, int stackPos) { if (LuaDLL.lua_isstring(L, stackPos) != 0) { string text = LuaDLL.lua_tostring(L, stackPos); return(text.ToCharArray()); } if (LuaDLL.lua_isuserdata(L, stackPos) != 0) { return((char[])ToLua.CheckObject(L, stackPos, typeof(char[]))); } if (LuaDLL.lua_isnil(L, stackPos)) { return(null); } LuaDLL.luaL_typerror(L, stackPos, "string or char[]", null); return(null); }
public static byte[] CheckByteBuffer(IntPtr L, int stackPos) { if (LuaDLL.lua_isstring(L, stackPos) != 0) { int num; IntPtr intPtr = LuaDLL.lua_tolstring(L, stackPos, out num); byte[] array = new byte[num]; Marshal.Copy(intPtr, array, 0, num); return(array); } if (LuaDLL.lua_isuserdata(L, stackPos) != 0) { return((byte[])ToLua.CheckObject(L, stackPos, typeof(byte[]))); } if (LuaDLL.lua_isnil(L, stackPos)) { return(null); } LuaDLL.luaL_typerror(L, stackPos, "string or byte[]", null); return(null); }
private object getAsColor(IntPtr luaState, int stackPos) { try { if (LuaDLL.lua_isnumber(luaState, stackPos)) { Color retVal = Color.FromArgb((int)(long)LuaDLL.lua_tonumber(luaState, stackPos)); return(retVal); } else if (LuaDLL.lua_isstring(luaState, stackPos)) { Color retVal = Color.FromName(LuaDLL.lua_tostring(luaState, stackPos)); return(retVal); } return(null); } catch (Exception) { return(null); } }
public static byte[] CheckByteBuffer(IntPtr L, int stackPos) { if (LuaDLL.lua_isstring(L, stackPos) != 0) { int len; IntPtr source = LuaDLL.lua_tolstring(L, stackPos, out len); byte[] buffer = new byte[len]; Marshal.Copy(source, buffer, 0, len); return(buffer); } else if (LuaDLL.lua_isuserdata(L, stackPos) != 0) { return((byte[])CheckObject(L, stackPos, typeof(byte[]))); } else if (LuaDLL.lua_isnil(L, stackPos)) { return(null); } LuaDLL.luaL_typerror(L, stackPos, "string or byte[]"); return(null); }
public static int errorFunc_traceback(IntPtr L) { if (!LuaDLL.lua_isstring(L, 1)) /* 'message' not a string? */ { return(1); /* keep it intact */ } LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "debug"); if (LuaDLL.lua_istable(L, -1)) { LuaDLL.lua_pop(L, 1); return(1); } LuaDLL.lua_getfield(L, -1, "traceback"); if (LuaDLL.lua_isfunction(L, -1)) { LuaDLL.lua_pop(L, 2); return(1); } LuaDLL.lua_pushvalue(L, 1); /* pass error message */ LuaDLL.lua_pushinteger(L, 2); /* skip this function and traceback */ LuaDLL.lua_call(L, 2, 1); /* call debug.traceback */ return(1); }
internal ExtractValue checkType(IntPtr luaState, int stackPos, Type paramType) { LuaTypes luatype = LuaDLL.lua_type(luaState, stackPos); if (paramType.IsByRef) { paramType = paramType.GetElementType(); } Type underlyingType = Nullable.GetUnderlyingType(paramType); if (underlyingType != null) { paramType = underlyingType; // Silently convert nullable types to their non null requics } long runtimeHandleValue = paramType.TypeHandle.Value.ToInt64(); if (paramType.Equals(typeof(object))) { return(extractValues[runtimeHandleValue]); } //CP: Added support for generic parameters if (paramType.IsGenericParameter) { if (luatype == LuaTypes.LUA_TBOOLEAN) { return(extractValues[typeof(bool).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TSTRING) { return(extractValues[typeof(string).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TTABLE) { return(extractValues[typeof(LuaTable).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TUSERDATA) { return(extractValues[typeof(object).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TFUNCTION) { return(extractValues[typeof(LuaFunction).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TNUMBER) { return(extractValues[typeof(double).TypeHandle.Value.ToInt64()]); } //else // suppress CS0642 ; //an unsupported type was encountered } if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractValues[runtimeHandleValue]); } if (paramType == typeof(bool)) { if (LuaDLL.lua_isboolean(luaState, stackPos)) { return(extractValues[runtimeHandleValue]); } } else if (paramType == typeof(string)) { if (LuaDLL.lua_isstring(luaState, stackPos)) { return(extractValues[runtimeHandleValue]); } else if (luatype == LuaTypes.LUA_TNIL) { return(extractNetObject); // kevinh - silently convert nil to a null string pointer } } else if (paramType == typeof(LuaTable)) { if (luatype == LuaTypes.LUA_TTABLE) { return(extractValues[runtimeHandleValue]); } } else if (paramType == typeof(LuaUserData)) { if (luatype == LuaTypes.LUA_TUSERDATA) { return(extractValues[runtimeHandleValue]); } } else if (paramType == typeof(LuaFunction)) { if (luatype == LuaTypes.LUA_TFUNCTION) { return(extractValues[runtimeHandleValue]); } } else if (typeof(Delegate).IsAssignableFrom(paramType) && luatype == LuaTypes.LUA_TFUNCTION) { return(new ExtractValue(new DelegateGenerator(translator, paramType).extractGenerated)); } else if (paramType.IsInterface && luatype == LuaTypes.LUA_TTABLE) { return(new ExtractValue(new ClassGenerator(translator, paramType).extractGenerated)); } else if ((paramType.IsInterface || paramType.IsClass) && luatype == LuaTypes.LUA_TNIL) { // kevinh - allow nil to be silently converted to null - extractNetObject will return null when the item ain't found return(extractNetObject); } else if (LuaDLL.lua_type(luaState, stackPos) == LuaTypes.LUA_TTABLE) { if (LuaDLL.luaL_getmetafield(luaState, stackPos, "__index")) { object obj = translator.getNetObject(luaState, -1); LuaDLL.lua_settop(luaState, -2); if (obj != null && paramType.IsAssignableFrom(obj.GetType())) { return(extractNetObject); } } else { return(null); } } else { object obj = translator.getNetObject(luaState, stackPos); if (obj != null && paramType.IsAssignableFrom(obj.GetType())) { return(extractNetObject); } } return(null); }
internal ExtractValue checkType(IntPtr luaState, int stackPos, Type paramType) { LuaTypes luatype = LuaDLL.lua_type(luaState, stackPos); if (paramType.IsByRef) { paramType = paramType.GetElementType(); } Type underlyingType = Nullable.GetUnderlyingType(paramType); if (underlyingType != null) { paramType = underlyingType; // Silently convert nullable types to their non null requics } long runtimeHandleValue = paramType.TypeHandle.Value.ToInt64(); if (paramType.Equals(typeof(object))) { return(extractValues[runtimeHandleValue]); } //CP: Added support for generic parameters if (paramType.IsGenericParameter) { if (luatype == LuaTypes.LUA_TBOOLEAN) { return(extractValues[typeof(bool).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TSTRING) { return(extractValues[typeof(string).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TTABLE) { return(extractValues[typeof(LuaTable).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TUSERDATA) { return(extractValues[typeof(object).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TFUNCTION) { return(extractValues[typeof(LuaFunction).TypeHandle.Value.ToInt64()]); } else if (luatype == LuaTypes.LUA_TNUMBER) { return(extractValues[typeof(double).TypeHandle.Value.ToInt64()]); } //else // suppress CS0642 ; //an unsupported type was encountered } if (paramType.IsValueType && luatype == LuaTypes.LUA_TTABLE) { int oldTop = LuaDLL.lua_gettop(luaState); ExtractValue ret = null; LuaDLL.lua_pushvalue(luaState, stackPos); LuaDLL.lua_pushstring(luaState, "class"); LuaDLL.lua_gettable(luaState, -2); if (!LuaDLL.lua_isnil(luaState, -1)) { string cls = LuaDLL.lua_tostring(luaState, -1); if (cls == "Vector3" && paramType == typeof(Vector3)) { ret = extractValues[typeof(Vector3).TypeHandle.Value.ToInt64()]; } else if (cls == "Vector2" && paramType == typeof(Vector2)) { ret = extractValues[typeof(Vector2).TypeHandle.Value.ToInt64()]; } else if (cls == "Quaternion" && paramType == typeof(Quaternion)) { ret = extractValues[typeof(Quaternion).TypeHandle.Value.ToInt64()]; } else if (cls == "Color" && paramType == typeof(Color)) { ret = extractValues[typeof(Color).TypeHandle.Value.ToInt64()]; } else if (cls == "Vector4" && paramType == typeof(Vector4)) { ret = extractValues[typeof(Vector4).TypeHandle.Value.ToInt64()]; } else if (cls == "Ray" && paramType == typeof(Ray)) { ret = extractValues[typeof(Ray).TypeHandle.Value.ToInt64()]; } else { ret = null; } } LuaDLL.lua_settop(luaState, oldTop); if (ret != null) { return(ret); } } if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractValues[runtimeHandleValue]); } if (paramType == typeof(bool)) { if (LuaDLL.lua_isboolean(luaState, stackPos)) { return(extractValues[runtimeHandleValue]); } } else if (paramType == typeof(string)) { if (LuaDLL.lua_isstring(luaState, stackPos)) { return(extractValues[runtimeHandleValue]); } else if (luatype == LuaTypes.LUA_TNIL) { return(extractNetObject); // kevinh - silently convert nil to a null string pointer } } else if (paramType == typeof(LuaTable)) { if (luatype == LuaTypes.LUA_TTABLE) { return(extractValues[runtimeHandleValue]); } } else if (paramType == typeof(LuaFunction)) { if (luatype == LuaTypes.LUA_TFUNCTION) { return(extractValues[runtimeHandleValue]); } } else if (typeof(Delegate).IsAssignableFrom(paramType) && luatype == LuaTypes.LUA_TFUNCTION) { #if __NOGEN__ translator.throwError(luaState, "Delegates not implemnented"); #else return(new ExtractValue(new DelegateGenerator(translator, paramType).extractGenerated)); #endif } else if (paramType.IsInterface && luatype == LuaTypes.LUA_TTABLE) { #if __NOGEN__ translator.throwError(luaState, "Interfaces not implemnented"); #else return(new ExtractValue(new ClassGenerator(translator, paramType).extractGenerated)); #endif } else if ((paramType.IsInterface || paramType.IsClass) && luatype == LuaTypes.LUA_TNIL) { // kevinh - allow nil to be silently converted to null - extractNetObject will return null when the item ain't found return(extractNetObject); } else if (LuaDLL.lua_type(luaState, stackPos) == LuaTypes.LUA_TTABLE) { if (LuaTypes.LUA_TNIL != LuaDLL.luaL_getmetafield(luaState, stackPos, "__index")) { object obj = translator.getNetObject(luaState, -1); LuaDLL.lua_settop(luaState, -2); if (obj != null && paramType.IsAssignableFrom(obj.GetType())) { return(extractNetObject); } } } else { //object obj = translator.getNetObject(luaState, stackPos); //topameng 修改这里使支持注册到c#的lua类 object obj = translator.getRawNetObject(luaState, stackPos); if (obj != null && paramType.IsAssignableFrom(obj.GetType())) { return(extractNetObject); } } return(null); }
public bool LuaIsString(int index) { return(LuaDLL.lua_isstring(L, index) != 0); }
/// <summary> /// TODO:打印的简易版本,还需要lua的文件名位置等信息 /// </summary> /// <param name="L"></param> public static int Print(IntPtr L) { try { int n = LuaDLL.lua_gettop(L); // CString可以喝String互转 using (CString.Block()) { CString sb = CString.Alloc(256); #if UNITY_EDITOR int line = LuaDLL.tolua_where(L, 1); string filename = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_settop(L, n); int offset = filename[0] == '@' ? 1 : 0; if (!filename.Contains(".")) { sb.Append('[').Append(filename, offset, filename.Length - offset).Append(".lua:").Append(line).Append("]:"); } else { sb.Append('[').Append(filename, offset, filename.Length - offset).Append(':').Append(line).Append("]:"); } #endif for (int i = 1; i <= n; i++) { if (i > 1) { sb.Append(" "); } if (LuaDLL.lua_isstring(L, i) == 1) { sb.Append(LuaDLL.lua_tostring(L, i)); } else if (LuaDLL.lua_isnil(L, i)) { sb.Append("nil"); } else if (LuaDLL.lua_isboolean(L, i)) { sb.Append(LuaDLL.lua_toboolean(L, i) ? "true" : "false"); } else { IntPtr p = LuaDLL.lua_topointer(L, i); if (p == IntPtr.Zero) { sb.Append("nil"); } else { sb.Append(LuaDLL.luaL_typename(L, i)).Append(":0x").Append(p.ToString("X")); } } } Debugger.Log(sb.ToString()); //203行与_line一致 } return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
internal ExtractValue checkType(IntPtr luaState, int stackPos, Type paramType) { LuaTypes luaTypes = LuaDLL.lua_type(luaState, stackPos); if (paramType.IsByRef) { paramType = paramType.GetElementType(); } Type underlyingType = Nullable.GetUnderlyingType(paramType); if (underlyingType != null) { paramType = underlyingType; } long key = paramType.TypeHandle.Value.ToInt64(); if (paramType.Equals(typeof(object))) { return(this.extractValues[key]); } if (paramType.IsGenericParameter) { if (luaTypes == LuaTypes.LUA_TBOOLEAN) { return(this.extractValues[typeof(bool).TypeHandle.Value.ToInt64()]); } if (luaTypes == LuaTypes.LUA_TSTRING) { return(this.extractValues[typeof(string).TypeHandle.Value.ToInt64()]); } if (luaTypes == LuaTypes.LUA_TTABLE) { return(this.extractValues[typeof(LuaTable).TypeHandle.Value.ToInt64()]); } if (luaTypes == LuaTypes.LUA_TUSERDATA) { return(this.extractValues[typeof(object).TypeHandle.Value.ToInt64()]); } if (luaTypes == LuaTypes.LUA_TFUNCTION) { return(this.extractValues[typeof(LuaFunction).TypeHandle.Value.ToInt64()]); } if (luaTypes == LuaTypes.LUA_TNUMBER) { return(this.extractValues[typeof(double).TypeHandle.Value.ToInt64()]); } } if (paramType.IsValueType && luaTypes == LuaTypes.LUA_TTABLE) { int newTop = LuaDLL.lua_gettop(luaState); ExtractValue extractValue = null; LuaDLL.lua_pushvalue(luaState, stackPos); LuaDLL.lua_pushstring(luaState, "class"); LuaDLL.lua_gettable(luaState, -2); if (!LuaDLL.lua_isnil(luaState, -1)) { string a = LuaDLL.lua_tostring(luaState, -1); if (a == "Vector3" && paramType == typeof(Vector3)) { extractValue = this.extractValues[typeof(Vector3).TypeHandle.Value.ToInt64()]; } else if (a == "Vector2" && paramType == typeof(Vector2)) { extractValue = this.extractValues[typeof(Vector2).TypeHandle.Value.ToInt64()]; } else if (a == "Quaternion" && paramType == typeof(Quaternion)) { extractValue = this.extractValues[typeof(Quaternion).TypeHandle.Value.ToInt64()]; } else if (a == "Color" && paramType == typeof(Color)) { extractValue = this.extractValues[typeof(Color).TypeHandle.Value.ToInt64()]; } else if (a == "Vector4" && paramType == typeof(Vector4)) { extractValue = this.extractValues[typeof(Vector4).TypeHandle.Value.ToInt64()]; } else if (a == "Ray" && paramType == typeof(Ray)) { extractValue = this.extractValues[typeof(Ray).TypeHandle.Value.ToInt64()]; } else { extractValue = null; } } LuaDLL.lua_settop(luaState, newTop); if (extractValue != null) { return(extractValue); } } if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(this.extractValues[key]); } if (paramType == typeof(bool)) { if (LuaDLL.lua_isboolean(luaState, stackPos)) { return(this.extractValues[key]); } } else if (paramType == typeof(string)) { if (LuaDLL.lua_isstring(luaState, stackPos)) { return(this.extractValues[key]); } if (luaTypes == LuaTypes.LUA_TNIL) { return(this.extractNetObject); } } else if (paramType == typeof(LuaTable)) { if (luaTypes == LuaTypes.LUA_TTABLE) { return(this.extractValues[key]); } } else if (paramType == typeof(LuaFunction)) { if (luaTypes == LuaTypes.LUA_TFUNCTION) { return(this.extractValues[key]); } } else if (typeof(Delegate).IsAssignableFrom(paramType) && luaTypes == LuaTypes.LUA_TFUNCTION) { this.translator.throwError(luaState, "Delegates not implemnented"); } else if (paramType.IsInterface && luaTypes == LuaTypes.LUA_TTABLE) { this.translator.throwError(luaState, "Interfaces not implemnented"); } else { if ((paramType.IsInterface || paramType.IsClass) && luaTypes == LuaTypes.LUA_TNIL) { return(this.extractNetObject); } if (LuaDLL.lua_type(luaState, stackPos) == LuaTypes.LUA_TTABLE) { if (LuaDLL.luaL_getmetafield(luaState, stackPos, "__index") != LuaTypes.LUA_TNIL) { object netObject = this.translator.getNetObject(luaState, -1); LuaDLL.lua_settop(luaState, -2); if (netObject != null && paramType.IsAssignableFrom(netObject.GetType())) { return(this.extractNetObject); } } } else { object rawNetObject = this.translator.getRawNetObject(luaState, stackPos); if (rawNetObject != null && paramType.IsAssignableFrom(rawNetObject.GetType())) { return(this.extractNetObject); } } } return(null); }
internal ExtractValue checkType(IntPtr luaState, int stackPos, Type paramType) { LuaTypes luatype = LuaDLL.lua_type(luaState, stackPos); if (paramType.IsByRef) { paramType = paramType.GetElementType(); } Type underlyingType = Nullable.GetUnderlyingType(paramType); if (underlyingType != null) { paramType = underlyingType; // Silently convert nullable types to their non null requics } if (paramType.Equals(typeof(object))) { return(extractObject); } else if (paramType.Equals(typeof(sbyte))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractSbyte); } } else if (paramType.Equals(typeof(byte))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractByte); } } else if (paramType.Equals(typeof(short))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractShort); } } else if (paramType.Equals(typeof(ushort))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractUshort); } } else if (paramType.Equals(typeof(int))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractInt); } } else if (paramType.Equals(typeof(uint))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractUint); } } else if (paramType.Equals(typeof(long))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractLong); } } else if (paramType.Equals(typeof(ulong))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractUlong); } } else if (paramType.Equals(typeof(char))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractChar); } } else if (paramType.Equals(typeof(float))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractFloat); } } else if (paramType.Equals(typeof(decimal))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractDecimal); } } else if (paramType.Equals(typeof(double))) { if (LuaDLL.lua_isnumber(luaState, stackPos)) { return(extractDouble); } } else if (paramType.Equals(typeof(bool))) { if (LuaDLL.lua_isboolean(luaState, stackPos)) { return(extractBoolean); } } else if (paramType.Equals(typeof(string))) { if (LuaDLL.lua_isstring(luaState, stackPos)) { return(extractString); } else if (luatype == LuaTypes.LUA_TNIL) { return(extractNetObject); // kevinh - silently convert nil to a null string pointer } } else if (paramType.Equals(typeof(LuaTable))) { if (luatype == LuaTypes.LUA_TTABLE) { return(extractTable); } } else if (paramType.Equals(typeof(LuaUserData))) { if (luatype == LuaTypes.LUA_TUSERDATA) { return(extractUserdata); } } else if (paramType.Equals(typeof(LuaFunction))) { if (luatype == LuaTypes.LUA_TFUNCTION) { return(extractFunction); } } else if (typeof(Delegate).IsAssignableFrom(paramType) && luatype == LuaTypes.LUA_TFUNCTION) { return(new ExtractValue(new DelegateGenerator(translator, paramType).extractGenerated)); } else if (paramType.IsInterface && luatype == LuaTypes.LUA_TTABLE) { return(new ExtractValue(new ClassGenerator(translator, paramType).extractGenerated)); } else if ((paramType.IsInterface || paramType.IsClass) && luatype == LuaTypes.LUA_TNIL) { // kevinh - allow nil to be silently converted to null - extractNetObject will return null when the item ain't found return(extractNetObject); } else if (LuaDLL.lua_type(luaState, stackPos) == LuaTypes.LUA_TTABLE) { if (LuaDLL.luaL_getmetafield(luaState, stackPos, "__index")) { object obj = translator.getNetObject(luaState, -1); LuaDLL.lua_settop(luaState, -2); if (obj != null && paramType.IsAssignableFrom(obj.GetType())) { return(extractNetObject); } } else { return(null); } } else { object obj = translator.getNetObject(luaState, stackPos); if (obj != null && paramType.IsAssignableFrom(obj.GetType())) { return(extractNetObject); } } return(null); }
static int Print_Warning(IntPtr L) { try { int n = LuaDLL.lua_gettop(L); StringBuilder sb = StringBuilderCache.Acquire(); #if UNITY_EDITOR2 int line = LuaDLL.tolua_where(L, 1); string filename = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_settop(L, n); if (!filename.Contains(".")) { sb.AppendFormat("[{0}.lua:{1}]:", filename, line); } else { sb.AppendFormat("[{0}:{1}]:", filename, line); } #endif sb.Append("["); sb.Append(DateTime.Now.ToString("HH:mm:ss")); sb.Append("] "); for (int i = 1; i <= n; i++) { if (i > 1) { sb.Append(" "); } if (LuaDLL.lua_isstring(L, i) == 1) { sb.Append(LuaDLL.lua_tostring(L, i)); } else if (LuaDLL.lua_isnil(L, i)) { sb.Append("nil"); } else if (LuaDLL.lua_isboolean(L, i)) { sb.Append(LuaDLL.lua_toboolean(L, i) ? "true" : "false"); } else { IntPtr p = LuaDLL.lua_topointer(L, i); if (p == IntPtr.Zero) { sb.Append("nil"); } else { sb.AppendFormat("{0}:0x{1}", LuaDLL.luaL_typename(L, i), p.ToString("X")); } } } GameBase.Debugger.LogWarning_Fixed(StringBuilderCache.GetStringAndRelease(sb)); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }