about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2013-02-18 17:45:56 -0800
committerTim Chevalier <chevalier@alum.wellesley.edu>2013-02-18 17:45:56 -0800
commitaa284de1fc246b55fb53783ded3e9786e04b03d0 (patch)
tree77cbec33ccd8c2af2c2888b5cf2c60499db1d32e /src/libsyntax/parse/parser.rs
parent612553cb3921f428668602afda1b106e0fd54d73 (diff)
downloadrust-aa284de1fc246b55fb53783ded3e9786e04b03d0.tar.gz
rust-aa284de1fc246b55fb53783ded3e9786e04b03d0.zip
rustc: For one-tuples, make parsing and printing the type work
and add a test to reflect-visit-data
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index b5c68d6715e..a9b455c3304 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -576,12 +576,21 @@ pub impl Parser {
                 self.bump();
                 ty_nil
             } else {
+                // (t) is a parenthesized ty
+                // (t,) is the type of a tuple with only one field,
+                // of type t
                 let mut ts = ~[self.parse_ty(false)];
+                let mut one_tuple = false;
                 while self.token == token::COMMA {
                     self.bump();
-                    ts.push(self.parse_ty(false));
+                    if self.token != token::RPAREN {
+                        ts.push(self.parse_ty(false));
+                    }
+                    else {
+                        one_tuple = true;
+                    }
                 }
-                let t = if vec::len(ts) == 1u { ts[0].node }
+                let t = if ts.len() == 1 && !one_tuple { ts[0].node }
                 else { ty_tup(ts) };
                 self.expect(token::RPAREN);
                 t