Ejemplo n.º 1
0
        internal void If(Cmp cmpOp)
        {
            IfState ifState = new IfState();

            ifState.EndIf     = DefineLabel();
            ifState.ElseBegin = DefineLabel();
            _ilGen.Emit(GetBranchCode(cmpOp), ifState.ElseBegin);
            _blockStack.Push(ifState);
        }
Ejemplo n.º 2
0
        internal void EndIf()
        {
            IfState ifState = PopIfState();

            if (!ifState.ElseBegin.Equals(ifState.EndIf))
            {
                MarkLabel(ifState.ElseBegin);
            }
            MarkLabel(ifState.EndIf);
        }
Ejemplo n.º 3
0
        internal void Else()
        {
            IfState ifState = PopIfState();

            Br(ifState.EndIf);
            MarkLabel(ifState.ElseBegin);

            ifState.ElseBegin = ifState.EndIf;
            _blockStack.Push(ifState);
        }
Ejemplo n.º 4
0
        internal void ElseIf(object value1, Cmp cmpOp, object value2)
        {
            IfState ifState = (IfState)_blockStack.Pop();

            Br(ifState.EndIf);
            MarkLabel(ifState.ElseBegin);

            Load(value1);
            Load(value2);
            ifState.ElseBegin = DefineLabel();

            _ilGen.Emit(GetBranchCode(cmpOp), ifState.ElseBegin);
            _blockStack.Push(ifState);
        }