public override void Visit(LoopCommand visitee)
 {
     if (visitee.Times.HasValue)
     {
         // とりあえず有限ループは展開する実装とする。メモリ効率的に問題があればループのまま演奏する実装を検討する
         for (int i = 0; i < visitee.Times.Value; ++i)
         {
             foreach (var child in visitee.Content)
             {
                 if (child is LoopBreakCommand)
                 {
                     if (i == visitee.Times.Value - 1)
                     {
                         break;
                     }
                     else
                     {
                         continue;
                     }
                 }
                 child.Accept(this);
             }
         }
     }
     else
     {
         var start = this.result.Count;
         foreach (var child in visitee.Content)
         {
             child.Accept(this);
         }
         this.result.Add(new JumpInstruction(start));
     }
 }
예제 #2
0
 public virtual void Visit(LoopCommand visitee)
 {
 }