Mono.CSharp.LocalTemporary.EmitAssign C# (CSharp) Method

EmitAssign() public method

public EmitAssign ( EmitContext ec, Mono.CSharp.Expression source, bool leave_copy, bool isCompound ) : void
ec EmitContext
source Mono.CSharp.Expression
leave_copy bool
isCompound bool
return void
		public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound)
		{
			if (isCompound)
				throw new NotImplementedException ();

			source.Emit (ec);

			Store (ec);

			if (leave_copy)
				Emit (ec);
		}

Usage Example

Example #1
0
        protected void EmitConditionalAccess(EmitContext ec)
        {
            var a_expr = arguments [0].Expr;

            var des = a_expr as DynamicExpressionStatement;

            if (des != null)
            {
                des.EmitConditionalAccess(ec);
            }

            if (HasConditionalAccess())
            {
                var NullOperatorLabel = ec.DefineLabel();

                if (ExpressionAnalyzer.IsInexpensiveLoad(a_expr))
                {
                    a_expr.Emit(ec);
                }
                else
                {
                    var lt = new LocalTemporary(a_expr.Type);
                    lt.EmitAssign(ec, a_expr, true, false);

                    Arguments [0].Expr = lt;
                }

                ec.Emit(OpCodes.Brtrue_S, NullOperatorLabel);

                if (!ec.ConditionalAccess.Statement)
                {
                    if (ec.ConditionalAccess.Type.IsNullableType)
                    {
                        Nullable.LiftedNull.Create(ec.ConditionalAccess.Type, Location.Null).Emit(ec);
                    }
                    else
                    {
                        ec.EmitNull();
                    }
                }

                ec.Emit(OpCodes.Br, ec.ConditionalAccess.EndLabel);
                ec.MarkLabel(NullOperatorLabel);

                return;
            }

            if (a_expr.HasConditionalAccess())
            {
                var lt = new LocalTemporary(a_expr.Type);
                lt.EmitAssign(ec, a_expr, false, false);

                Arguments [0].Expr = lt;
            }
        }
All Usage Examples Of Mono.CSharp.LocalTemporary::EmitAssign