@@ -34,10 +34,9 @@ public ExpressionRecorder(Expression expression, BindingRestrictions restriction
3434 : base ( expression , restrictions , value )
3535 { }
3636
37- private static DynamicMetaObject CreateRecorder ( Expression expression , Type returnType )
37+ private static DynamicMetaObject CreateRecorder ( Expression expression , Type returnType , BindingRestrictions restrictions )
3838 {
39- return new ExpressionRecorder ( Expression . Constant ( new ExpressionContainer ( expression ) , returnType ) ,
40- BindingRestrictions . GetExpressionRestriction ( Expression . Constant ( true ) ) ) ;
39+ return new ExpressionRecorder ( Expression . Constant ( new ExpressionContainer ( expression ) , returnType ) , restrictions ) ;
4140 }
4241
4342 private static Expression FromArg ( DynamicMetaObject arg )
@@ -85,7 +84,7 @@ private DynamicMetaObject DoBindGetMember(Type returnType, string memberName, bo
8584
8685 var memberExpr = Expression . Property ( ! wrapper . IsStatic ? valueExpr : null , property ) ;
8786
88- return CreateRecorder ( memberExpr , returnType ) ;
87+ return CreateRecorder ( memberExpr , returnType , BindingRestrictions . GetInstanceRestriction ( this . Expression , this . Value ) ) ;
8988 }
9089
9190 public override DynamicMetaObject BindSetMember ( SetMemberBinder binder , DynamicMetaObject value )
@@ -102,7 +101,7 @@ private DynamicMetaObject DoBindSetMember(ExpressionContainer wrapper, Type retu
102101
103102 var memberExpr = Expression . Assign ( Expression . Property ( ! wrapper . IsStatic ? valueExpr : null , property ) , FromArg ( value ) ) ;
104103
105- return CreateRecorder ( memberExpr , returnType ) ;
104+ return CreateRecorder ( memberExpr , returnType , BindingRestrictions . GetInstanceRestriction ( this . Expression , this . Value ) ) ;
106105 }
107106
108107 public override DynamicMetaObject BindGetIndex ( GetIndexBinder binder , DynamicMetaObject [ ] indexes )
@@ -115,7 +114,7 @@ public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMet
115114 ThrowMissingMemberException ( valueExpr . Type , "Item" ) ;
116115
117116 var memberExpr = Expression . MakeIndex ( ! wrapper . IsStatic ? valueExpr : null , property , indexes . Select ( FromArg ) ) ;
118- return CreateRecorder ( memberExpr , binder . ReturnType ) ;
117+ return CreateRecorder ( memberExpr , binder . ReturnType , BindingRestrictions . GetInstanceRestriction ( this . Expression , this . Value ) ) ;
119118 }
120119
121120 public override DynamicMetaObject BindSetIndex ( SetIndexBinder binder , DynamicMetaObject [ ] indexes , DynamicMetaObject value )
@@ -130,7 +129,7 @@ public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMet
130129 var memberExpr = Expression . Assign (
131130 Expression . MakeIndex ( ! wrapper . IsStatic ? valueExpr : null , property , indexes . Select ( FromArg ) ) ,
132131 FromArg ( value ) ) ;
133- return CreateRecorder ( memberExpr , binder . ReturnType ) ;
132+ return CreateRecorder ( memberExpr , binder . ReturnType , BindingRestrictions . GetInstanceRestriction ( this . Expression , this . Value ) ) ;
134133 }
135134
136135 public override DynamicMetaObject BindInvokeMember ( InvokeMemberBinder binder , DynamicMetaObject [ ] args )
@@ -188,7 +187,7 @@ public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, Dy
188187
189188 var memberExpr = Expression . Call ( ! wrapper . IsStatic ? valueExpr : null , method , args . Select ( FromArg ) . ToArray ( ) ) ;
190189
191- return CreateRecorder ( memberExpr , binder . ReturnType ) ;
190+ return CreateRecorder ( memberExpr , binder . ReturnType , BindingRestrictions . GetInstanceRestriction ( this . Expression , this . Value ) ) ;
192191 }
193192
194193 public override DynamicMetaObject BindBinaryOperation ( BinaryOperationBinder binder , DynamicMetaObject arg )
0 commit comments