EmitAddressOf() protected method

protected EmitAddressOf ( CodeGen g ) : void
g CodeGen
return void
Esempio n. 1
0
        void EmitGetHelper_Conversion(Operand op, Type desiredType, Conversion conv, Type from = null)
        {
            if (conv.RequiresAddress)
            {
                if (ReferenceEquals(op, null))
                {
                    throw new ArgumentException("Conversion from nullref to " + desiredType.Name + " is impossible; for nullables variable it's required to load address.");
                }

                op.EmitAddressOf(this);
            }
            else if (ReferenceEquals(op, null))
            {
                IL.Emit(OpCodes.Ldnull);
            }
            else
            {
                op.EmitGet(this);
            }
            if (from == null)
            {
                from = (object)op == null ? null : op.GetReturnType(TypeMapper);
            }
            conv.Emit(this, from, desiredType);
        }
Esempio n. 2
0
        public void EmitGetHelper(Operand op, Type desiredType, bool allowExplicitConversion)
        {
            if (desiredType.IsByRef)
            {
                if (op.Type != desiredType.GetElementType())
                {
                    throw new InvalidOperationException("Argument passed by reference must have exactly the same type as the formal argument");
                }

                op.EmitAddressOf(this);
                return;
            }

            if ((object)op == null)
            {
                if (desiredType.IsValueType)
                {
                    throw new ArgumentNullException("op");
                }
                il.Emit(OpCodes.Ldnull);
                return;
            }

            op.EmitGet(this);
            Convert(op, desiredType, allowExplicitConversion);
        }
Esempio n. 3
0
        internal void EmitGetHelper(Operand op, Type desiredType, bool allowExplicitConversion)
        {
            if (desiredType.IsByRef)
            {
                if (op.Type != desiredType.GetElementType())
                {
                    throw new InvalidOperationException(Properties.Messages.ErrByRefTypeMismatch);
                }

                op.EmitAddressOf(this);
                return;
            }

            if ((object)op == null)
            {
                if (desiredType.IsValueType)
                {
                    throw new ArgumentNullException("op");
                }
                il.Emit(OpCodes.Ldnull);
                return;
            }

            op.EmitGet(this);
            Convert(op, desiredType, allowExplicitConversion);
        }
Esempio n. 4
0
        void EmitArg(CodeGen g, int index, Operand arg)
        {
            if (_appliedSignature[index].IsByRef)
            {
                arg.EmitAddressOf(g);
                return;
            }

            g.EmitGetHelper(arg, _appliedSignature[index], _conversions[index], @from: _paramsSignature[index]);
        }
Esempio n. 5
0
        public void InitObj(Operand target)
        {
            if ((object)target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            BeforeStatement();

            target.EmitAddressOf(this);
            IL.Emit(OpCodes.Initobj, target.GetReturnType(TypeMapper));
        }
        public void InitObj(Operand target)
        {
            if ((object)target == null)
            {
                throw new ArgumentNullException("target");
            }

            BeforeStatement();

            target.EmitAddressOf(this);
            il.Emit(OpCodes.Initobj, target.Type);
        }
Esempio n. 7
0
        void EmitGetHelper_Ref(Operand op, Type desiredType)
        {
            if (ReferenceEquals(op, null))
            {
                throw new ArgumentException("Ref argument can't be null, expected " + desiredType.Name);
            }
            if (op.GetReturnType(TypeMapper) != desiredType.GetElementType())
            {
                throw new InvalidOperationException(Properties.Messages.ErrByRefTypeMismatch);
            }

            op.EmitAddressOf(this);
        }
Esempio n. 8
0
        void EmitArg(CodeGen g, int index, Operand arg)
        {
            if (appliedSignature[index].IsByRef)
            {
                arg.EmitAddressOf(g);
                return;
            }

            if ((object)arg == null)
            {
                g.IL.Emit(OpCodes.Ldnull);
            }
            else
            {
                arg.EmitGet(g);
            }

            conversions[index].Emit(g, paramsSignature[index], appliedSignature[index]);
        }
        public void InitObj(Operand target)
        {
            if ((object)target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            BeforeStatement();

            Type type = target.GetReturnType(TypeMapper);

            if (type.IsValueType)
            {
                target.EmitAddressOf(this);
                IL.Emit(OpCodes.Initobj, type);
            }
            else
            {
                Assign(target, null);
            }
        }
Esempio n. 10
0
 protected internal override void EmitAddressOf(CodeGen g)
 {
     OperandExtensions.SetLeakedState(this, false);
     _operand.EmitAddressOf(g);
 }
		public void InitObj(Operand target)
		{
			if ((object)target == null)
				throw new ArgumentNullException("target");

			BeforeStatement();

			target.EmitAddressOf(this);
			il.Emit(OpCodes.Initobj, target.Type);
		}
Esempio n. 12
0
 internal override void EmitAddressOf(CodeGen g)
 {
     op.EmitAddressOf(g);
 }
Esempio n. 13
0
 public override void EmitAddressOf(CodeGen g)
 {
     op.EmitAddressOf(g);
 }
Esempio n. 14
0
        internal void EmitGetHelper(Operand op, Type desiredType, bool allowExplicitConversion)
        {
            if (desiredType.IsByRef)
            {
                if (op.Type != desiredType.GetElementType())
                    throw new InvalidOperationException(Properties.Messages.ErrByRefTypeMismatch);

                op.EmitAddressOf(this);
                return;
            }

            if ((object)op == null)
            {
                if (desiredType.IsValueType)
                    throw new ArgumentNullException("op");
                il.Emit(OpCodes.Ldnull);
                return;
            }

            op.EmitGet(this);
            Convert(op, desiredType, allowExplicitConversion);
        }
Esempio n. 15
0
        void EmitGetHelper_Ref(Operand op, Type desiredType)
        {
            if (ReferenceEquals(op, null))
                throw new ArgumentException("Ref argument can't be null, expected " + desiredType.Name);
            if (op.GetReturnType(TypeMapper) != desiredType.GetElementType())
                throw new InvalidOperationException(Properties.Messages.ErrByRefTypeMismatch);

            op.EmitAddressOf(this);
        }
Esempio n. 16
0
        void EmitArg(CodeGen g, int index, Operand arg)
        {
            if (appliedSignature[index].IsByRef)
            {
                arg.EmitAddressOf(g);
                return;
            }

            if ((object)arg == null)
                g.IL.Emit(OpCodes.Ldnull);
            else
                arg.EmitGet(g);

            conversions[index].Emit(g, paramsSignature[index], appliedSignature[index]);
        }
Esempio n. 17
0
        void EmitGetHelper_Conversion(Operand op, Type desiredType, Conversion conv, Type from = null)
        {
            if (conv.RequiresAddress)
            {
                if (ReferenceEquals(op, null))
                    throw new ArgumentException("Conversion from nullref to " + desiredType.Name + " is impossible; for nullables variable it's required to load address.");

                op.EmitAddressOf(this);
            }
            else if (ReferenceEquals(op, null))
                IL.Emit(OpCodes.Ldnull);
            else
                op.EmitGet(this);
            if (from == null)
                from = (object)op == null ? null : op.GetReturnType(TypeMapper);
            conv.Emit(this, from, desiredType);
        }