示例#1
0
        public override void RenderIL_Store(ILCanvas canvas, ILValue value)
        {
            value.GetILImplicitCast(GetValueType())
            .RenderIL_Load(canvas);

            canvas.Emit_Starg(GetArgIndex(canvas));
        }
示例#2
0
        public override void RenderIL_Execute(ILCanvas canvas)
        {
            ILCanvasLabel exit_label = canvas.CreateLabel();

            condition.GetILImplicitCast(typeof(bool))
            .RenderIL_Load(canvas);

            if (HasElse())
            {
                ILCanvasLabel false_label = canvas.CreateLabel();

                false_label.Emit_Brfalse();
                if_true_statement.RenderIL_Execute(canvas);
                exit_label.Emit_Br();

                false_label.Emit_Label();
                if_false_statement.RenderIL_Execute(canvas);
            }
            else
            {
                exit_label.Emit_Brfalse();
                if_true_statement.RenderIL_Execute(canvas);
            }

            exit_label.Emit_Label();
        }
示例#3
0
        public override void RenderIL_Load(ILCanvas canvas)
        {
            if (method.IsEffectivelyInstanceMethod() && caller != null)
            {
                caller.GetILImplicitCast(method.GetILMethodInvokationType())
                .RenderIL_Load(canvas);

                arguments.GetILImplicitCasts(method.GetEffectiveParameterTypes())
                .RenderIL_Load(canvas);

                if (method.IsTechnicallyInstanceMethod() && method.DeclaringType.IsReferenceType())
                {
                    canvas.Emit_Callvirt(method);
                }
                else
                {
                    canvas.Emit_Call(method);
                }
            }
            else
            {
                arguments.GetILImplicitCasts(method.GetTechnicalParameterTypes())
                .RenderIL_Load(canvas);

                canvas.Emit_Call(method);
            }
        }
示例#4
0
        public override void RenderIL_Execute(ILCanvas canvas)
        {
            if (value != null)
            {
                value.GetILImplicitCast(canvas.GetMethod().GetReturnType())
                .RenderIL_Load(canvas);
            }

            canvas.Emit_Ret();
        }
示例#5
0
        public override void RenderIL_Store(ILCanvas canvas, ILValue target, ILValue index, ILValue value)
        {
            target.RenderIL_Load(canvas);
            index.RenderIL_Load(canvas);

            value.GetILImplicitCast(GetElementType())
            .RenderIL_Load(canvas);

            canvas.Emit_Stelem_I4();
        }
示例#6
0
        public override void RenderIL_Store(ILCanvas canvas, ILValue value)
        {
            if (field.IsInstanceField())
            {
                RenderIL_LoadTarget(canvas);

                value.GetILImplicitCast(field.FieldType)
                .RenderIL_Load(canvas);

                canvas.Emit_Stfld(field);
            }
            else
            {
                value.GetILImplicitCast(field.FieldType)
                .RenderIL_Load(canvas);

                canvas.Emit_Stsfld(field);
            }
        }
示例#7
0
        public override void RenderIL_Execute(ILCanvas canvas)
        {
            ILCanvasLabel entry_label = canvas.CreateLabel();
            ILCanvasLabel exit_label  = canvas.CreateLabel();

            entry_label.Emit_Label();

            condition.GetILImplicitCast(typeof(bool))
            .RenderIL_Load(canvas);

            exit_label.Emit_Brfalse();
            while_statement.RenderIL_Execute(canvas);
            entry_label.Emit_Br();

            exit_label.Emit_Label();
        }
示例#8
0
 static public ILValue GetILIsFalse(this ILValue item)
 {
     return(item.GetILImplicitCast(typeof(bool)).GetILLogicalNegated());
 }
示例#9
0
 static public ILValue GetILIsTrue(this ILValue item)
 {
     return(item.GetILImplicitCast(typeof(bool)));
 }
示例#10
0
 protected void LoadValues(ILCanvas canvas, ILValue left, ILValue right)
 {
     left.GetILImplicitCast(input_type).RenderIL_Load(canvas);
     right.GetILImplicitCast(input_type).RenderIL_Load(canvas);
 }
示例#11
0
 protected void LoadValue(ILCanvas canvas, ILValue input)
 {
     input.GetILImplicitCast(input_type).RenderIL_Load(canvas);
 }
示例#12
0
 private void RenderIL_LoadTarget(ILCanvas canvas)
 {
     target.GetILImplicitCast(field.GetILFieldInvokationType())
     .RenderIL_Load(canvas);
 }