diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-10-24 14:36:00 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-10-25 11:49:26 -0700 |
| commit | 599b4208fb64b18aaddf9add5d8ce2319c7e7cfe (patch) | |
| tree | 3b54245720a1450d324e0ae41756c5e35fe10bd0 /src/libsyntax/parse/parser.rs | |
| parent | ce23a9992542f0c82e0f32c427b572caae790754 (diff) | |
| download | rust-599b4208fb64b18aaddf9add5d8ce2319c7e7cfe.tar.gz rust-599b4208fb64b18aaddf9add5d8ce2319c7e7cfe.zip | |
rustc: Translate tuple struct constructors
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 1af516424de..23ddf61606d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2659,9 +2659,11 @@ impl Parser { let mut fields: ~[@struct_field]; let mut methods: ~[@method] = ~[]; let mut the_dtor: Option<(blk, ~[attribute], codemap::span)> = None; + let is_tuple_like; if self.eat(token::LBRACE) { // It's a record-like struct. + is_tuple_like = false; fields = ~[]; while self.token != token::RBRACE { match self.parse_class_item() { @@ -2694,6 +2696,7 @@ impl Parser { self.bump(); } else if self.token == token::LPAREN { // It's a tuple-like struct. + is_tuple_like = true; fields = do self.parse_unspanned_seq(token::LPAREN, token::RPAREN, seq_sep_trailing_allowed (token::COMMA)) |p| { @@ -2708,6 +2711,7 @@ impl Parser { self.expect(token::SEMI); } else if self.eat(token::SEMI) { // It's a unit-like struct. + is_tuple_like = true; fields = ~[]; } else { self.fatal(fmt!("expected `{`, `(`, or `;` after struct name \ @@ -2723,13 +2727,14 @@ impl Parser { body: d_body}, span: d_s}}; let _ = self.get_id(); // XXX: Workaround for crazy bug. + let new_id = self.get_id(); (class_name, item_class(@{ traits: traits, fields: move fields, methods: move methods, dtor: actual_dtor, - ctor_id: self.get_id() + ctor_id: if is_tuple_like { Some(new_id) } else { None } }, ty_params), None) } @@ -3076,7 +3081,7 @@ impl Parser { fields: move fields, methods: move methods, dtor: actual_dtor, - ctor_id: self.get_id() + ctor_id: Some(self.get_id()) }; } |
