public override BoundNode VisitFieldAccess(BoundFieldAccess node) { BoundSpillSequenceBuilder builder = null; var receiver = VisitExpression(ref builder, node.ReceiverOpt); return(UpdateExpression(builder, node.Update(receiver, node.FieldSymbol, node.ConstantValueOpt, node.ResultKind, node.Type))); }
private BoundExpression MakeFieldAccess( SyntaxNode syntax, BoundExpression rewrittenReceiver, FieldSymbol fieldSymbol, ConstantValue constantValueOpt, LookupResultKind resultKind, TypeSymbol type, BoundFieldAccess oldNodeOpt = null) { if (fieldSymbol.IsTupleField) { return(MakeTupleFieldAccess(syntax, fieldSymbol, rewrittenReceiver, constantValueOpt, resultKind)); } BoundExpression result = oldNodeOpt != null? oldNodeOpt.Update(rewrittenReceiver, fieldSymbol, constantValueOpt, resultKind, type) : new BoundFieldAccess(syntax, rewrittenReceiver, fieldSymbol, constantValueOpt, resultKind, type); if (fieldSymbol.IsFixedSizeBuffer) { // a reference to a fixed buffer is translated into its address result = new BoundAddressOfOperator(syntax, result, type, false); } return(result); }
private BoundExpression MakeFieldAccess( CSharpSyntaxNode syntax, BoundExpression rewrittenReceiver, FieldSymbol fieldSymbol, ConstantValue constantValueOpt, LookupResultKind resultKind, TypeSymbol type, BoundFieldAccess oldNodeOpt = null) { if (fieldSymbol.IsTupleField) { return MakeTupleFieldAccess(syntax, fieldSymbol, rewrittenReceiver, constantValueOpt, resultKind); } BoundExpression result = oldNodeOpt != null ? oldNodeOpt.Update(rewrittenReceiver, fieldSymbol, constantValueOpt, resultKind, type) : new BoundFieldAccess(syntax, rewrittenReceiver, fieldSymbol, constantValueOpt, resultKind, type); if (fieldSymbol.IsFixed) { // a reference to a fixed buffer is translated into its address result = new BoundConversion(syntax, new BoundAddressOfOperator(syntax, result, syntax != null && SyntaxFacts.IsFixedStatementExpression(syntax), type, false), new Conversion(ConversionKind.PointerToPointer), false, false, default(ConstantValue), type, false); } return result; }
private BoundExpression MakeFieldAccess( CSharpSyntaxNode syntax, BoundExpression rewrittenReceiver, FieldSymbol fieldSymbol, ConstantValue constantValueOpt, LookupResultKind resultKind, TypeSymbol type, BoundFieldAccess oldNodeOpt = null) { if (fieldSymbol.IsTupleField) { return(MakeTupleFieldAccess(syntax, fieldSymbol, rewrittenReceiver, constantValueOpt, resultKind)); } BoundExpression result = oldNodeOpt != null? oldNodeOpt.Update(rewrittenReceiver, fieldSymbol, constantValueOpt, resultKind, type) : new BoundFieldAccess(syntax, rewrittenReceiver, fieldSymbol, constantValueOpt, resultKind, type); if (fieldSymbol.IsFixed) { // a reference to a fixed buffer is translated into its address result = new BoundConversion(syntax, new BoundAddressOfOperator(syntax, result, syntax != null && SyntaxFacts.IsFixedStatementExpression(syntax), type, false), Conversion.PointerToPointer, false, false, default(ConstantValue), type, false); } return(result); }
public override BoundNode VisitFieldAccess(BoundFieldAccess node) { BoundExpression receiverOpt = (BoundExpression)this.Visit(node.ReceiverOpt); TypeSymbol type = this.VisitType(node.Type); if (receiverOpt == null || receiverOpt.Kind != BoundKind.SpillSequence) { return(node.Update(receiverOpt, node.FieldSymbol, node.ConstantValueOpt, node.ResultKind, type)); } var spill = (BoundSpillSequence)receiverOpt; return(RewriteSpillSequence(spill, node.Update( spill.Value, node.FieldSymbol, node.ConstantValueOpt, node.ResultKind, type))); }
public override BoundNode VisitFieldAccess(BoundFieldAccess node) { BoundSpillSequence2 ss = null; var receiver = VisitExpression(ref ss, node.ReceiverOpt); return UpdateExpression(ss, node.Update(receiver, node.FieldSymbol, node.ConstantValueOpt, node.ResultKind, node.Type)); }
public override BoundNode VisitFieldAccess(BoundFieldAccess node) { BoundExpression receiverOpt = (BoundExpression)this.Visit(node.ReceiverOpt); TypeSymbol type = this.VisitType(node.Type); if (receiverOpt == null || receiverOpt.Kind != BoundKind.SpillSequence) { return node.Update(receiverOpt, node.FieldSymbol, node.ConstantValueOpt, node.ResultKind, type); } var spill = (BoundSpillSequence)receiverOpt; return RewriteSpillSequence(spill, node.Update( spill.Value, node.FieldSymbol, node.ConstantValueOpt, node.ResultKind, type)); }