public override loopLoopClass loopLoop(loopLoopClass context)
        {
            Int64 loopCount = 0;

            if (context.count != null)
            {
                loopCount = (Int64)traverser.expression(context.count).extraInfo;
            }

            for (Int64 i = 0; i < loopCount; i++)
            {
                context.extraInfo = null;
                foreach (var node in context.loopBody)
                {
                    var retVal = traverser.objectDispatcher(node);

                    if (retVal.extraInfo is returnBlockClass || retVal.extraInfo is breakBlockClass ||
                        retVal.extraInfo is continueBlockClass)
                    {
                        context.extraInfo = retVal.extraInfo;
                        break;
                    }
                }

                if (context.extraInfo == null)
                {
                    continue;
                }

                if (context.extraInfo is returnBlockClass)
                {
                    return(context);
                }
                if (context.extraInfo is breakBlockClass)
                {
                    break;
                }
                if (context.extraInfo is continueBlockClass)
                {
                    continue;
                }
            }

            return(context);
        }
Esempio n. 2
0
 public override loopLoopClass loopLoop(loopLoopClass context)
 {
     return(visitor.loopLoop(context));
 }