Пример #1
0
                private DynamicMetaObject DynamicTryGetMember(string name, Expression fallback, Func <Expression, Expression> resultOp)
                {
                    var tmp = Expression.Parameter(typeof(object));

                    return(new DynamicMetaObject(
                               Expression.Block(
                                   new[] { tmp },
                                   Expression.Condition(
                                       Expression.NotEqual(
                                           Expression.Assign(
                                               tmp,
                                               Expression.Invoke(
                                                   Expression.Constant(new Func <object, SymbolId, object>(AttributesAdapter.TryGetMember)),
                                                   Expression,
                                                   Expression.Constant(SymbolTable.StringToId(name))
                                                   )
                                               ),
                                           Expression.Constant(_getFailed)
                                           ),
                                       ExpressionUtils.Convert(resultOp(tmp), typeof(object)),
                                       ExpressionUtils.Convert(fallback, typeof(object))
                                       )
                                   ),
                               GetRestrictions()
                               ));
                }
Пример #2
0
        private DynamicMetaObject DynamicTryGetMember(string name, Expression fallback, Func <Expression, Expression> resultOp)
        {
            var tmp = Expression.Parameter(typeof(object));

            return(new DynamicMetaObject(
                       Expression.Block(
                           new[] { tmp },
                           Expression.Condition(
                               Expression.NotEqual(
                                   Expression.Assign(
                                       tmp,
                                       Expression.Invoke(
                                           Expression.Constant(_getMember),
                                           Expression,
                                           Expression.Constant(name)
                                           )
                                       ),
                                   Expression.Constant(StringDictionaryExpando._getFailed)
                                   ),
                               ExpressionUtils.Convert(resultOp(tmp), typeof(object)),
                               ExpressionUtils.Convert(fallback, typeof(object))
                               )
                           ),
                       GetRestrictions()
                       ));
        }
Пример #3
0
        public void DefaultConfigIsDetectChanges()
        {
            Expression <Func <LambadaTest, LambadaTest> > expression = (input) => new LambadaTest();
            var a = new { };

            ExpressionUtils.Convert(expression, a.GetType());
        }
Пример #4
0
            public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)
            {
                IScopeVariable variable = Value.GetScopeVariable(binder.Name, binder.IgnoreCase);

                var objExpression = ExpressionUtils.Convert(value.Expression, typeof(object));

                return(new DynamicMetaObject(
                           Expression.Block(
                               Expression.Call(
                                   Variable(variable),
                                   variable.GetType().GetMethod("SetValue"),
                                   objExpression
                                   ),
                               objExpression
                               ),
                           BindingRestrictions.GetInstanceRestriction(Expression, Value)
                           ));
            }
Пример #5
0
            private DynamicMetaObject DynamicTryGetValue(string name, bool ignoreCase, Expression fallback, Func <Expression, Expression> resultOp)
            {
                IScopeVariable variable = Value.GetScopeVariable(name, ignoreCase);
                var            tmp      = Expression.Parameter(typeof(object));

                return(new DynamicMetaObject(
                           Expression.Block(
                               new[] { tmp },
                               Expression.Condition(
                                   Expression.Call(
                                       Variable(variable),
                                       variable.GetType().GetMethod("TryGetValue"),
                                       tmp
                                       ),
                                   ExpressionUtils.Convert(resultOp(tmp), typeof(object)),
                                   ExpressionUtils.Convert(fallback, typeof(object))
                                   )
                               ),
                           BindingRestrictions.GetInstanceRestriction(Expression, Value)
                           ));
            }