Skip to content

Commit 19c651f

Browse files
committed
rustc: Parse region types
1 parent 6224fdc commit 19c651f

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

src/rustc/syntax/parse/parser.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,21 @@ fn parse_ret_ty(p: parser) -> (ast::ret_style, @ast::ty) {
416416
}
417417
}
418418

419+
fn parse_region(p: parser) -> ast::region {
420+
alt p.token {
421+
token::IDENT(sid, _) if p.look_ahead(1u) == token::DOT {
422+
let string = p.get_str(sid);
423+
p.bump(); p.bump();
424+
if string == "self" {
425+
ast::re_self
426+
} else {
427+
ast::re_named(string)
428+
}
429+
}
430+
_ { ast::re_inferred }
431+
}
432+
}
433+
419434
fn parse_ty(p: parser, colons_before_params: bool) -> @ast::ty {
420435
let lo = p.span.lo;
421436

@@ -467,6 +482,11 @@ fn parse_ty(p: parser, colons_before_params: bool) -> @ast::ty {
467482
let t = ast::ty_vec(parse_mt(p));
468483
expect(p, token::RBRACKET);
469484
t
485+
} else if p.token == token::BINOP(token::AND) {
486+
p.bump();
487+
let region = parse_region(p);
488+
let mt = parse_mt(p);
489+
ast::ty_rptr(region, mt)
470490
} else if eat_word(p, "fn") {
471491
let proto = parse_fn_ty_proto(p);
472492
alt proto {

0 commit comments

Comments
 (0)