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() )); }
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() )); }
public void DefaultConfigIsDetectChanges() { Expression <Func <LambadaTest, LambadaTest> > expression = (input) => new LambadaTest(); var a = new { }; ExpressionUtils.Convert(expression, a.GetType()); }
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) )); }
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) )); }