public override BoundNode VisitFieldInfo(BoundFieldInfo node) { var rewrittenField = ((FieldSymbol)node.Field.OriginalDefinition) .AsMember((NamedTypeSymbol)this.VisitType(node.Field.ContainingType)); return(node.Update(rewrittenField, node.GetFieldFromHandle, node.Type)); }
private void EmitFieldInfoExpression(BoundFieldInfo node) { _builder.EmitOpCode(ILOpCode.Ldtoken); EmitSymbolToken(node.Field, node.Syntax); MethodSymbol getField = node.GetFieldFromHandle; Debug.Assert((object)getField != null); if (getField.ParameterCount == 1) { _builder.EmitOpCode(ILOpCode.Call, stackAdjustment: 0); //argument off, return value on } else { Debug.Assert(getField.ParameterCount == 2); _builder.EmitOpCode(ILOpCode.Ldtoken); EmitSymbolToken(node.Field.ContainingType, node.Syntax); _builder.EmitOpCode(ILOpCode.Call, stackAdjustment: -1); //2 arguments off, return value on } EmitSymbolToken(getField, node.Syntax, null); if (node.Type != getField.ReturnType) { _builder.EmitOpCode(ILOpCode.Castclass); EmitSymbolToken(node.Type, node.Syntax); } }
public override BoundNode VisitFieldInfo(BoundFieldInfo node) { var rewrittenField = ((FieldSymbol)node.Field.OriginalDefinition) .AsMember((NamedTypeSymbol)this.VisitType(node.Field.ContainingType)); return node.Update(rewrittenField, node.GetFieldFromHandle, node.Type); }