Skip to content

Commit

Permalink
syntax: refactor (Span)Handler and ParseSess constructors to be methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
eddyb committed May 13, 2015
1 parent 6a045b9 commit f786437
Show file tree
Hide file tree
Showing 17 changed files with 62 additions and 65 deletions.
2 changes: 1 addition & 1 deletion src/librustc/middle/astencode.rs
Expand Up @@ -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)]
Expand Down
2 changes: 1 addition & 1 deletion src/librustc/session/config.rs
Expand Up @@ -852,7 +852,7 @@ pub fn parse_cfgspecs(cfgspecs: Vec<String> ) -> ast::CrateConfig {
parse::parse_meta_from_source_str("cfgspec".to_string(),
s.to_string(),
Vec::new(),
&parse::new_parse_sess())
&parse::ParseSess::new())
}).collect::<ast::CrateConfig>()
}

Expand Down
6 changes: 3 additions & 3 deletions src/librustc/session/mod.rs
Expand Up @@ -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)
}
Expand All @@ -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())
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_back/target/mod.rs
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_driver/test.rs
Expand Up @@ -105,9 +105,9 @@ fn test_env<F>(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));
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_trans/back/write.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions src/librustdoc/core.rs
Expand Up @@ -110,9 +110,9 @@ pub fn run_core(search_paths: SearchPaths, cfgs: Vec<String>, 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);
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/html/highlight.rs
Expand Up @@ -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(),
"<stdin>".to_string());
Expand Down
10 changes: 5 additions & 5 deletions src/librustdoc/test.rs
Expand Up @@ -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()),
Expand Down Expand Up @@ -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<Mutex<Vec<u8>>>);
impl Write for Sink {
Expand All @@ -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,
Expand Down
40 changes: 19 additions & 21 deletions src/libsyntax/diagnostic.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -187,6 +193,19 @@ pub struct Handler {
}

impl Handler {
pub fn new(color_config: ColorConfig,
registry: Option<diagnostics::registry::Registry>,
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<Emitter + Send>) -> 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);
Expand Down Expand Up @@ -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<diagnostics::registry::Registry>,
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<Emitter + Send>) -> 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,
Expand Down
8 changes: 4 additions & 4 deletions src/libsyntax/ext/expand.rs
Expand Up @@ -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(
"<test>".to_string(),
src,
Expand All @@ -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(
"<test>".to_string(),
src,
Expand All @@ -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(
"<test>".to_string(),
src,
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions src/libsyntax/parse/lexer/mod.rs
Expand Up @@ -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
Expand Down
26 changes: 13 additions & 13 deletions src/libsyntax/parse/mod.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -46,17 +46,17 @@ pub struct ParseSess {
included_mod_stack: RefCell<Vec<PathBuf>>,
}

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![])
}
}
}

Expand Down Expand Up @@ -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{
Expand Down Expand Up @@ -1067,7 +1067,7 @@ mod tests {
}

#[test] fn crlf_doc_comments() {
let sess = new_parse_sess();
let sess = ParseSess::new();

let name = "<source>".to_string();
let source = "/// doc comment\r\nfn foo() {}".to_string();
Expand All @@ -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);

Expand Down
7 changes: 3 additions & 4 deletions src/libsyntax/util/parser_testing.rs
Expand Up @@ -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;
Expand All @@ -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<ast::TokenTree> {
let ps = new_parse_sess();
let ps = ParseSess::new();
filemap_to_tts(&ps,
string_to_filemap(&ps, source_str, "bogofile".to_string()))
}
Expand All @@ -35,7 +34,7 @@ pub fn string_to_parser<'a>(ps: &'a ParseSess, source_str: String) -> Parser<'a>
fn with_error_checking_parse<T, F>(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();
Expand Down Expand Up @@ -75,7 +74,7 @@ pub fn string_to_stmt(source_str : String) -> P<ast::Stmt> {
pub fn string_to_pat(source_str: String) -> P<ast::Pat> {
// 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()
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/compile-fail-fulldeps/qquote.rs
Expand Up @@ -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()));
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-fail-fulldeps/qquote.rs
Expand Up @@ -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()));
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass-fulldeps/qquote.rs
Expand Up @@ -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()));
Expand Down

0 comments on commit f786437

Please sign in to comment.