Exemple #1
0
        private void EmitMakeRefOperator(BoundMakeRefOperator expression, bool used)
        {
            // push address of variable
            // mkrefany [Type] -- takes address off stack, puts TypedReference on stack

            var temp = EmitAddress(expression.Operand, AddressKind.Writeable);
            Debug.Assert(temp == null, "makeref should not create temps");

            _builder.EmitOpCode(ILOpCode.Mkrefany);
            EmitSymbolToken(expression.Operand.Type, expression.Operand.Syntax);
            EmitPopIfUnused(used);
        }
Exemple #2
0
        public override BoundNode VisitMakeRefOperator(BoundMakeRefOperator node)
        {
            // The __makeref(x) operator is logically like calling a method 
            // static TypedReference MakeReference(ref T x)

            var rewrittenOperand = VisitExpression(node.Operand, ExprContext.Address);
            return node.Update(rewrittenOperand, node.Type);
        }
 public override BoundNode VisitMakeRefOperator(BoundMakeRefOperator node)
 {
     throw ExceptionUtilities.Unreachable;
 }
        public override BoundNode VisitMakeRefOperator(BoundMakeRefOperator node)
        {
            if (_inExpressionLambda)
            {
                Error(ErrorCode.ERR_FeatureNotValidInExpressionTree, node, "__makeref");
            }

            return base.VisitMakeRefOperator(node);
        }
Exemple #5
0
 internal void Parse(BoundMakeRefOperator boundMakeRefOperator)
 {
     base.Parse(boundMakeRefOperator);
     this.Operand = Deserialize(boundMakeRefOperator.Operand) as Expression;
 }
Exemple #6
0
        private void EmitMakeRefOperator(BoundMakeRefOperator expression, bool used)
        {
            // push address of variable
            // mkrefany [Type] -- takes address off stack, puts TypedReference on stack

            EmitAddress(expression.Operand, AddressKind.Writeable);
            builder.EmitOpCode(ILOpCode.Mkrefany);
            EmitSymbolToken(expression.Operand.Type, expression.Operand.Syntax);
            EmitPopIfUnused(used);
        }
Exemple #7
0
 public override object VisitMakeRefOperator(BoundMakeRefOperator node, object arg)
 {
     return Unimplemented(node, "ref");
 }
Exemple #8
0
 public override object VisitMakeRefOperator(BoundMakeRefOperator node, object arg)
 {
     return(Unimplemented(node, "ref"));
 }