Allow ! as the return type of proc/closure literals

Fixes #13490.
This commit is contained in:
P1start 2014-08-29 17:16:23 +12:00
parent dee8423531
commit b220db03bd
2 changed files with 14 additions and 10 deletions

View File

@ -4092,20 +4092,20 @@ fn parse_fn_block_decl(&mut self)
(optional_unboxed_closure_kind, args)
}
};
let output = if self.eat(&token::RARROW) {
self.parse_ty(true)
let (style, output) = if self.token == token::RARROW {
self.parse_ret_ty()
} else {
P(Ty {
(Return, P(Ty {
id: ast::DUMMY_NODE_ID,
node: TyInfer,
span: self.span,
})
}))
};
(P(FnDecl {
inputs: inputs_captures,
output: output,
cf: Return,
cf: style,
variadic: false
}), optional_unboxed_closure_kind)
}
@ -4118,20 +4118,20 @@ fn parse_proc_decl(&mut self) -> P<FnDecl> {
seq_sep_trailing_allowed(token::COMMA),
|p| p.parse_fn_block_arg());
let output = if self.eat(&token::RARROW) {
self.parse_ty(true)
let (style, output) = if self.token == token::RARROW {
self.parse_ret_ty()
} else {
P(Ty {
(Return, P(Ty {
id: ast::DUMMY_NODE_ID,
node: TyInfer,
span: self.span,
})
}))
};
P(FnDecl {
inputs: inputs,
output: output,
cf: Return,
cf: style,
variadic: false
})
}

View File

@ -78,6 +78,10 @@ fn bar<'b>() {
let a = A;
a.foo::<<'a>||>();
// issue #13490
let _ = || -> ! loop {};
let _ = proc() -> ! loop {};
}
struct B<T>;