Example #1
0
        private void EmitRefTypeOperator(BoundRefTypeOperator expression, bool used)
        {
            // push TypedReference
            // refanytype -- takes TypedReference off stack, puts token on stack
            // call GetTypeFromHandle -- takes token off stack, puts Type on stack

            EmitExpression(expression.Operand, true);
            _builder.EmitOpCode(ILOpCode.Refanytype);
            _builder.EmitOpCode(ILOpCode.Call, stackAdjustment: 0);
            var getTypeMethod = expression.GetTypeFromHandle;
            Debug.Assert((object)getTypeMethod != null);
            EmitSymbolToken(getTypeMethod, expression.Syntax, null);
            EmitPopIfUnused(used);
        }
        public override BoundNode VisitRefTypeOperator(BoundRefTypeOperator node)
        {
            if (_inExpressionLambda)
            {
                Error(ErrorCode.ERR_FeatureNotValidInExpressionTree, node, "__reftype");
            }

            return base.VisitRefTypeOperator(node);
        }
Example #3
0
 internal void Parse(BoundRefTypeOperator boundRefTypeOperator)
 {
     base.Parse(boundRefTypeOperator);
 }
Example #4
0
 internal void Parse(BoundRefTypeOperator boundRefTypeOperator)
 {
     base.Parse(boundRefTypeOperator);
     this.Operand = Deserialize(boundRefTypeOperator.Operand) as Expression;
     Debug.Assert(this.Operand != null);
 }
Example #5
0
 public override object VisitRefTypeOperator(BoundRefTypeOperator node, object arg)
 {
     return Unimplemented(node, "ref type");
 }
Example #6
0
 public override object VisitRefTypeOperator(BoundRefTypeOperator node, object arg)
 {
     return(Unimplemented(node, "ref type"));
 }