rustc: Enable writing "unsafe extern fn() {}"
Previously, the parser would not allow you to simultaneously implement a
function with a different abi as well as being unsafe at the same time. This
extends the parser to allow functions of the form:
unsafe extern fn foo() {
// ...
}
The closure type grammar was also changed to reflect this reversal, types
previously written as "extern unsafe fn()" must now be written as
"unsafe extern fn()". The parser currently has a hack which allows the old
style, but this will go away once a snapshot has landed.
Closes #10025
[breaking-change]
This commit is contained in:
@@ -2372,16 +2372,10 @@ impl<'a> State<'a> {
|
||||
abi: abi::Abi,
|
||||
vis: ast::Visibility) -> IoResult<()> {
|
||||
try!(word(&mut self.s, visibility_qualified(vis, "")));
|
||||
|
||||
try!(self.print_opt_fn_style(opt_fn_style));
|
||||
if abi != abi::Rust {
|
||||
try!(self.word_nbsp("extern"));
|
||||
try!(self.word_nbsp(abi.to_str()));
|
||||
|
||||
if opt_fn_style != Some(ast::ExternFn) {
|
||||
try!(self.print_opt_fn_style(opt_fn_style));
|
||||
}
|
||||
} else {
|
||||
try!(self.print_opt_fn_style(opt_fn_style));
|
||||
}
|
||||
|
||||
word(&mut self.s, "fn")
|
||||
@@ -2391,7 +2385,6 @@ impl<'a> State<'a> {
|
||||
match s {
|
||||
ast::NormalFn => Ok(()),
|
||||
ast::UnsafeFn => self.word_nbsp("unsafe"),
|
||||
ast::ExternFn => self.word_nbsp("extern")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user