Example #1
0
        public virtual void Compile(CompilationContext context)
        {
            if (Value.ItemType != TargetType)
            {
                if (!Value.ItemType.IsValueType && !TargetType.IsValueType)
                {
                    Value.Compile(context);
                    context.Emit(OpCodes.Castclass, TargetType);
                    return;
                }
                else if (TargetType.IsValueType && !Value.ItemType.IsValueType)
                {
                    new AstUnbox()
                    {
                        RefObj = (IAstRef)Value, UnboxedType = TargetType
                    }.Compile(context);
                    return;
                }

                throw new EmitMapperException();
            }
            else
            {
                Value.Compile(context);
            }
        }
        public virtual void Compile(CompilationContext context)
        {
            if (_value.itemType != _targetType)
            {
                if (!_value.itemType.IsValueType && !_targetType.IsValueType)
                {
                    _value.Compile(context);
                    context.Emit(OpCodes.Castclass, _targetType);
                    return;
                }
                else if (_targetType.IsValueType && !_value.itemType.IsValueType)
                {
                    new AstUnbox()
                    {
                        refObj = (IAstRef)_value, unboxedType = _targetType
                    }.Compile(context);
                    return;
                }

                throw new EmitMapperException();
            }
            else
            {
                _value.Compile(context);
            }
        }
 public void Compile(CompilationContext context)
 {
     targetObject.Compile(context);
     value.Compile(context);
     CompilationHelper.PrepareValueOnStack(context, fieldInfo.FieldType, value.itemType);
     context.Emit(OpCodes.Stfld, fieldInfo);
 }
    /// <summary>
    /// </summary>
    /// <param name="context">The context.</param>
    public void Compile(CompilationContext context)
    {
        var elseLabel  = context.ILGenerator.DefineLabel();
        var endIfLabel = context.ILGenerator.DefineLabel();

        Condition.Compile(context);
        context.Emit(OpCodes.Brfalse, elseLabel);

        if (TrueBranch != null)
        {
            TrueBranch.Compile(context);
        }

        if (FalseBranch != null)
        {
            context.Emit(OpCodes.Br, endIfLabel);
        }

        context.ILGenerator.MarkLabel(elseLabel);

        if (FalseBranch != null)
        {
            FalseBranch.Compile(context);
        }

        context.ILGenerator.MarkLabel(endIfLabel);
    }
Example #5
0
    /// <summary>
    /// </summary>
    /// <param name="context">The context.</param>
    public void Compile(CompilationContext context)
    {
        Value.Compile(context);

        if (Value.ItemType.IsValueType)
        {
            context.Emit(OpCodes.Box, ItemType);
        }
    }
Example #6
0
        public void Compile(CompilationContext context)
        {
            value.Compile(context);

            if (value.itemType.IsValueType())
            {
                context.Emit(OpCodes.Box, itemType);
            }
        }
Example #7
0
        public void Compile(CompilationContext context)
        {
            Label ifNotNullLabel = context.ilGenerator.DefineLabel();

            _value.Compile(context);
            context.Emit(OpCodes.Dup);
            context.Emit(OpCodes.Brtrue_S, ifNotNullLabel);
            context.Emit(OpCodes.Pop);
            _ifNullValue.Compile(context);
            context.ilGenerator.MarkLabel(ifNotNullLabel);
        }
Example #8
0
    /// <summary>
    /// </summary>
    /// <param name="context">The context.</param>
    public void Compile(CompilationContext context)
    {
        if (!(_value is IAstRef) && !ReflectionHelper.IsNullable(_value.ItemType))
        {
            context.Emit(OpCodes.Ldc_I4_1);
        }
        else if (ReflectionHelper.IsNullable(_value.ItemType))
        {
            AstBuildHelper.ReadPropertyRV(new AstValueToAddr((IAstValue)_value), _value.ItemType.GetProperty("HasValue"))
            .Compile(context);

            context.Emit(OpCodes.Ldc_I4_0);
            context.Emit(OpCodes.Ceq);
        }
        else
        {
            _value.Compile(context);
            new AstConstantNull().Compile(context);
            context.Emit(OpCodes.Ceq);
        }
    }
Example #9
0
        public void Compile(CompilationContext context)
        {
            Label elseLabel  = context.ilGenerator.DefineLabel();
            Label endIfLabel = context.ilGenerator.DefineLabel();

            condition.Compile(context);
            context.Emit(OpCodes.Brfalse, elseLabel);

            if (trueBranch != null)
            {
                trueBranch.Compile(context);
            }
            if (falseBranch != null)
            {
                context.Emit(OpCodes.Br, endIfLabel);
            }

            context.ilGenerator.MarkLabel(elseLabel);
            if (falseBranch != null)
            {
                falseBranch.Compile(context);
            }
            context.ilGenerator.MarkLabel(endIfLabel);
        }
Example #10
0
 public void Compile(CompilationContext context)
 {
     value.Compile(context);
     CompilationHelper.PrepareValueOnStack(context, argumentType, value.itemType);
     context.Emit(OpCodes.Starg_S, argumentIndex);
 }
Example #11
0
 public void Compile(CompilationContext context)
 {
     returnValue.Compile(context);
     CompilationHelper.PrepareValueOnStack(context, returnType, returnValue.itemType);
     context.Emit(OpCodes.Ret);
 }
Example #12
0
 public void Compile(CompilationContext context)
 {
     value.Compile(context);
     CompilationHelper.PrepareValueOnStack(context, localType, value.itemType);
     context.Emit(OpCodes.Stloc, localIndex);
 }
Example #13
0
 public void Compile(CompilationContext context)
 {
     context.Emit(OpCodes.Ldc_I4_0);
     _value.Compile(context);
     context.Emit(OpCodes.Ceq);
 }