public void Visit(Ast.TupleNode tuple) { object[] array = new object[tuple.Elements.Count]; int index = 0; foreach (Ast.INode node in tuple.Elements) { node.Accept(this); array[index++] = generated.Pop(); } generated.Push(array); }
public void Visit(Ast.TupleNode tuple) { result.AppendLine("(tuple"); indent++; foreach (Ast.INode node in tuple.Elements) { Indent(); node.Accept(this); result.AppendLine(","); } indent--; Indent(); result.Append(")"); }
Ast.TupleNode ParseTuple(SeekableStringReader sr) { //tuple = tuple_empty | tuple_one | tuple_more //tuple_empty = '()' . //tuple_one = '(' expr ',' <whitespace> ')' . //tuple_more = '(' expr_list ')' . sr.Read(); // ( sr.SkipWhitespace(); Ast.TupleNode tuple = new Ast.TupleNode(); if (sr.Peek() == ')') { sr.Read(); return(tuple); // empty tuple } Ast.INode firstelement = ParseExpr(sr); if (sr.Peek() == ',') { sr.Read(); sr.SkipWhitespace(); if (sr.Read() == ')') { // tuple with just a single element tuple.Elements.Add(firstelement); return(tuple); } sr.Rewind(1); // undo the thing that wasn't a ) } tuple.Elements = ParseExprList(sr); tuple.Elements.Insert(0, firstelement); if (!sr.HasMore()) { throw new ParseException("missing ')'"); } char closechar = sr.Read(); if (closechar == ',') { closechar = sr.Read(); } if (closechar != ')') { throw new ParseException("expected ')'"); } return(tuple); }