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); }
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); }
internal void Parse(BoundMakeRefOperator boundMakeRefOperator) { base.Parse(boundMakeRefOperator); this.Operand = Deserialize(boundMakeRefOperator.Operand) as Expression; }
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); }
public override object VisitMakeRefOperator(BoundMakeRefOperator node, object arg) { return Unimplemented(node, "ref"); }
public override object VisitMakeRefOperator(BoundMakeRefOperator node, object arg) { return(Unimplemented(node, "ref")); }