Beispiel #1
0
        private static int _PcallErrorHandler(IntPtr L)
        {
            var lua = GetCLRReferenceUpvalue(L, 1) as LuaState;

            Exception inner = null;
            string    msg   = "An error occured while executing a Lua function";
            object    value = null;

            var obj = lua.ToCLR();

            if (obj is Exception)
            {
                inner = (Exception)obj;
            }
            else if (obj is String)
            {
                msg = (String)obj;
            }
            else
            {
                msg   = obj.ToString();
                value = obj;
            }

            lua.Pop();
            var trace = lua.TracebackArray();
            var ex    = new LuaException(msg, trace, value, inner);

            // the first line is always Environment.get_StackTrace
            ex.StackTraceOverride = string.Join("\n", Environment.StackTrace.Split('\n').Skip(1).ToArray());
            lua.Push(ex);

            return(1);
        }
Beispiel #2
0
        private void _LoadErrorMechanism()
        {
            string code;

            using (var s = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("ErrorMechanism.lua"), Encoding.UTF8)) {
                code = s.ReadToEnd();
            }
            LoadBuffer("MicroLua", code);
            if (VoidProtCall(0) != LuaResult.OK)
            {
                var ex = new LuaException(ToString());
                Pop();
                throw ex;
            }

            GetGlobal("microlua_make_call_wrapper");
            _MicroLuaMakeCallWrapperRef = MakeLuaReference();
            Pop();

            GetGlobal("debug");
            GetField("traceback");
            _DebugTracebackRef = MakeLuaReference();
            Pop(2);
        }