Example #1
0
        }         // func MemberGetExpression

        private static Expression MemberSetExpression(Lua runtime, Token tStart, Expression instance, string sMember, bool lMethodMember, Expression set)
        {
            // Assign the value to a member
            if (lMethodMember)
            {
                return(Expression.Call(
                           ConvertExpression(runtime, tStart, instance, typeof(LuaTable)),
                           Lua.TableDefineMethodLightMethodInfo,
                           Expression.Constant(sMember, typeof(string)),
                           ConvertExpression(runtime, tStart, set, typeof(Delegate))
                           ));
            }
            else
            {
                return(SafeExpression(() => LuaEmit.SetMember(runtime, instance, instance.Type, sMember, false, set, set.Type, true), tStart));
            }
        }         // func MemberSetExpression
Example #2
0
            } // ctor

            public override DynamicMetaObject FallbackSetMember(DynamicMetaObject target, DynamicMetaObject value, DynamicMetaObject errorSuggestion)
            {
                // defer the target
                if (!target.HasValue)
                {
                    return(Defer(target));
                }

                if (target.Value == null)
                {
                    return(errorSuggestion ??
                           new DynamicMetaObject(
                               ThrowExpression(String.Format(Properties.Resources.rsMemberNotResolved, target.LimitType.Name, Name), ReturnType),
                               target.Restrictions.Merge(BindingRestrictions.GetInstanceRestriction(target.Expression, null))
                               ));
                }
                else
                {
                    Expression expr;
                    try
                    {
                        expr = Lua.EnsureType(LuaEmit.SetMember(lua, target.Expression, target.LimitType, Name, IgnoreCase, value.Expression, value.LimitType, false), ReturnType);
                    }
                    catch (LuaEmitException e)
                    {
                        if (errorSuggestion != null)
                        {
                            return(errorSuggestion);
                        }
                        expr = ThrowExpression(e.Message, ReturnType);
                    }

                    return(new DynamicMetaObject(
                               expr,
                               target.Restrictions.Merge(BindingRestrictions.GetTypeRestriction(target.Expression, target.LimitType).Merge(Lua.GetSimpleRestriction(value)))
                               ));
                }
            } // func FallbackSetMember