From ea7cf904b09a9a6dabb035d2bde4ef236d39144a Mon Sep 17 00:00:00 2001 From: mitaa Date: Thu, 10 Mar 2016 04:49:40 +0100 Subject: [PATCH] Allow custom filenames for anonymous inputs --- src/librustc/session/config.rs | 10 +++++++--- src/librustc_driver/driver.rs | 9 ++++----- src/librustc_driver/lib.rs | 11 ++++++----- src/librustc_driver/test.rs | 5 ++++- src/librustdoc/clean/mod.rs | 2 +- src/librustdoc/test.rs | 5 ++++- src/test/run-make/execution-engine/test.rs | 5 ++++- src/test/run-make/issue-19371/foo.rs | 4 ++-- 8 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 679da4abf5f..fbbca331a64 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -172,8 +172,12 @@ pub enum PrintRequest { pub enum Input { /// Load source from file File(PathBuf), - /// The string is the source - Str(String) + Str { + /// String that is shown in place of a filename + name: String, + /// Anonymous source string + input: String, + }, } impl Input { @@ -181,7 +185,7 @@ impl Input { match *self { Input::File(ref ifile) => ifile.file_stem().unwrap() .to_str().unwrap().to_string(), - Input::Str(_) => "rust_out".to_string(), + Input::Str { .. } => "rust_out".to_string(), } } } diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 55ec9d82a2e..6d9ff3f462e 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -231,7 +231,6 @@ pub fn compile_input(sess: &Session, Ok(()) } - /// The name used for source code that doesn't originate in a file /// (e.g. source from stdin or a string) pub fn anon_src() -> String { @@ -242,7 +241,7 @@ pub fn source_name(input: &Input) -> String { match *input { // FIXME (#9639): This needs to handle non-utf8 paths Input::File(ref ifile) => ifile.to_str().unwrap().to_string(), - Input::Str(_) => anon_src(), + Input::Str { ref name, .. } => name.clone(), } } @@ -434,9 +433,9 @@ pub fn phase_1_parse_input<'a>(sess: &'a Session, Input::File(ref file) => { parse::parse_crate_from_file(file, cfg.clone(), &sess.parse_sess) } - Input::Str(ref src) => { - parse::parse_crate_from_source_str(anon_src().to_string(), - src.to_string(), + Input::Str { ref input, ref name } => { + parse::parse_crate_from_source_str(name.clone(), + input.clone(), cfg.clone(), &sess.parse_sess) } diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index d1c287b1e39..357c7238c1f 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -223,7 +223,8 @@ fn make_input(free_matches: &[String]) -> Option<(Input, Option)> { if ifile == "-" { let mut src = String::new(); io::stdin().read_to_string(&mut src).unwrap(); - Some((Input::Str(src), None)) + Some((Input::Str { name: driver::anon_src(), input: src }, + None)) } else { Some((Input::File(PathBuf::from(ifile)), Some(PathBuf::from(ifile)))) @@ -511,7 +512,7 @@ impl RustcDefaultCalls { .unwrap(); println!("{}", String::from_utf8(v).unwrap()); } - &Input::Str(_) => { + &Input::Str { .. } => { early_error(ErrorOutputType::default(), "cannot list metadata for stdin"); } } @@ -994,9 +995,9 @@ fn parse_crate_attrs<'a>(sess: &'a Session, input: &Input) -> PResult<'a, Vec { parse::parse_crate_attrs_from_file(ifile, Vec::new(), &sess.parse_sess) } - Input::Str(ref src) => { - parse::parse_crate_attrs_from_source_str(driver::anon_src().to_string(), - src.to_string(), + Input::Str { ref name, ref input } => { + parse::parse_crate_attrs_from_source_str(name.clone(), + input.clone(), Vec::new(), &sess.parse_sess) } diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs index 5c3c5beafad..9fbdaed4774 100644 --- a/src/librustc_driver/test.rs +++ b/src/librustc_driver/test.rs @@ -113,7 +113,10 @@ fn test_env(source_string: &str, Rc::new(CodeMap::new()), cstore.clone()); rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess)); let krate_config = Vec::new(); - let input = config::Input::Str(source_string.to_string()); + let input = config::Input::Str { + name: driver::anon_src(), + input: source_string.to_string(), + }; let krate = driver::phase_1_parse_input(&sess, krate_config, &input).unwrap(); let krate = driver::phase_2_configure_and_expand(&sess, &cstore, krate, "test", None) .expect("phase 2 aborted"); diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 6c9ee528782..4f0808e81a0 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -205,7 +205,7 @@ impl<'a, 'tcx> Clean for visit_ast::RustdocVisitor<'a, 'tcx> { current_dir().unwrap().join(path) } }, - Input::Str(_) => PathBuf::new() // FIXME: this is wrong + Input::Str { ref name, .. } => PathBuf::from(name.clone()), }; Crate { diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs index 6294b676651..8c752a01496 100644 --- a/src/librustdoc/test.rs +++ b/src/librustdoc/test.rs @@ -182,7 +182,10 @@ fn runtest(test: &str, cratename: &str, cfgs: Vec, libs: SearchPaths, // the test harness wants its own `main` & top level functions, so // never wrap the test in `fn main() { ... }` let test = maketest(test, Some(cratename), as_test_harness, opts); - let input = config::Input::Str(test.to_string()); + let input = config::Input::Str { + name: driver::anon_src(), + input: test.to_owned(), + }; let mut outputs = HashMap::new(); outputs.insert(OutputType::Exe, None); diff --git a/src/test/run-make/execution-engine/test.rs b/src/test/run-make/execution-engine/test.rs index 29063c5a607..4ff531d4755 100644 --- a/src/test/run-make/execution-engine/test.rs +++ b/src/test/run-make/execution-engine/test.rs @@ -216,7 +216,10 @@ fn build_exec_options(sysroot: PathBuf) -> Options { /// for crates used in the given input. fn compile_program(input: &str, sysroot: PathBuf) -> Option<(llvm::ModuleRef, Vec)> { - let input = Input::Str(input.to_string()); + let input = Input::Str { + name: driver::anon_src(), + input: input.to_string(), + }; let thread = Builder::new().name("compile_program".to_string()); let handle = thread.spawn(move || { diff --git a/src/test/run-make/issue-19371/foo.rs b/src/test/run-make/issue-19371/foo.rs index 43ae356feed..80c06ca3274 100644 --- a/src/test/run-make/issue-19371/foo.rs +++ b/src/test/run-make/issue-19371/foo.rs @@ -18,7 +18,7 @@ extern crate syntax; use rustc::session::{build_session, Session}; use rustc::session::config::{basic_options, build_configuration, Input, OutputType}; -use rustc_driver::driver::{compile_input, CompileController}; +use rustc_driver::driver::{compile_input, CompileController, anon_src}; use rustc_metadata::cstore::CStore; use syntax::diagnostics::registry::Registry; use syntax::parse::token; @@ -67,7 +67,7 @@ fn compile(code: String, output: PathBuf, sysroot: PathBuf) { compile_input(&sess, &cstore, cfg, - &Input::Str(code), + &Input::Str { name: anon_src(), input: code }, &None, &Some(output), None,