private static void MakeSlotsSetTarget(MemberBindingInfo/*!*/ info, ReflectedSlotProperty/*!*/ rsp, Expression/*!*/ value) { // type has __slots__ defined for this member, call the setter directly ParameterExpression tmp = Ast.Variable(typeof(object), "res"); info.Body.AddVariable(tmp); info.Body.FinishCondition( Ast.Block( Ast.Assign( tmp, Ast.Convert( Ast.Assign( Ast.ArrayAccess( Ast.Call( Ast.Convert(info.Args[0].Expression, typeof(IObjectWithSlots)), typeof(IObjectWithSlots).GetMethod("GetSlots") ), Ast.Constant(rsp.Index) ), AstUtils.Convert(value, typeof(object)) ), tmp.Type ) ), tmp ) ); }
private static void MakeSlotsDeleteTarget(MemberBindingInfo/*!*/ info, ReflectedSlotProperty/*!*/ rsp) { MakeSlotsSetTarget(info, rsp, Ast.Field(null, typeof(Uninitialized).GetField("Instance"))); }