@@ -26,6 +26,9 @@ export parse_stmt;
26
26
export parse_ty;
27
27
28
28
// FIXME: #ast expects to find this here but it's actually defined in `parse`
29
+ // Fixing this will be easier when we have export decls on individual items --
30
+ // then parse can export this publicly, and everything else crate-visibly.
31
+ // (See #1893)
29
32
import parse_from_source_str;
30
33
export parse_from_source_str;
31
34
@@ -224,8 +227,10 @@ fn parse_ty_fn(p: parser) -> ast::fn_decl {
224
227
let inputs =
225
228
parse_seq ( token:: LPAREN , token:: RPAREN , seq_sep ( token:: COMMA ) ,
226
229
parse_fn_input_ty, p) ;
227
- // FIXME: there's no syntax for this right now anyway
228
- // auto constrs = parse_constrs(~[], p);
230
+ // FIXME: constrs is empty because right now, higher-order functions
231
+ // can't have constrained types.
232
+ // Not sure whether that would be desirable anyway. See #34 for the
233
+ // story on constrained types.
229
234
let constrs: [ @ast:: constr ] = [ ] ;
230
235
let ( ret_style, ret_ty) = parse_ret_ty ( p) ;
231
236
ret { inputs : inputs. node , output : ret_ty,
@@ -400,9 +405,9 @@ fn parse_ret_ty(p: parser) -> (ast::ret_style, @ast::ty) {
400
405
fn region_from_name ( p : parser , s : option < str > ) -> ast:: region {
401
406
let r = alt s {
402
407
some ( string) {
403
- // FIXME: To be consistent with our type resolution the
408
+ // FIXME: To be consistent with our type resolution, the
404
409
// static region should probably be resolved during type
405
- // checking, not in the parser.
410
+ // checking, not in the parser. (Issue #2256)
406
411
if string == "static" {
407
412
ast:: re_static
408
413
} else {
@@ -973,12 +978,8 @@ fn parse_bottom_expr(p: parser) -> pexpr {
973
978
hi = p. span . hi ;
974
979
} else if eat_word ( p, "be" ) {
975
980
let e = parse_expr ( p) ;
976
-
977
- // FIXME: Is this the right place for this check?
978
- if /*check*/ ast_util:: is_call_expr ( e) {
979
- hi = e. span . hi ;
980
- ex = ast:: expr_be ( e) ;
981
- } else { p. fatal ( "non-call expression in tail call" ) ; }
981
+ hi = e. span . hi ;
982
+ ex = ast:: expr_be ( e) ;
982
983
} else if eat_word ( p, "copy" ) {
983
984
let e = parse_expr ( p) ;
984
985
ex = ast:: expr_copy ( e) ;
@@ -2070,6 +2071,19 @@ fn parse_item_class(p: parser, attrs: [ast::attribute]) -> @ast::item {
2070
2071
}
2071
2072
}
2072
2073
2074
+ fn parse_single_class_item ( p : parser , privcy : ast:: privacy )
2075
+ -> @ast:: class_member {
2076
+ if eat_word ( p, "let" ) {
2077
+ let a_var = parse_instance_var ( p, privcy) ;
2078
+ expect ( p, token:: SEMI ) ;
2079
+ ret a_var;
2080
+ }
2081
+ else {
2082
+ let m = parse_method ( p, privcy) ;
2083
+ ret @{ node : ast:: class_method ( m) , span : m. span } ;
2084
+ }
2085
+ }
2086
+
2073
2087
// lets us identify the constructor declaration at
2074
2088
// parse time
2075
2089
enum class_contents { ctor_decl( ast:: fn_decl , ast:: blk , codemap:: span ) ,
@@ -2089,35 +2103,18 @@ fn parse_class_item(p:parser, class_name_with_tps:@ast::path)
2089
2103
let body = parse_block ( p) ;
2090
2104
ret ctor_decl( decl, body, ast_util:: mk_sp ( lo, p. last_span . hi ) ) ;
2091
2105
}
2092
- // FIXME: refactor
2093
2106
else if eat_word ( p, "priv" ) {
2094
2107
expect ( p, token:: LBRACE ) ;
2095
2108
let mut results = [ ] ;
2096
2109
while p. token != token:: RBRACE {
2097
- if eat_word ( p, "let" ) {
2098
- let a_var = parse_instance_var ( p, ast:: priv) ;
2099
- expect ( p, token:: SEMI ) ;
2100
- results += [ a_var] ;
2101
- }
2102
- else {
2103
- let m = parse_method ( p, ast:: priv) ;
2104
- results += [ @{ node: ast:: class_method ( m) , span: m. span } ] ;
2105
- }
2110
+ results += [ parse_single_class_item ( p, ast:: priv) ] ;
2106
2111
}
2107
2112
p. bump ( ) ;
2108
2113
ret members( results) ;
2109
2114
}
2110
2115
else {
2111
2116
// Probably need to parse attrs
2112
- ret if eat_word ( p, "let" ) {
2113
- let ivar = parse_instance_var ( p, ast:: pub) ;
2114
- expect ( p, token:: SEMI ) ;
2115
- members ( [ ivar] )
2116
- }
2117
- else {
2118
- let m = parse_method ( p, ast:: pub) ;
2119
- members ( [ @{ node: ast:: class_method ( m) , span: m. span } ] )
2120
- }
2117
+ ret members ( [ parse_single_class_item ( p, ast:: pub) ] ) ;
2121
2118
}
2122
2119
}
2123
2120
0 commit comments