From f786437bd223740d9767345731d458d10936f8d7 Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Wed, 13 May 2015 23:00:17 +0300 Subject: [PATCH] syntax: refactor (Span)Handler and ParseSess constructors to be methods. --- src/librustc/middle/astencode.rs | 2 +- src/librustc/session/config.rs | 2 +- src/librustc/session/mod.rs | 6 ++-- src/librustc_back/target/mod.rs | 2 +- src/librustc_driver/test.rs | 4 +-- src/librustc_trans/back/write.rs | 4 +-- src/librustdoc/core.rs | 4 +-- src/librustdoc/html/highlight.rs | 2 +- src/librustdoc/test.rs | 10 +++--- src/libsyntax/diagnostic.rs | 40 +++++++++++------------- src/libsyntax/ext/expand.rs | 8 ++--- src/libsyntax/parse/lexer/mod.rs | 4 +-- src/libsyntax/parse/mod.rs | 26 +++++++-------- src/libsyntax/util/parser_testing.rs | 7 ++--- src/test/compile-fail-fulldeps/qquote.rs | 2 +- src/test/run-fail-fulldeps/qquote.rs | 2 +- src/test/run-pass-fulldeps/qquote.rs | 2 +- 17 files changed, 62 insertions(+), 65 deletions(-) diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 4bfc4c5b850f..328972c54e37 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -1866,7 +1866,7 @@ impl FakeExtCtxt for parse::ParseSess { #[cfg(test)] fn mk_ctxt() -> parse::ParseSess { - parse::new_parse_sess() + parse::ParseSess::new() } #[cfg(test)] diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index b999929c4af9..48fe574e71f4 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -852,7 +852,7 @@ pub fn parse_cfgspecs(cfgspecs: Vec ) -> ast::CrateConfig { parse::parse_meta_from_source_str("cfgspec".to_string(), s.to_string(), Vec::new(), - &parse::new_parse_sess()) + &parse::ParseSess::new()) }).collect::() } diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index d2b0ba70367a..f7c0745bac18 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -368,9 +368,9 @@ pub fn build_session(sopts: config::Options, let codemap = codemap::CodeMap::new(); let diagnostic_handler = - diagnostic::default_handler(sopts.color, Some(registry), can_print_warnings); + diagnostic::Handler::new(sopts.color, Some(registry), can_print_warnings); let span_diagnostic_handler = - diagnostic::mk_span_handler(diagnostic_handler, codemap); + diagnostic::SpanHandler::new(diagnostic_handler, codemap); build_session_(sopts, local_crate_source_file, span_diagnostic_handler) } @@ -387,7 +387,7 @@ pub fn build_session_(sopts: config::Options, } }; let target_cfg = config::build_target_config(&sopts, &span_diagnostic); - let p_s = parse::new_parse_sess_special_handler(span_diagnostic); + let p_s = parse::ParseSess::with_span_handler(span_diagnostic); let default_sysroot = match sopts.maybe_sysroot { Some(_) => None, None => Some(filesearch::get_or_default_sysroot()) diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs index c5f1882fa1dd..811d59d67485 100644 --- a/src/librustc_back/target/mod.rs +++ b/src/librustc_back/target/mod.rs @@ -218,7 +218,7 @@ impl Target { // this is 1. ugly, 2. error prone. - let handler = diagnostic::default_handler(diagnostic::Auto, None, true); + let handler = diagnostic::Handler::new(diagnostic::Auto, None, true); let get_req_field = |name: &str| { match obj.find(name) diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs index a8cf75331799..b53f2b1dcfa6 100644 --- a/src/librustc_driver/test.rs +++ b/src/librustc_driver/test.rs @@ -105,9 +105,9 @@ fn test_env(source_string: &str, let codemap = CodeMap::new(); let diagnostic_handler = - diagnostic::mk_handler(true, emitter); + diagnostic::Handler::with_emitter(true, emitter); let span_diagnostic_handler = - diagnostic::mk_span_handler(diagnostic_handler, codemap); + diagnostic::SpanHandler::new(diagnostic_handler, codemap); let sess = session::build_session_(options, None, span_diagnostic_handler); rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess)); diff --git a/src/librustc_trans/back/write.rs b/src/librustc_trans/back/write.rs index a10ff71a8f68..a9e9e3f4048a 100644 --- a/src/librustc_trans/back/write.rs +++ b/src/librustc_trans/back/write.rs @@ -21,7 +21,7 @@ use util::common::time; use util::common::path2cstr; use syntax::codemap; use syntax::diagnostic; -use syntax::diagnostic::{Emitter, Handler, Level, mk_handler}; +use syntax::diagnostic::{Emitter, Handler, Level}; use std::ffi::{CStr, CString}; use std::fs; @@ -928,7 +928,7 @@ fn run_work_multithreaded(sess: &Session, futures.push(rx); thread::Builder::new().name(format!("codegen-{}", i)).spawn(move || { - let diag_handler = mk_handler(true, box diag_emitter); + let diag_handler = Handler::with_emitter(true, box diag_emitter); // Must construct cgcx inside the proc because it has non-Send // fields. diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index 1b74123c4adc..f7757b9fee75 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -110,9 +110,9 @@ pub fn run_core(search_paths: SearchPaths, cfgs: Vec, externs: Externs, }; let codemap = codemap::CodeMap::new(); - let diagnostic_handler = diagnostic::default_handler(diagnostic::Auto, None, true); + let diagnostic_handler = diagnostic::Handler::new(diagnostic::Auto, None, true); let span_diagnostic_handler = - diagnostic::mk_span_handler(diagnostic_handler, codemap); + diagnostic::SpanHandler::new(diagnostic_handler, codemap); let sess = session::build_session_(sessopts, cpath, span_diagnostic_handler); diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs index d19ccabed478..61db84098377 100644 --- a/src/librustdoc/html/highlight.rs +++ b/src/librustdoc/html/highlight.rs @@ -24,7 +24,7 @@ use syntax::parse; /// Highlights some source code, returning the HTML output. pub fn highlight(src: &str, class: Option<&str>, id: Option<&str>) -> String { debug!("highlighting: ================\n{}\n==============", src); - let sess = parse::new_parse_sess(); + let sess = parse::ParseSess::new(); let fm = parse::string_to_filemap(&sess, src.to_string(), "".to_string()); diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs index f8c2626d09e3..8e2a3e6fcc3a 100644 --- a/src/librustdoc/test.rs +++ b/src/librustdoc/test.rs @@ -65,9 +65,9 @@ pub fn run(input: &str, }; let codemap = CodeMap::new(); - let diagnostic_handler = diagnostic::default_handler(diagnostic::Auto, None, true); + let diagnostic_handler = diagnostic::Handler::new(diagnostic::Auto, None, true); let span_diagnostic_handler = - diagnostic::mk_span_handler(diagnostic_handler, codemap); + diagnostic::SpanHandler::new(diagnostic_handler, codemap); let sess = session::build_session_(sessopts, Some(input_path.clone()), @@ -184,7 +184,7 @@ fn runtest(test: &str, cratename: &str, libs: SearchPaths, // it with a sink that is also passed to rustc itself. When this function // returns the output of the sink is copied onto the output of our own thread. // - // The basic idea is to not use a default_handler() for rustc, and then also + // The basic idea is to not use a default Handler for rustc, and then also // not print things by default to the actual stderr. struct Sink(Arc>>); impl Write for Sink { @@ -206,9 +206,9 @@ fn runtest(test: &str, cratename: &str, libs: SearchPaths, // Compile the code let codemap = CodeMap::new(); - let diagnostic_handler = diagnostic::mk_handler(true, box emitter); + let diagnostic_handler = diagnostic::Handler::with_emitter(true, box emitter); let span_diagnostic_handler = - diagnostic::mk_span_handler(diagnostic_handler, codemap); + diagnostic::SpanHandler::new(diagnostic_handler, codemap); let sess = session::build_session_(sessopts, None, diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 66ddd73101e2..02ad00bc7382 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -122,6 +122,12 @@ pub struct SpanHandler { } impl SpanHandler { + pub fn new(handler: Handler, cm: codemap::CodeMap) -> SpanHandler { + SpanHandler { + handler: handler, + cm: cm, + } + } pub fn span_fatal(&self, sp: Span, msg: &str) -> FatalError { self.handler.emit(Some((&self.cm, sp)), msg, Fatal); return FatalError; @@ -187,6 +193,19 @@ pub struct Handler { } impl Handler { + pub fn new(color_config: ColorConfig, + registry: Option, + can_emit_warnings: bool) -> Handler { + let emitter = Box::new(EmitterWriter::stderr(color_config, registry)); + Handler::with_emitter(can_emit_warnings, emitter) + } + pub fn with_emitter(can_emit_warnings: bool, e: Box) -> Handler { + Handler { + err_count: Cell::new(0), + emit: RefCell::new(e), + can_emit_warnings: can_emit_warnings + } + } pub fn fatal(&self, msg: &str) -> ! { self.emit.borrow_mut().emit(None, msg, None, Fatal); panic!(FatalError); @@ -254,27 +273,6 @@ impl Handler { } } -pub fn mk_span_handler(handler: Handler, cm: codemap::CodeMap) -> SpanHandler { - SpanHandler { - handler: handler, - cm: cm, - } -} - -pub fn default_handler(color_config: ColorConfig, - registry: Option, - can_emit_warnings: bool) -> Handler { - mk_handler(can_emit_warnings, Box::new(EmitterWriter::stderr(color_config, registry))) -} - -pub fn mk_handler(can_emit_warnings: bool, e: Box) -> Handler { - Handler { - err_count: Cell::new(0), - emit: RefCell::new(e), - can_emit_warnings: can_emit_warnings - } -} - #[derive(Copy, PartialEq, Clone, Debug)] pub enum Level { Bug, diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index fae0b56ce3d0..484684a87f4c 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -1684,7 +1684,7 @@ mod tests { #[test] fn macros_cant_escape_fns_test () { let src = "fn bogus() {macro_rules! z (() => (3+4));}\ fn inty() -> i32 { z!() }".to_string(); - let sess = parse::new_parse_sess(); + let sess = parse::ParseSess::new(); let crate_ast = parse::parse_crate_from_source_str( "".to_string(), src, @@ -1698,7 +1698,7 @@ mod tests { #[test] fn macros_cant_escape_mods_test () { let src = "mod foo {macro_rules! z (() => (3+4));}\ fn inty() -> i32 { z!() }".to_string(); - let sess = parse::new_parse_sess(); + let sess = parse::ParseSess::new(); let crate_ast = parse::parse_crate_from_source_str( "".to_string(), src, @@ -1710,7 +1710,7 @@ mod tests { #[test] fn macros_can_escape_flattened_mods_test () { let src = "#[macro_use] mod foo {macro_rules! z (() => (3+4));}\ fn inty() -> i32 { z!() }".to_string(); - let sess = parse::new_parse_sess(); + let sess = parse::ParseSess::new(); let crate_ast = parse::parse_crate_from_source_str( "".to_string(), src, @@ -1719,7 +1719,7 @@ mod tests { } fn expand_crate_str(crate_str: String) -> ast::Crate { - let ps = parse::new_parse_sess(); + let ps = parse::ParseSess::new(); let crate_ast = panictry!(string_to_parser(&ps, crate_str).parse_crate_mod()); // the cfg argument actually does matter, here... expand_crate(&ps,test_ecfg(),vec!(),vec!(),crate_ast) diff --git a/src/libsyntax/parse/lexer/mod.rs b/src/libsyntax/parse/lexer/mod.rs index 6b0674c9a41b..9ced0d5d96e3 100644 --- a/src/libsyntax/parse/lexer/mod.rs +++ b/src/libsyntax/parse/lexer/mod.rs @@ -1406,8 +1406,8 @@ mod tests { fn mk_sh() -> diagnostic::SpanHandler { // FIXME (#22405): Replace `Box::new` with `box` here when/if possible. let emitter = diagnostic::EmitterWriter::new(Box::new(io::sink()), None); - let handler = diagnostic::mk_handler(true, Box::new(emitter)); - diagnostic::mk_span_handler(handler, CodeMap::new()) + let handler = diagnostic::Handler::with_emitter(true, Box::new(emitter)); + diagnostic::SpanHandler::new(handler, CodeMap::new()) } // open a string reader for the given string diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index e207b197e832..21253982e51d 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -12,7 +12,7 @@ use ast; use codemap::{Span, CodeMap, FileMap}; -use diagnostic::{SpanHandler, mk_span_handler, default_handler, Auto, FatalError}; +use diagnostic::{SpanHandler, Handler, Auto, FatalError}; use parse::attr::ParserAttr; use parse::parser::Parser; use ptr::P; @@ -46,17 +46,17 @@ pub struct ParseSess { included_mod_stack: RefCell>, } -pub fn new_parse_sess() -> ParseSess { - ParseSess { - span_diagnostic: mk_span_handler(default_handler(Auto, None, true), CodeMap::new()), - included_mod_stack: RefCell::new(Vec::new()), +impl ParseSess { + pub fn new() -> ParseSess { + let handler = SpanHandler::new(Handler::new(Auto, None, true), CodeMap::new()); + ParseSess::with_span_handler(handler) } -} -pub fn new_parse_sess_special_handler(sh: SpanHandler) -> ParseSess { - ParseSess { - span_diagnostic: sh, - included_mod_stack: RefCell::new(Vec::new()), + pub fn with_span_handler(sh: SpanHandler) -> ParseSess { + ParseSess { + span_diagnostic: sh, + included_mod_stack: RefCell::new(vec![]) + } } } @@ -886,7 +886,7 @@ mod tests { } #[test] fn parse_ident_pat () { - let sess = new_parse_sess(); + let sess = ParseSess::new(); let mut parser = string_to_parser(&sess, "b".to_string()); assert!(panictry!(parser.parse_pat_nopanic()) == P(ast::Pat{ @@ -1067,7 +1067,7 @@ mod tests { } #[test] fn crlf_doc_comments() { - let sess = new_parse_sess(); + let sess = ParseSess::new(); let name = "".to_string(); let source = "/// doc comment\r\nfn foo() {}".to_string(); @@ -1090,7 +1090,7 @@ mod tests { #[test] fn ttdelim_span() { - let sess = parse::new_parse_sess(); + let sess = ParseSess::new(); let expr = parse::parse_expr_from_source_str("foo".to_string(), "foo!( fn main() { body } )".to_string(), vec![], &sess); diff --git a/src/libsyntax/util/parser_testing.rs b/src/libsyntax/util/parser_testing.rs index 929f2a6abd6b..1ecfe9c96f4c 100644 --- a/src/libsyntax/util/parser_testing.rs +++ b/src/libsyntax/util/parser_testing.rs @@ -9,7 +9,6 @@ // except according to those terms. use ast; -use parse::new_parse_sess; use parse::{ParseSess,string_to_filemap,filemap_to_tts}; use parse::new_parser_from_source_str; use parse::parser::Parser; @@ -19,7 +18,7 @@ use str::char_at; /// Map a string to tts, using a made-up filename: pub fn string_to_tts(source_str: String) -> Vec { - let ps = new_parse_sess(); + let ps = ParseSess::new(); filemap_to_tts(&ps, string_to_filemap(&ps, source_str, "bogofile".to_string())) } @@ -35,7 +34,7 @@ pub fn string_to_parser<'a>(ps: &'a ParseSess, source_str: String) -> Parser<'a> fn with_error_checking_parse(s: String, f: F) -> T where F: FnOnce(&mut Parser) -> T, { - let ps = new_parse_sess(); + let ps = ParseSess::new(); let mut p = string_to_parser(&ps, s); let x = f(&mut p); p.abort_if_errors(); @@ -75,7 +74,7 @@ pub fn string_to_stmt(source_str : String) -> P { pub fn string_to_pat(source_str: String) -> P { // Binding `sess` and `parser` works around dropck-injected // region-inference issues; see #25212, #22323, #22321. - let sess = new_parse_sess(); + let sess = ParseSess::new(); let mut parser = string_to_parser(&sess, source_str); parser.parse_pat() } diff --git a/src/test/compile-fail-fulldeps/qquote.rs b/src/test/compile-fail-fulldeps/qquote.rs index cf68efe5855b..c83a154056ba 100644 --- a/src/test/compile-fail-fulldeps/qquote.rs +++ b/src/test/compile-fail-fulldeps/qquote.rs @@ -20,7 +20,7 @@ use syntax::parse; use syntax::print::pprust; fn main() { - let ps = syntax::parse::new_parse_sess(); + let ps = syntax::parse::ParseSess::new(); let mut cx = syntax::ext::base::ExtCtxt::new( &ps, vec![], syntax::ext::expand::ExpansionConfig::default("qquote".to_string())); diff --git a/src/test/run-fail-fulldeps/qquote.rs b/src/test/run-fail-fulldeps/qquote.rs index 6ae22392b939..4251579bbdcd 100644 --- a/src/test/run-fail-fulldeps/qquote.rs +++ b/src/test/run-fail-fulldeps/qquote.rs @@ -22,7 +22,7 @@ use syntax::parse; use syntax::print::pprust; fn main() { - let ps = syntax::parse::new_parse_sess(); + let ps = syntax::parse::ParseSess::new(); let mut cx = syntax::ext::base::ExtCtxt::new( &ps, vec![], syntax::ext::expand::ExpansionConfig::default("qquote".to_string())); diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs index ceface384847..6670f200ba71 100644 --- a/src/test/run-pass-fulldeps/qquote.rs +++ b/src/test/run-pass-fulldeps/qquote.rs @@ -18,7 +18,7 @@ use syntax::codemap::DUMMY_SP; use syntax::print::pprust::*; fn main() { - let ps = syntax::parse::new_parse_sess(); + let ps = syntax::parse::ParseSess::new(); let mut cx = syntax::ext::base::ExtCtxt::new( &ps, vec![], syntax::ext::expand::ExpansionConfig::default("qquote".to_string()));