Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
 }