Пример #1
0
        public void VisitProcStatementDoWhile(DMASTProcStatementDoWhile statementDoWhile)
        {
            SimplifyExpression(ref statementDoWhile.Conditional);

            if (statementDoWhile.Body != null)
            {
                statementDoWhile.Body.Visit(this);
            }
        }
Пример #2
0
        public void ProcessStatementDoWhile(DMASTProcStatementDoWhile statementDoWhile)
        {
            string loopLabel    = _proc.NewLabelName();
            string loopEndLabel = _proc.NewLabelName();

            _proc.LoopStart(loopLabel);
            {
                ProcessBlockInner(statementDoWhile.Body);

                _proc.LoopContinue(loopLabel);
                DMExpression.Emit(_dmObject, _proc, statementDoWhile.Conditional);
                _proc.JumpIfFalse(loopEndLabel);
                _proc.LoopJumpToStart(loopLabel);

                _proc.AddLabel(loopEndLabel);
                _proc.Break();
            }
            _proc.LoopEnd();
        }