// Token: 0x060015D7 RID: 5591 RVA: 0x0006816C File Offset: 0x0006636C private DynamicMetaObject BuildCallMethodWithResult(string methodName, DynamicMetaObjectBinder binder, Expression[] args, DynamicMetaObject fallbackResult, Class_475 <T> .Fallback fallbackInvoke) { ParameterExpression parameterExpression = Expression.Parameter(typeof(object), null); IList <Expression> list = new List <Expression>(); list.Add(Expression.Convert(base.Expression, typeof(T))); list.Add(Class_475 <T> .Constant(binder)); list.AddRange(args); list.Add(parameterExpression); DynamicMetaObject dynamicMetaObject = new DynamicMetaObject(parameterExpression, BindingRestrictions.Empty); if (binder.ReturnType != typeof(object)) { UnaryExpression expression = Expression.Convert(dynamicMetaObject.Expression, binder.ReturnType); dynamicMetaObject = new DynamicMetaObject(expression, dynamicMetaObject.Restrictions); } if (fallbackInvoke != null) { dynamicMetaObject = fallbackInvoke(dynamicMetaObject); } return(new DynamicMetaObject(Expression.Block(new ParameterExpression[] { parameterExpression }, new Expression[] { Expression.Condition(Expression.Call(Expression.Constant(this._proxy), typeof(Class_359 <T>).GetMethod(methodName), list), dynamicMetaObject.Expression, fallbackResult.Expression, binder.ReturnType) }), this.GetRestrictions().Merge(dynamicMetaObject.Restrictions).Merge(fallbackResult.Restrictions))); }
// Token: 0x060015D9 RID: 5593 RVA: 0x000683A8 File Offset: 0x000665A8 private DynamicMetaObject CallMethodNoResult(string methodName, DynamicMetaObjectBinder binder, Expression[] args, Class_475 <T> .Fallback fallback) { DynamicMetaObject dynamicMetaObject = fallback(null); IList <Expression> list = new List <Expression>(); list.Add(Expression.Convert(base.Expression, typeof(T))); list.Add(Class_475 <T> .Constant(binder)); list.AddRange(args); DynamicMetaObject dynamicMetaObject2 = new DynamicMetaObject(Expression.Condition(Expression.Call(Expression.Constant(this._proxy), typeof(Class_359 <T>).GetMethod(methodName), list), Expression.Empty(), dynamicMetaObject.Expression, typeof(void)), this.GetRestrictions().Merge(dynamicMetaObject.Restrictions)); if (!this._dontFallbackFirst) { return(fallback(dynamicMetaObject2)); } return(dynamicMetaObject2); }
// Token: 0x060015D8 RID: 5592 RVA: 0x000682A4 File Offset: 0x000664A4 private DynamicMetaObject CallMethodReturnLast(string methodName, DynamicMetaObjectBinder binder, Expression[] args, Class_475 <T> .Fallback fallback) { DynamicMetaObject dynamicMetaObject = fallback(null); ParameterExpression parameterExpression = Expression.Parameter(typeof(object), null); IList <Expression> list = new List <Expression>(); list.Add(Expression.Convert(base.Expression, typeof(T))); list.Add(Class_475 <T> .Constant(binder)); list.AddRange(args); list[args.Length + 1] = Expression.Assign(parameterExpression, list[args.Length + 1]); DynamicMetaObject dynamicMetaObject2 = new DynamicMetaObject(Expression.Block(new ParameterExpression[] { parameterExpression }, new Expression[] { Expression.Condition(Expression.Call(Expression.Constant(this._proxy), typeof(Class_359 <T>).GetMethod(methodName), list), parameterExpression, dynamicMetaObject.Expression, typeof(object)) }), this.GetRestrictions().Merge(dynamicMetaObject.Restrictions)); if (!this._dontFallbackFirst) { return(fallback(dynamicMetaObject2)); } return(dynamicMetaObject2); }