private RqlTupleExpression ParseTuple(RqlToken leftParenToken) { var constants = new List <RqlConstantExpression>(); Type itemType = null; while (true) { RqlToken token = tokenizer.Next(); if (token.IsConstant) { if (itemType == null) { itemType = token.Data.GetType(); } else if (token.Data.GetType() != itemType) { throw new RqlParseException(token, "Tuple items must all be of the same type"); } constants.Add(RqlExpression.Constant(token)); } else { throw new RqlParseException(token); } token = tokenizer.Next(); if (token.IsComma) { continue; } else if (token.IsRightParen) { break; } else { throw new RqlParseException(token); } } return(RqlExpression.Tuple(leftParenToken, constants)); }