public override BoundNode VisitDynamicMemberAccess(BoundDynamicMemberAccess node) { if (_inExpressionLambda) { Error(ErrorCode.ERR_ExpressionTreeContainsDynamicOperation, node); } return(base.VisitDynamicMemberAccess(node)); }
public override BoundNode VisitDynamicMemberAccess(BoundDynamicMemberAccess node) { // InvokeMember operation: if (node.Invoked) { return(node); } // GetMember operation: Debug.Assert(node.TypeArgumentsOpt.IsDefault); var loweredReceiver = VisitExpression(node.Receiver); return(dynamicFactory.MakeDynamicGetMember(loweredReceiver, node.Name, node.Indexed).ToExpression()); }
private BoundDynamicMemberAccess TransformDynamicMemberAccess(BoundDynamicMemberAccess memberAccess, ArrayBuilder <BoundExpression> stores, ArrayBuilder <LocalSymbol> temps) { if (!CanChangeValueBetweenReads(memberAccess.Receiver)) { return(memberAccess); } // store receiver to temp: var rewrittenReceiver = VisitExpression(memberAccess.Receiver); BoundAssignmentOperator assignmentToTemp; var receiverTemp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp); stores.Add(assignmentToTemp); temps.Add(receiverTemp.LocalSymbol); return(new BoundDynamicMemberAccess(memberAccess.Syntax, receiverTemp, memberAccess.TypeArgumentsOpt, memberAccess.Name, memberAccess.Invoked, memberAccess.Indexed, memberAccess.Type)); }