public override void Compile(ByteCode bc)
        {
            bc.PushSourceRef(m_RefFor);

            Loop L = new Loop()
            {
                Scope = m_StackFrame
            };

            bc.LoopTracker.Loops.Push(L);

            m_End.Compile(bc);
            bc.Emit_ToNum(3);
            m_Step.Compile(bc);
            bc.Emit_ToNum(2);
            m_Start.Compile(bc);
            bc.Emit_ToNum(1);

            int start   = bc.GetJumpPointForNextInstruction();
            var jumpend = bc.Emit_Jump(OpCode.JFor, -1);

            bc.Emit_Enter(m_StackFrame);
            //bc.Emit_SymStorN(m_VarName);

            bc.Emit_Store(m_VarName, 0, 0);

            m_InnerBlock.Compile(bc);

            bc.PopSourceRef();
            bc.PushSourceRef(m_RefEnd);

            bc.Emit_Debug("..end");
            bc.Emit_Leave(m_StackFrame);
            bc.Emit_Incr(1);
            bc.Emit_Jump(OpCode.Jump, start);

            bc.LoopTracker.Loops.Pop();

            int exitpoint = bc.GetJumpPointForNextInstruction();

            foreach (Instruction i in L.BreakJumps)
            {
                i.NumVal = exitpoint;
            }

            jumpend.NumVal = exitpoint;
            bc.Emit_Pop(3);

            bc.PopSourceRef();
        }
        public override void Compile(ByteCode bc)
        {
            bc.PushSourceRef(_refFor);

            var l = new Loop
            {
                Scope = _stackFrame
            };

            bc.LoopTracker.Loops.Push(l);

            _end.Compile(bc);
            bc.Emit_ToNum(3);
            _step.Compile(bc);
            bc.Emit_ToNum(2);
            _start.Compile(bc);
            bc.Emit_ToNum(1);

            int start   = bc.GetJumpPointForNextInstruction();
            var jumpend = bc.Emit_Jump(OpCode.JFor, -1);

            bc.Emit_Enter(_stackFrame);

            bc.Emit_Store(_varName, 0, 0);

            _innerBlock.Compile(bc);

            bc.PopSourceRef();
            bc.PushSourceRef(_refEnd);

            bc.Emit_Leave(_stackFrame);
            bc.Emit_Incr(1);
            bc.Emit_Jump(OpCode.Jump, start);

            bc.LoopTracker.Loops.Pop();

            int exitpoint = bc.GetJumpPointForNextInstruction();

            foreach (var i in l.BreakJumps)
            {
                i.NumVal = exitpoint;
            }

            jumpend.NumVal = exitpoint;
            bc.Emit_Pop(3);

            bc.PopSourceRef();
        }