Пример #1
0
 public override string Generate(CompileContext outer)
 {
     using (TextWriter writer = new StringWriter())
     {
         bool first = true;
         foreach (var block in blocks)
         {
             EvaluationStack unhandled = null;
             if (block.condition != null)
             {
                 string nothing = outer.GenerateWithoutWriting(block.condition.first, block.condition.last, ref unhandled);
                 Debug.Assert(string.IsNullOrEmpty(nothing));
                 if (unhandled == null)
                 {
                     unhandled = outer.GetEvaluationStack();
                 }
                 writer.WriteLine(CompileContext.Format(first ? "if({0} == 0)" : "else if({0} == 0)", unhandled.Pop()));
             }
             else
             {
                 writer.WriteLine("else");
             }
             writer.WriteLine(CompileContext.Format("{{{0}}}", outer.GenerateWithoutWriting(block.body.first, block.body.last, ref unhandled)));
             first = false;
         }
         return(writer.ToString());
     }
 }
Пример #2
0
        public override string Generate(CompileContext outer)
        {
            // Condition
            EvaluationStack unhandled = null;
            string          nothing   = outer.GenerateWithoutWriting(this.condition.first, this.condition.last, ref unhandled);

            Debug.Assert(string.IsNullOrEmpty(nothing));
            if (unhandled == null)
            {
                unhandled = outer.GetEvaluationStack();
            }
            var    condition = unhandled.Pop();
            string body      = outer.GenerateWithoutWriting(this.body.first, this.body.last, ref unhandled);

            Debug.Assert(unhandled == null);
            return(CompileContext.Format("while({0} != 0) {{\n{1}\n}}\n", condition, body));
        }