Example #1
0
        public virtual LuaValue ObjectToLuaValue(object obj, IBindingContext bindingContext, LuaRuntime runtime)
        {
            var lua = runtime.AsLuaValue(obj);

            if (lua == null)
            {
                if (obj is Type)
                {
                    return(new LuaClrTypeObject((Type)obj, bindingContext.BindingSecurityPolicy));
                }
                else
                {
                    return(new LuaTransparentClrObject(obj, bindingContext.Binder, bindingContext.BindingSecurityPolicy));
                }
            }
            return(lua);
        }
Example #2
0
        private LuaValue Wrap(object value)
        {
            LuaValue lv;

            lock (_luaState)
            {
                try
                {
                    // Asks Eluant to perform the conversion.
                    lv = _luaState.AsLuaValue(value, false);
                }
                catch (Exception ex)
                {
                    lv = HandleException <LuaValue>(ex, default(LuaValue));
                }
            }

            return(lv);
        }
Example #3
0
 public virtual LuaValue ObjectToLuaValue(object obj, IBindingContext bindingContext, LuaRuntime runtime)
 {
     return(runtime.AsLuaValue(obj) ??
            new LuaTransparentClrObject(obj, bindingContext.Binder, bindingContext.BindingSecurityPolicy));
 }
Example #4
0
        internal static object TryRun(LuaRuntime runtime, long token, object target, object[] args, out bool returned)
        {
            _Logger.Debug($"Trying to run method hook (token {token})");
            returned = false;

            object return_value = null;

            LuaFunction fun;

            if (_Hooks.TryGetValue(token, out fun))
            {
                _Logger.Debug($"Hook found");
                // target == null --> static

                var objs_offs = 1;
                if (target == null)
                {
                    objs_offs = 0;
                }

                var objs = new LuaValue[args.Length + objs_offs];
                if (target != null)
                {
                    objs[0] = runtime.AsLuaValue(target);
                }
                for (int i = 0; i < args.Length; i++)
                {
                    objs[i + objs_offs] = runtime.AsLuaValue(args[i]);
                }

                var result = fun.Call(args: objs);

                Type return_type;
                if (_HookReturns.TryGetValue(token, out return_type))
                {
                    if (result.Count > 1)
                    {
                        for (int i = 1; i < result.Count; i++)
                        {
                            result[i].Dispose();
                        }
                    }

                    if (result.Count > 0)
                    {
                        returned     = true;
                        return_value = runtime.ToClrObject(result[0], return_type);

                        if (return_value != result[0])
                        {
                            result[0].Dispose();
                        }
                    }
                }
                else
                {
                    result.Dispose();
                }

                for (int i = 0; i < objs.Length; i++)
                {
                    objs[i]?.Dispose();
                }
            }
            else
            {
                _Logger.Debug($"Hook not found");
            }

            return(return_value);
        }
Example #5
0
 public virtual LuaValue ObjectToLuaValue(object obj, IBindingContext bindingContext, LuaRuntime runtime)
 {
     return runtime.AsLuaValue(obj) ??
         new LuaTransparentClrObject(obj, bindingContext.Binder, bindingContext.BindingSecurityPolicy);
 }