@@ -2047,64 +2047,37 @@ fn parse_item_tag(p: parser, attrs: [ast::attribute]) -> @ast::item {
2047
2047
ast:: item_tag ( [ variant] , ty_params) , attrs) ;
2048
2048
}
2049
2049
expect ( p, token:: LBRACE ) ;
2050
- let all_nullary = true ;
2051
- let have_disr = false ;
2052
- let done = false ;
2053
- while !done {
2054
- let tok = p. token ;
2055
- alt tok {
2056
- token : : IDENT ( name, _) {
2057
- check_bad_word ( p) ;
2058
- let vlo = p. span . lo ;
2059
- p. bump ( ) ;
2060
- let args: [ ast:: variant_arg ] = [ ] ;
2061
- let vhi = p. span . hi ;
2062
- let disr_expr = none;
2063
- alt p. token {
2064
- token:: LPAREN {
2065
- all_nullary = false ;
2066
- let arg_tys = parse_seq ( token:: LPAREN , token:: RPAREN ,
2067
- seq_sep ( token:: COMMA ) ,
2068
- { |p| parse_ty ( p, false ) } , p) ;
2069
- for ty: @ast:: ty in arg_tys. node {
2070
- args += [ { ty: ty, id: p. get_id ( ) } ] ;
2071
- }
2072
- vhi = arg_tys. span . hi ;
2073
- }
2074
- token:: EQ {
2075
- have_disr = true ;
2076
- p. bump ( ) ;
2077
- disr_expr = some ( parse_expr ( p) ) ;
2078
- }
2079
- _ { /* empty */ }
2080
- }
2050
+ let all_nullary = true , have_disr = false ;
2081
2051
2082
- alt p. token {
2083
- token:: COMMA {
2084
- p. bump ( ) ;
2085
- if p. token == token:: RBRACE { done = true ; }
2086
- }
2087
- token:: RBRACE { done = true ; }
2088
- _ { /* fall through */ }
2052
+ while p. token != token:: RBRACE {
2053
+ let vlo = p. span . lo ;
2054
+ let ident = parse_value_ident ( p) ;
2055
+ let args = [ ] , disr_expr = none;
2056
+ if p. token == token:: LPAREN {
2057
+ all_nullary = false ;
2058
+ let arg_tys = parse_seq ( token:: LPAREN , token:: RPAREN ,
2059
+ seq_sep ( token:: COMMA ) ,
2060
+ { |p| parse_ty ( p, false ) } , p) ;
2061
+ for ty in arg_tys. node {
2062
+ args += [ { ty: ty, id: p. get_id ( ) } ] ;
2089
2063
}
2090
-
2091
- p. get_id ( ) ;
2092
- let vr = { name: p. get_str ( name) , args: args, id: p. get_id ( ) ,
2093
- disr_expr: disr_expr} ;
2094
- variants += [ spanned ( vlo, vhi, vr) ] ;
2095
- }
2096
- _ {
2097
- p. fatal ( "expected name of variant or '}' but found '" +
2098
- token:: to_str ( p. reader , tok) + "'" ) ;
2099
- }
2064
+ } else if eat ( p, token:: EQ ) {
2065
+ have_disr = true ;
2066
+ disr_expr = some ( parse_expr ( p) ) ;
2100
2067
}
2068
+
2069
+ let vr = { name: ident, args: args, id: p. get_id ( ) ,
2070
+ disr_expr: disr_expr} ;
2071
+ variants += [ spanned ( vlo, p. last_span . hi , vr) ] ;
2072
+
2073
+ if !eat ( p, token:: COMMA ) { break ; }
2101
2074
}
2102
- let hi = p . span . hi ;
2075
+ expect ( p , token :: RBRACE ) ;
2103
2076
if ( have_disr && !all_nullary) {
2104
2077
p. fatal ( "discriminator values can only be used with a c-like enum" ) ;
2105
2078
}
2106
- p . bump ( ) ;
2107
- ret mk_item ( p , lo , hi , id , ast:: item_tag ( variants, ty_params) , attrs) ;
2079
+ ret mk_item ( p , lo , p . last_span . hi , id ,
2080
+ ast:: item_tag ( variants, ty_params) , attrs) ;
2108
2081
}
2109
2082
2110
2083
fn parse_fn_ty_proto ( p : parser ) -> ast:: proto {
0 commit comments