diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2012-08-24 15:28:43 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2012-08-24 15:51:16 -0700 |
| commit | c284b8b1dc348ab8b9c82350dd1b4e53fac1225c (patch) | |
| tree | 99de39b149969275f6f9ddebd7a9f555d91c5bff /src/rustc/driver | |
| parent | a8f1bee4574b8427a052e2fad93a90839288584b (diff) | |
| download | rust-c284b8b1dc348ab8b9c82350dd1b4e53fac1225c.tar.gz rust-c284b8b1dc348ab8b9c82350dd1b4e53fac1225c.zip | |
Start using core::path2::Path in a lot of places.
Diffstat (limited to 'src/rustc/driver')
| -rw-r--r-- | src/rustc/driver/driver.rs | 65 | ||||
| -rw-r--r-- | src/rustc/driver/rustc.rs | 8 | ||||
| -rw-r--r-- | src/rustc/driver/session.rs | 6 |
3 files changed, 39 insertions, 40 deletions
diff --git a/src/rustc/driver/driver.rs b/src/rustc/driver/driver.rs index 087c6c3b833..c1a371af4dd 100644 --- a/src/rustc/driver/driver.rs +++ b/src/rustc/driver/driver.rs @@ -27,7 +27,7 @@ fn anon_src() -> ~str { ~"<anon>" } fn source_name(input: input) -> ~str { match input { - file_input(ifile) => ifile, + file_input(ifile) => ifile.to_str(), str_input(_) => anon_src() } } @@ -92,7 +92,7 @@ fn parse_cfgspecs(cfgspecs: ~[~str]) -> ast::crate_cfg { enum input { /// Load source from file - file_input(~str), + file_input(Path), /// The string is the source str_input(~str) } @@ -101,7 +101,7 @@ fn parse_input(sess: session, cfg: ast::crate_cfg, input: input) -> @ast::crate { match input { file_input(file) => { - parse::parse_crate_from_file(file, cfg, sess.parse_sess) + parse::parse_crate_from_file(&file, cfg, sess.parse_sess) } str_input(src) => { // FIXME (#2319): Don't really want to box the source string @@ -236,11 +236,13 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg, vtable_map: vtable_map}; let (llmod, link_meta) = time(time_passes, ~"translation", || - trans::base::trans_crate(sess, crate, ty_cx, outputs.obj_filename, + trans::base::trans_crate(sess, crate, ty_cx, + &outputs.obj_filename, exp_map, exp_map2, maps)); time(time_passes, ~"LLVM passes", || - link::write::run_passes(sess, llmod, outputs.obj_filename)); + link::write::run_passes(sess, llmod, + &outputs.obj_filename)); let stop_after_codegen = sess.opts.output_type != link::output_type_exe || @@ -249,14 +251,15 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg, if stop_after_codegen { return {crate: crate, tcx: some(ty_cx)}; } time(time_passes, ~"linking", || - link::link_binary(sess, outputs.obj_filename, - outputs.out_filename, link_meta)); + link::link_binary(sess, + &outputs.obj_filename, + &outputs.out_filename, link_meta)); return {crate: crate, tcx: some(ty_cx)}; } fn compile_input(sess: session, cfg: ast::crate_cfg, input: input, - outdir: option<~str>, output: option<~str>) { + outdir: &option<Path>, output: &option<Path>) { let upto = if sess.opts.parse_only { cu_parse } else if sess.opts.no_trans { cu_no_trans } @@ -483,6 +486,7 @@ fn build_session_options(matches: getopts::matches, let extra_debuginfo = opt_present(matches, ~"xg"); let debuginfo = opt_present(matches, ~"g") || extra_debuginfo; let sysroot_opt = getopts::opt_maybe_str(matches, ~"sysroot"); + let sysroot_opt = option::map(sysroot_opt, |m| Path(m)); let target_opt = getopts::opt_maybe_str(matches, ~"target"); let save_temps = getopts::opt_present(matches, ~"save-temps"); match output_type { @@ -514,7 +518,9 @@ fn build_session_options(matches: getopts::matches, some(s) => s }; - let addl_lib_search_paths = getopts::opt_strs(matches, ~"L"); + let addl_lib_search_paths = + getopts::opt_strs(matches, ~"L") + .map(|s| Path(s)); let cfg = parse_cfgspecs(getopts::opt_strs(matches, ~"cfg")); let test = opt_present(matches, ~"test"); let sopts: @session::options = @@ -614,11 +620,11 @@ fn opts() -> ~[getopts::opt] { optflag(~"static"), optflag(~"gc")]; } -type output_filenames = @{out_filename: ~str, obj_filename:~str}; +type output_filenames = @{out_filename:Path, obj_filename:Path}; fn build_output_filenames(input: input, - odir: option<~str>, - ofile: option<~str>, + odir: &option<Path>, + ofile: &option<Path>, sess: session) -> output_filenames { let obj_path; @@ -639,37 +645,30 @@ fn build_output_filenames(input: input, link::output_type_object | link::output_type_exe => ~"o" }; - match ofile { + match *ofile { none => { // "-" as input file will cause the parser to read from stdin so we // have to make up a name // We want to toss everything after the final '.' - let dirname = match odir { + let dirpath = match *odir { some(d) => d, none => match input { str_input(_) => os::getcwd(), - file_input(ifile) => path::dirname(ifile) + file_input(ifile) => ifile.dir_path() } }; - let base_filename = match input { - file_input(ifile) => { - let (path, _) = path::splitext(ifile); - path::basename(path) - } + let stem = match input { + file_input(ifile) => option::get(ifile.filestem()), str_input(_) => ~"rust_out" }; - let base_path = path::connect(dirname, base_filename); - if sess.building_library { - let basename = path::basename(base_path); - let dylibname = os::dll_filename(basename); - out_path = path::connect(dirname, dylibname); - obj_path = path::connect(dirname, basename + ~"." + obj_suffix); + out_path = dirpath.push(os::dll_filename(stem)); + obj_path = dirpath.push(stem).with_filetype(obj_suffix); } else { - out_path = base_path; - obj_path = base_path + ~"." + obj_suffix; + out_path = dirpath.push(stem); + obj_path = dirpath.push(stem).with_filetype(obj_suffix); } } @@ -678,9 +677,7 @@ fn build_output_filenames(input: input, obj_path = if stop_after_codegen { out_file } else { - let (base, _) = path::splitext(out_file); - let modified = base + ~"." + obj_suffix; - modified + out_file.with_filetype(obj_suffix) }; if sess.building_library { @@ -690,13 +687,13 @@ fn build_output_filenames(input: input, // lib<basename>-<hash>-<version>.so no matter what. } - if odir != none { + if *odir != none { sess.warn(~"ignoring --out-dir flag due to -o flag."); } } } return @{out_filename: out_path, - obj_filename: obj_path}; + obj_filename: obj_path}; } fn early_error(emitter: diagnostic::emitter, msg: ~str) -> ! { @@ -704,7 +701,7 @@ fn early_error(emitter: diagnostic::emitter, msg: ~str) -> ! { fail; } -fn list_metadata(sess: session, path: ~str, out: io::Writer) { +fn list_metadata(sess: session, path: &Path, out: io::Writer) { metadata::loader::list_file_metadata( sess.parse_sess.interner, session::sess_os_to_meta_os(sess.targ_cfg.os), path, out); diff --git a/src/rustc/driver/rustc.rs b/src/rustc/driver/rustc.rs index 0770a132a1d..e26465fce5d 100644 --- a/src/rustc/driver/rustc.rs +++ b/src/rustc/driver/rustc.rs @@ -159,7 +159,7 @@ fn run_compiler(args: ~[~str], demitter: diagnostic::emitter) { let src = str::from_bytes(io::stdin().read_whole_stream()); str_input(src) } else { - file_input(ifile) + file_input(Path(ifile)) } } _ => early_error(demitter, ~"multiple input filenames provided") @@ -168,7 +168,9 @@ fn run_compiler(args: ~[~str], demitter: diagnostic::emitter) { let sopts = build_session_options(matches, demitter); let sess = build_session(sopts, demitter); let odir = getopts::opt_maybe_str(matches, ~"out-dir"); + let odir = option::map(odir, |o| Path(o)); let ofile = getopts::opt_maybe_str(matches, ~"o"); + let ofile = option::map(ofile, |o| Path(o)); let cfg = build_configuration(sess, binary, input); let pretty = option::map(getopts::opt_default(matches, ~"pretty", @@ -185,7 +187,7 @@ fn run_compiler(args: ~[~str], demitter: diagnostic::emitter) { if ls { match input { file_input(ifile) => { - list_metadata(sess, ifile, io::stdout()); + list_metadata(sess, &ifile, io::stdout()); } str_input(_) => { early_error(demitter, ~"can not list metadata for stdin"); @@ -194,7 +196,7 @@ fn run_compiler(args: ~[~str], demitter: diagnostic::emitter) { return; } - compile_input(sess, cfg, input, odir, ofile); + compile_input(sess, cfg, input, &odir, &ofile); } /* diff --git a/src/rustc/driver/session.rs b/src/rustc/driver/session.rs index cd663c06ce7..10c0f283525 100644 --- a/src/rustc/driver/session.rs +++ b/src/rustc/driver/session.rs @@ -89,8 +89,8 @@ type options = lint_opts: ~[(lint::lint, lint::level)], save_temps: bool, output_type: back::link::output_type, - addl_lib_search_paths: ~[~str], - maybe_sysroot: option<~str>, + addl_lib_search_paths: ~[Path], + maybe_sysroot: option<Path>, target_triple: ~str, cfg: ast::crate_cfg, test: bool, @@ -111,7 +111,7 @@ type session_ = {targ_cfg: @config, span_diagnostic: diagnostic::span_handler, filesearch: filesearch::filesearch, mut building_library: bool, - working_dir: ~str, + working_dir: Path, lint_settings: lint::lint_settings}; enum session { |
