/// <summary> /// Generates the code for a ForLoopStatement node. /// </summary> /// <param name="fls">The ForLoopStatement node.</param> /// <returns>String containing C# code for ForLoopStatement fls.</returns> private string GenerateForLoopStatement(ForLoopStatement fls) { StringBuilder retVal = new StringBuilder(); int comma = fls.kids.Count - 1; // tells us whether to print a comma // It's possible that all we have is an empty Ident, for example: // // for (x; x < 10; x++) { ... } // // Which is illegal in C# (MONO). We'll skip it. if (fls.kids.Top is IdentExpression && 1 == fls.kids.Count) return ""; for (int i = 0; i < fls.kids.Count; i++) { SYMBOL s = (SYMBOL) fls.kids[i]; // Statements surrounded by parentheses in for loops // // e.g. for ((i = 0), (j = 7); (i < 10); (++i)) // // are legal in LSL but not in C# so we need to discard the parentheses // // The following, however, does not appear to be legal in LLS // // for ((i = 0, j = 7); (i < 10); (++i)) // // As of Friday 20th November 2009, the Linden Lab simulators appear simply never to compile or run this // script but with no debug or warnings at all! Therefore, we won't deal with this yet (which looks // like it would be considerably more complicated to handle). while (s is ParenthesisExpression) s = (SYMBOL) s.kids.Pop(); retVal.Append(GenerateNode(s)); if (0 < comma--) retVal.Append(Generate(", ")); } return retVal.ToString(); }
public ForLoopStatement(Parser yyp, ForLoopStatement fls, Expression e) : base((yyp)) { while (0 < fls.kids.Count) kids.Add(fls.kids.Pop()); kids.Add(e); }
public ForLoopStatement(Parser yyp, ForLoopStatement fls, SimpleAssignment sa) : base((yyp)) { while (0 < fls.kids.Count) kids.Add(fls.kids.Pop()); kids.Add(sa); }
public ForLoop(Parser yyp, ForLoopStatement flsa, Expression e, ForLoopStatement flsb, Statement s) : base((yyp)) { kids.Add(flsa); kids.Add(e); kids.Add(flsb); if (0 < s.kids.Count && s.kids.Top is CompoundStatement) kids.Add(s.kids.Pop()); else kids.Add(s); }