//! The main parser interface.
#![feature(array_windows)]
+#![feature(box_patterns)]
#![feature(crate_visibility_modifier)]
#![feature(if_let_guard)]
-#![feature(box_patterns)]
+#![feature(let_chains)]
#![feature(let_else)]
+#![feature(never_type)]
#![recursion_limit = "256"]
#[macro_use]
match $e {
Ok(e) => e,
Err(errs) => {
- for e in errs {
- $handler.emit_diagnostic(&e);
+ for mut e in errs {
+ $handler.emit_diagnostic(&mut e);
}
FatalError.raise()
}
fn file_to_source_file(sess: &ParseSess, path: &Path, spanopt: Option<Span>) -> Lrc<SourceFile> {
match try_file_to_source_file(sess, path, spanopt) {
Ok(source_file) => source_file,
- Err(d) => {
- sess.span_diagnostic.emit_diagnostic(&d);
+ Err(mut d) => {
+ sess.span_diagnostic.emit_diagnostic(&mut d);
FatalError.raise();
}
}
Nonterminal::NtMeta(ref attr) => convert_tokens(attr.tokens.as_ref()),
Nonterminal::NtPath(ref path) => convert_tokens(path.tokens.as_ref()),
Nonterminal::NtVis(ref vis) => convert_tokens(vis.tokens.as_ref()),
- Nonterminal::NtTT(ref tt) => Some(tt.clone().into()),
Nonterminal::NtExpr(ref expr) | Nonterminal::NtLiteral(ref expr) => {
prepend_attrs(&expr.attrs, expr.tokens.as_ref())
}
pub fn fake_token_stream_for_crate(sess: &ParseSess, krate: &ast::Crate) -> TokenStream {
let source = pprust::crate_to_string_for_macros(krate);
let filename = FileName::macro_expansion_source_code(&source);
- parse_stream_from_source_str(filename, source, sess, Some(krate.span))
+ parse_stream_from_source_str(filename, source, sess, Some(krate.spans.inner_span))
}
pub fn parse_cfg_attr(