mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
De-@ Session usage.
This commit is contained in:
parent
eb68beec4b
commit
4fae06824c
@ -28,8 +28,8 @@ use syntax::abi;
|
||||
|
||||
pub static METADATA_FILENAME: &'static str = "rust.metadata.bin";
|
||||
|
||||
pub struct Archive {
|
||||
priv sess: Session,
|
||||
pub struct Archive<'a> {
|
||||
priv sess: &'a Session,
|
||||
priv dst: Path,
|
||||
}
|
||||
|
||||
@ -37,8 +37,8 @@ pub struct ArchiveRO {
|
||||
priv ptr: ArchiveRef,
|
||||
}
|
||||
|
||||
fn run_ar(sess: Session, args: &str, cwd: Option<&Path>,
|
||||
paths: &[&Path]) -> ProcessOutput {
|
||||
fn run_ar(sess: &Session, args: &str, cwd: Option<&Path>,
|
||||
paths: &[&Path]) -> ProcessOutput {
|
||||
let ar = get_ar_prog(sess);
|
||||
|
||||
let mut args = vec!(args.to_owned());
|
||||
@ -74,16 +74,16 @@ fn run_ar(sess: Session, args: &str, cwd: Option<&Path>,
|
||||
}
|
||||
}
|
||||
|
||||
impl Archive {
|
||||
impl<'a> Archive<'a> {
|
||||
/// Initializes a new static archive with the given object file
|
||||
pub fn create<'a>(sess: Session, dst: &'a Path,
|
||||
initial_object: &'a Path) -> Archive {
|
||||
pub fn create<'b>(sess: &'a Session, dst: &'b Path,
|
||||
initial_object: &'b Path) -> Archive<'a> {
|
||||
run_ar(sess, "crus", None, [dst, initial_object]);
|
||||
Archive { sess: sess, dst: dst.clone() }
|
||||
}
|
||||
|
||||
/// Opens an existing static archive
|
||||
pub fn open(sess: Session, dst: Path) -> Archive {
|
||||
pub fn open(sess: &'a Session, dst: Path) -> Archive<'a> {
|
||||
assert!(dst.exists());
|
||||
Archive { sess: sess, dst: dst }
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ pub enum OutputType {
|
||||
OutputTypeExe,
|
||||
}
|
||||
|
||||
pub fn llvm_err(sess: Session, msg: ~str) -> ! {
|
||||
pub fn llvm_err(sess: &Session, msg: ~str) -> ! {
|
||||
unsafe {
|
||||
let cstr = llvm::LLVMRustGetLastError();
|
||||
if cstr == ptr::null() {
|
||||
@ -68,7 +68,7 @@ pub fn llvm_err(sess: Session, msg: ~str) -> ! {
|
||||
}
|
||||
|
||||
pub fn WriteOutputFile(
|
||||
sess: Session,
|
||||
sess: &Session,
|
||||
target: lib::llvm::TargetMachineRef,
|
||||
pm: lib::llvm::PassManagerRef,
|
||||
m: ModuleRef,
|
||||
@ -125,7 +125,7 @@ pub mod write {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run_passes(sess: Session,
|
||||
pub fn run_passes(sess: &Session,
|
||||
trans: &CrateTranslation,
|
||||
output_types: &[OutputType],
|
||||
output: &OutputFilenames) {
|
||||
@ -156,7 +156,7 @@ pub mod write {
|
||||
|
||||
let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|t| {
|
||||
sess.opts.cg.target_cpu.with_c_str(|cpu| {
|
||||
target_feature(&sess).with_c_str(|features| {
|
||||
target_feature(sess).with_c_str(|features| {
|
||||
llvm::LLVMRustCreateTargetMachine(
|
||||
t, cpu, features,
|
||||
lib::llvm::CodeModelDefault,
|
||||
@ -323,7 +323,7 @@ pub mod write {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run_assembler(sess: Session, outputs: &OutputFilenames) {
|
||||
pub fn run_assembler(sess: &Session, outputs: &OutputFilenames) {
|
||||
let cc = super::get_cc_prog(sess);
|
||||
let assembly = outputs.temp_path(OutputTypeAssembly);
|
||||
let object = outputs.path(OutputTypeObject);
|
||||
@ -351,7 +351,7 @@ pub mod write {
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn configure_llvm(sess: Session) {
|
||||
unsafe fn configure_llvm(sess: &Session) {
|
||||
use sync::one::{Once, ONCE_INIT};
|
||||
static mut INIT: Once = ONCE_INIT;
|
||||
|
||||
@ -719,7 +719,7 @@ pub fn output_lib_filename(id: &CrateId) -> ~str {
|
||||
format!("{}-{}-{}", id.name, crate_id_hash(id), id.version_or_default())
|
||||
}
|
||||
|
||||
pub fn get_cc_prog(sess: Session) -> ~str {
|
||||
pub fn get_cc_prog(sess: &Session) -> ~str {
|
||||
match sess.opts.cg.linker {
|
||||
Some(ref linker) => return linker.to_owned(),
|
||||
None => {}
|
||||
@ -737,7 +737,7 @@ pub fn get_cc_prog(sess: Session) -> ~str {
|
||||
get_system_tool(sess, "cc")
|
||||
}
|
||||
|
||||
pub fn get_ar_prog(sess: Session) -> ~str {
|
||||
pub fn get_ar_prog(sess: &Session) -> ~str {
|
||||
match sess.opts.cg.ar {
|
||||
Some(ref ar) => return ar.to_owned(),
|
||||
None => {}
|
||||
@ -746,7 +746,7 @@ pub fn get_ar_prog(sess: Session) -> ~str {
|
||||
get_system_tool(sess, "ar")
|
||||
}
|
||||
|
||||
fn get_system_tool(sess: Session, tool: &str) -> ~str {
|
||||
fn get_system_tool(sess: &Session, tool: &str) -> ~str {
|
||||
match sess.targ_cfg.os {
|
||||
abi::OsAndroid => match sess.opts.cg.android_cross_path {
|
||||
Some(ref path) => {
|
||||
@ -765,7 +765,7 @@ fn get_system_tool(sess: Session, tool: &str) -> ~str {
|
||||
}
|
||||
}
|
||||
|
||||
fn remove(sess: Session, path: &Path) {
|
||||
fn remove(sess: &Session, path: &Path) {
|
||||
match fs::unlink(path) {
|
||||
Ok(..) => {}
|
||||
Err(e) => {
|
||||
@ -776,7 +776,7 @@ fn remove(sess: Session, path: &Path) {
|
||||
|
||||
/// Perform the linkage portion of the compilation phase. This will generate all
|
||||
/// of the requested outputs for this compilation session.
|
||||
pub fn link_binary(sess: Session,
|
||||
pub fn link_binary(sess: &Session,
|
||||
trans: &CrateTranslation,
|
||||
outputs: &OutputFilenames,
|
||||
id: &CrateId) -> Vec<Path> {
|
||||
@ -830,7 +830,7 @@ pub fn filename_for_input(sess: &Session, crate_type: session::CrateType,
|
||||
}
|
||||
}
|
||||
|
||||
fn link_binary_output(sess: Session,
|
||||
fn link_binary_output(sess: &Session,
|
||||
trans: &CrateTranslation,
|
||||
crate_type: session::CrateType,
|
||||
outputs: &OutputFilenames,
|
||||
@ -840,7 +840,7 @@ fn link_binary_output(sess: Session,
|
||||
Some(ref file) => file.clone(),
|
||||
None => {
|
||||
let out_filename = outputs.path(OutputTypeExe);
|
||||
filename_for_input(&sess, crate_type, id, &out_filename)
|
||||
filename_for_input(sess, crate_type, id, &out_filename)
|
||||
}
|
||||
};
|
||||
|
||||
@ -883,10 +883,10 @@ fn link_binary_output(sess: Session,
|
||||
// rlib primarily contains the object file of the crate, but it also contains
|
||||
// all of the object files from native libraries. This is done by unzipping
|
||||
// native libraries and inserting all of the contents into this archive.
|
||||
fn link_rlib(sess: Session,
|
||||
trans: Option<&CrateTranslation>, // None == no metadata/bytecode
|
||||
obj_filename: &Path,
|
||||
out_filename: &Path) -> Archive {
|
||||
fn link_rlib<'a>(sess: &'a Session,
|
||||
trans: Option<&CrateTranslation>, // None == no metadata/bytecode
|
||||
obj_filename: &Path,
|
||||
out_filename: &Path) -> Archive<'a> {
|
||||
let mut a = Archive::create(sess, out_filename, obj_filename);
|
||||
|
||||
let used_libraries = sess.cstore.get_used_libraries();
|
||||
@ -985,7 +985,7 @@ fn link_rlib(sess: Session,
|
||||
// There's no need to include metadata in a static archive, so ensure to not
|
||||
// link in the metadata object file (and also don't prepare the archive with a
|
||||
// metadata file).
|
||||
fn link_staticlib(sess: Session, obj_filename: &Path, out_filename: &Path) {
|
||||
fn link_staticlib(sess: &Session, obj_filename: &Path, out_filename: &Path) {
|
||||
let mut a = link_rlib(sess, None, obj_filename, out_filename);
|
||||
a.add_native_library("morestack").unwrap();
|
||||
a.add_native_library("compiler-rt").unwrap();
|
||||
@ -1016,7 +1016,7 @@ fn link_staticlib(sess: Session, obj_filename: &Path, out_filename: &Path) {
|
||||
//
|
||||
// This will invoke the system linker/cc to create the resulting file. This
|
||||
// links to all upstream files as well.
|
||||
fn link_natively(sess: Session, dylib: bool, obj_filename: &Path,
|
||||
fn link_natively(sess: &Session, dylib: bool, obj_filename: &Path,
|
||||
out_filename: &Path) {
|
||||
let tmpdir = TempDir::new("rustc").expect("needs a temp dir");
|
||||
// The invocations of cc share some flags across platforms
|
||||
@ -1066,7 +1066,7 @@ fn link_natively(sess: Session, dylib: bool, obj_filename: &Path,
|
||||
}
|
||||
}
|
||||
|
||||
fn link_args(sess: Session,
|
||||
fn link_args(sess: &Session,
|
||||
dylib: bool,
|
||||
tmpdir: &Path,
|
||||
obj_filename: &Path,
|
||||
@ -1248,7 +1248,7 @@ fn link_args(sess: Session,
|
||||
// Also note that the native libraries linked here are only the ones located
|
||||
// in the current crate. Upstream crates with native library dependencies
|
||||
// may have their native library pulled in above.
|
||||
fn add_local_native_libraries(args: &mut Vec<~str> , sess: Session) {
|
||||
fn add_local_native_libraries(args: &mut Vec<~str>, sess: &Session) {
|
||||
let addl_lib_search_paths = sess.opts.addl_lib_search_paths.borrow();
|
||||
for path in addl_lib_search_paths.get().iter() {
|
||||
// FIXME (#9639): This needs to handle non-utf8 paths
|
||||
@ -1281,7 +1281,7 @@ fn add_local_native_libraries(args: &mut Vec<~str> , sess: Session) {
|
||||
// Rust crates are not considered at all when creating an rlib output. All
|
||||
// dependencies will be linked when producing the final output (instead of
|
||||
// the intermediate rlib version)
|
||||
fn add_upstream_rust_crates(args: &mut Vec<~str> , sess: Session,
|
||||
fn add_upstream_rust_crates(args: &mut Vec<~str>, sess: &Session,
|
||||
dylib: bool, tmpdir: &Path) {
|
||||
|
||||
// As a limitation of the current implementation, we require that everything
|
||||
@ -1376,8 +1376,8 @@ fn add_upstream_rust_crates(args: &mut Vec<~str> , sess: Session,
|
||||
}
|
||||
|
||||
// Adds the static "rlib" versions of all crates to the command line.
|
||||
fn add_static_crates(args: &mut Vec<~str> , sess: Session, tmpdir: &Path,
|
||||
crates: Vec<(ast::CrateNum, Path)> ) {
|
||||
fn add_static_crates(args: &mut Vec<~str>, sess: &Session, tmpdir: &Path,
|
||||
crates: Vec<(ast::CrateNum, Path)>) {
|
||||
for (cnum, cratepath) in crates.move_iter() {
|
||||
// When performing LTO on an executable output, all of the
|
||||
// bytecode from the upstream libraries has already been
|
||||
@ -1423,7 +1423,7 @@ fn add_upstream_rust_crates(args: &mut Vec<~str> , sess: Session,
|
||||
}
|
||||
|
||||
// Same thing as above, but for dynamic crates instead of static crates.
|
||||
fn add_dynamic_crates(args: &mut Vec<~str> , sess: Session,
|
||||
fn add_dynamic_crates(args: &mut Vec<~str>, sess: &Session,
|
||||
crates: Vec<(ast::CrateNum, Path)> ) {
|
||||
// If we're performing LTO, then it should have been previously required
|
||||
// that all upstream rust dependencies were available in an rlib format.
|
||||
@ -1458,7 +1458,7 @@ fn add_upstream_rust_crates(args: &mut Vec<~str> , sess: Session,
|
||||
// generic function calls a native function, then the generic function must
|
||||
// be instantiated in the target crate, meaning that the native symbol must
|
||||
// also be resolved in the target crate.
|
||||
fn add_upstream_native_libraries(args: &mut Vec<~str> , sess: Session) {
|
||||
fn add_upstream_native_libraries(args: &mut Vec<~str>, sess: &Session) {
|
||||
let cstore = sess.cstore;
|
||||
cstore.iter_crate_data(|cnum, _| {
|
||||
let libs = csearch::get_native_libraries(cstore, cnum);
|
||||
|
@ -18,7 +18,7 @@ use util::common::time;
|
||||
use std::libc;
|
||||
use flate;
|
||||
|
||||
pub fn run(sess: session::Session, llmod: ModuleRef,
|
||||
pub fn run(sess: &session::Session, llmod: ModuleRef,
|
||||
tm: TargetMachineRef, reachable: &[~str]) {
|
||||
if sess.opts.cg.prefer_dynamic {
|
||||
sess.err("cannot prefer dynamic linking when performing LTO");
|
||||
|
@ -9,7 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
|
||||
use driver::session;
|
||||
use driver::session::Session;
|
||||
use metadata::cstore;
|
||||
use metadata::filesearch;
|
||||
|
||||
@ -22,7 +22,7 @@ fn not_win32(os: abi::Os) -> bool {
|
||||
os != abi::OsWin32
|
||||
}
|
||||
|
||||
pub fn get_rpath_flags(sess: session::Session, out_filename: &Path) -> Vec<~str> {
|
||||
pub fn get_rpath_flags(sess: &Session, out_filename: &Path) -> Vec<~str> {
|
||||
let os = sess.targ_cfg.os;
|
||||
|
||||
// No rpath on windows
|
||||
@ -54,7 +54,7 @@ pub fn get_rpath_flags(sess: session::Session, out_filename: &Path) -> Vec<~str>
|
||||
flags
|
||||
}
|
||||
|
||||
fn get_sysroot_absolute_rt_lib(sess: session::Session) -> Path {
|
||||
fn get_sysroot_absolute_rt_lib(sess: &Session) -> Path {
|
||||
let r = filesearch::relative_target_lib_path(sess.opts.target_triple);
|
||||
let mut p = sess.filesearch.sysroot.join(&r);
|
||||
p.push(os::dll_filename("rustrt"));
|
||||
|
@ -13,7 +13,7 @@ use back::link;
|
||||
use back::{arm, x86, x86_64, mips};
|
||||
use driver::session::{Aggressive, CrateTypeExecutable, CrateType,
|
||||
FullDebugInfo, LimitedDebugInfo, NoDebugInfo};
|
||||
use driver::session::{Session, Session_, No, Less, Default};
|
||||
use driver::session::{Session, No, Less, Default};
|
||||
use driver::session;
|
||||
use front;
|
||||
use lib::llvm::llvm;
|
||||
@ -80,7 +80,7 @@ pub fn source_name(input: &Input) -> ~str {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn default_configuration(sess: Session) ->
|
||||
pub fn default_configuration(sess: &Session) ->
|
||||
ast::CrateConfig {
|
||||
let tos = match sess.targ_cfg.os {
|
||||
abi::OsWin32 => InternedString::new("win32"),
|
||||
@ -123,7 +123,7 @@ pub fn append_configuration(cfg: &mut ast::CrateConfig,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn build_configuration(sess: Session) -> ast::CrateConfig {
|
||||
pub fn build_configuration(sess: &Session) -> ast::CrateConfig {
|
||||
// Combine the configuration requested by the session (command line) with
|
||||
// some default and generated configuration items
|
||||
let default_cfg = default_configuration(sess);
|
||||
@ -170,7 +170,7 @@ impl Input {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn phase_1_parse_input(sess: Session, cfg: ast::CrateConfig, input: &Input)
|
||||
pub fn phase_1_parse_input(sess: &Session, cfg: ast::CrateConfig, input: &Input)
|
||||
-> ast::Crate {
|
||||
let krate = time(sess.time_passes(), "parsing", (), |_| {
|
||||
match *input {
|
||||
@ -206,7 +206,7 @@ pub fn phase_1_parse_input(sess: Session, cfg: ast::CrateConfig, input: &Input)
|
||||
/// syntax expansion, secondary `cfg` expansion, synthesis of a test
|
||||
/// harness if one is to be provided and injection of a dependency on the
|
||||
/// standard library and prelude.
|
||||
pub fn phase_2_configure_and_expand(sess: Session,
|
||||
pub fn phase_2_configure_and_expand(sess: &Session,
|
||||
loader: &mut CrateLoader,
|
||||
mut krate: ast::Crate,
|
||||
crate_id: &CrateId)
|
||||
@ -214,7 +214,7 @@ pub fn phase_2_configure_and_expand(sess: Session,
|
||||
let time_passes = sess.time_passes();
|
||||
|
||||
sess.building_library.set(session::building_library(sess.opts, &krate));
|
||||
sess.crate_types.set(session::collect_crate_types(&sess,
|
||||
sess.crate_types.set(session::collect_crate_types(sess,
|
||||
krate.attrs
|
||||
.as_slice()));
|
||||
|
||||
@ -289,12 +289,12 @@ pub fn phase_3_run_analysis_passes(sess: Session,
|
||||
let time_passes = sess.time_passes();
|
||||
|
||||
time(time_passes, "external crate/lib resolution", (), |_|
|
||||
creader::read_crates(sess, krate,
|
||||
creader::read_crates(&sess, krate,
|
||||
session::sess_os_to_meta_os(sess.targ_cfg.os),
|
||||
token::get_ident_interner()));
|
||||
|
||||
let lang_items = time(time_passes, "language item collection", (), |_|
|
||||
middle::lang_items::collect_language_items(krate, sess));
|
||||
middle::lang_items::collect_language_items(krate, &sess));
|
||||
|
||||
let middle::resolve::CrateMap {
|
||||
def_map: def_map,
|
||||
@ -304,13 +304,13 @@ pub fn phase_3_run_analysis_passes(sess: Session,
|
||||
last_private_map: last_private_map
|
||||
} =
|
||||
time(time_passes, "resolution", (), |_|
|
||||
middle::resolve::resolve_crate(sess, lang_items, krate));
|
||||
middle::resolve::resolve_crate(&sess, lang_items, krate));
|
||||
|
||||
let named_region_map = time(time_passes, "lifetime resolution", (),
|
||||
|_| middle::resolve_lifetime::krate(sess, krate));
|
||||
|_| middle::resolve_lifetime::krate(&sess, krate));
|
||||
|
||||
time(time_passes, "looking for entry point", (),
|
||||
|_| middle::entry::find_entry_point(sess, krate, &ast_map));
|
||||
|_| middle::entry::find_entry_point(&sess, krate, &ast_map));
|
||||
|
||||
sess.macro_registrar_fn.with_mut(|r| *r =
|
||||
time(time_passes, "looking for macro registrar", (), |_|
|
||||
@ -321,7 +321,7 @@ pub fn phase_3_run_analysis_passes(sess: Session,
|
||||
freevars::annotate_freevars(def_map, krate));
|
||||
|
||||
let region_map = time(time_passes, "region resolution", (), |_|
|
||||
middle::region::resolve_crate(sess, krate));
|
||||
middle::region::resolve_crate(&sess, krate));
|
||||
|
||||
let ty_cx = ty::mk_ctxt(sess, def_map, named_region_map, ast_map,
|
||||
freevars, region_map, lang_items);
|
||||
@ -337,8 +337,7 @@ pub fn phase_3_run_analysis_passes(sess: Session,
|
||||
middle::const_eval::process_crate(krate, ty_cx));
|
||||
|
||||
time(time_passes, "const checking", (), |_|
|
||||
middle::check_const::check_crate(sess, krate, def_map,
|
||||
method_map, ty_cx));
|
||||
middle::check_const::check_crate(krate, def_map, method_map, ty_cx));
|
||||
|
||||
let maps = (external_exports, last_private_map);
|
||||
let (exported_items, public_items) =
|
||||
@ -418,17 +417,16 @@ pub struct CrateTranslation {
|
||||
|
||||
/// Run the translation phase to LLVM, after which the AST and analysis can
|
||||
/// be discarded.
|
||||
pub fn phase_4_translate_to_llvm(sess: Session,
|
||||
krate: ast::Crate,
|
||||
pub fn phase_4_translate_to_llvm(krate: ast::Crate,
|
||||
analysis: &CrateAnalysis,
|
||||
outputs: &OutputFilenames) -> CrateTranslation {
|
||||
time(sess.time_passes(), "translation", krate, |krate|
|
||||
trans::base::trans_crate(sess, krate, analysis, outputs))
|
||||
time(analysis.ty_cx.sess.time_passes(), "translation", krate, |krate|
|
||||
trans::base::trans_crate(krate, analysis, outputs))
|
||||
}
|
||||
|
||||
/// Run LLVM itself, producing a bitcode file, assembly file or object file
|
||||
/// as a side effect.
|
||||
pub fn phase_5_run_llvm_passes(sess: Session,
|
||||
pub fn phase_5_run_llvm_passes(sess: &Session,
|
||||
trans: &CrateTranslation,
|
||||
outputs: &OutputFilenames) {
|
||||
if sess.opts.cg.no_integrated_as {
|
||||
@ -454,7 +452,7 @@ pub fn phase_5_run_llvm_passes(sess: Session,
|
||||
|
||||
/// Run the linker on any artifacts that resulted from the LLVM run.
|
||||
/// This should produce either a finished executable or library.
|
||||
pub fn phase_6_link_output(sess: Session,
|
||||
pub fn phase_6_link_output(sess: &Session,
|
||||
trans: &CrateTranslation,
|
||||
outputs: &OutputFilenames) {
|
||||
time(sess.time_passes(), "linking", (), |_|
|
||||
@ -464,7 +462,7 @@ pub fn phase_6_link_output(sess: Session,
|
||||
&trans.link.crateid));
|
||||
}
|
||||
|
||||
pub fn stop_after_phase_3(sess: Session) -> bool {
|
||||
pub fn stop_after_phase_3(sess: &Session) -> bool {
|
||||
if sess.opts.no_trans {
|
||||
debug!("invoked with --no-trans, returning early from compile_input");
|
||||
return true;
|
||||
@ -472,7 +470,7 @@ pub fn stop_after_phase_3(sess: Session) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
pub fn stop_after_phase_1(sess: Session) -> bool {
|
||||
pub fn stop_after_phase_1(sess: &Session) -> bool {
|
||||
if sess.opts.parse_only {
|
||||
debug!("invoked with --parse-only, returning early from compile_input");
|
||||
return true;
|
||||
@ -483,7 +481,7 @@ pub fn stop_after_phase_1(sess: Session) -> bool {
|
||||
return sess.opts.debugging_opts & session::AST_JSON_NOEXPAND != 0;
|
||||
}
|
||||
|
||||
pub fn stop_after_phase_2(sess: Session) -> bool {
|
||||
pub fn stop_after_phase_2(sess: &Session) -> bool {
|
||||
if sess.opts.no_analysis {
|
||||
debug!("invoked with --no-analysis, returning early from compile_input");
|
||||
return true;
|
||||
@ -491,7 +489,7 @@ pub fn stop_after_phase_2(sess: Session) -> bool {
|
||||
return sess.opts.debugging_opts & session::AST_JSON != 0;
|
||||
}
|
||||
|
||||
pub fn stop_after_phase_5(sess: Session) -> bool {
|
||||
pub fn stop_after_phase_5(sess: &Session) -> bool {
|
||||
if !sess.opts.output_types.iter().any(|&i| i == link::OutputTypeExe) {
|
||||
debug!("not building executable, returning early from compile_input");
|
||||
return true;
|
||||
@ -499,7 +497,7 @@ pub fn stop_after_phase_5(sess: Session) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
fn write_out_deps(sess: Session,
|
||||
fn write_out_deps(sess: &Session,
|
||||
input: &Input,
|
||||
outputs: &OutputFilenames,
|
||||
krate: &ast::Crate) -> io::IoResult<()> {
|
||||
@ -512,7 +510,7 @@ fn write_out_deps(sess: Session,
|
||||
link::OutputTypeExe => {
|
||||
let crate_types = sess.crate_types.borrow();
|
||||
for output in crate_types.get().iter() {
|
||||
let p = link::filename_for_input(&sess, *output, &id, &file);
|
||||
let p = link::filename_for_input(sess, *output, &id, &file);
|
||||
out_filenames.push(p);
|
||||
}
|
||||
}
|
||||
@ -566,33 +564,35 @@ pub fn compile_input(sess: Session, cfg: ast::CrateConfig, input: &Input,
|
||||
// We need nested scopes here, because the intermediate results can keep
|
||||
// large chunks of memory alive and we want to free them as soon as
|
||||
// possible to keep the peak memory usage low
|
||||
let outputs;
|
||||
let trans = {
|
||||
let (expanded_crate, ast_map) = {
|
||||
let krate = phase_1_parse_input(sess, cfg, input);
|
||||
if stop_after_phase_1(sess) { return; }
|
||||
outputs = build_output_filenames(input,
|
||||
outdir,
|
||||
output,
|
||||
krate.attrs.as_slice(),
|
||||
sess);
|
||||
let loader = &mut Loader::new(sess);
|
||||
let (outputs, trans, sess) = {
|
||||
let (outputs, expanded_crate, ast_map) = {
|
||||
let krate = phase_1_parse_input(&sess, cfg, input);
|
||||
if stop_after_phase_1(&sess) { return; }
|
||||
let outputs = build_output_filenames(input,
|
||||
outdir,
|
||||
output,
|
||||
krate.attrs.as_slice(),
|
||||
&sess);
|
||||
let loader = &mut Loader::new(&sess);
|
||||
let id = link::find_crate_id(krate.attrs.as_slice(),
|
||||
outputs.out_filestem);
|
||||
phase_2_configure_and_expand(sess, loader, krate, &id)
|
||||
let (expanded_crate, ast_map) = phase_2_configure_and_expand(&sess, loader,
|
||||
krate, &id);
|
||||
(outputs, expanded_crate, ast_map)
|
||||
};
|
||||
write_out_deps(&sess, input, &outputs, &expanded_crate).unwrap();
|
||||
|
||||
write_out_deps(sess, input, &outputs, &expanded_crate).unwrap();
|
||||
|
||||
if stop_after_phase_2(sess) { return; }
|
||||
if stop_after_phase_2(&sess) { return; }
|
||||
|
||||
let analysis = phase_3_run_analysis_passes(sess, &expanded_crate, ast_map);
|
||||
if stop_after_phase_3(sess) { return; }
|
||||
phase_4_translate_to_llvm(sess, expanded_crate, &analysis, &outputs)
|
||||
if stop_after_phase_3(&analysis.ty_cx.sess) { return; }
|
||||
let trans = phase_4_translate_to_llvm(expanded_crate,
|
||||
&analysis, &outputs);
|
||||
(outputs, trans, analysis.ty_cx.sess)
|
||||
};
|
||||
phase_5_run_llvm_passes(sess, &trans, &outputs);
|
||||
if stop_after_phase_5(sess) { return; }
|
||||
phase_6_link_output(sess, &trans, &outputs);
|
||||
phase_5_run_llvm_passes(&sess, &trans, &outputs);
|
||||
if stop_after_phase_5(&sess) { return; }
|
||||
phase_6_link_output(&sess, &trans, &outputs);
|
||||
}
|
||||
|
||||
struct IdentifiedAnnotation;
|
||||
@ -660,19 +660,22 @@ pub fn pretty_print_input(sess: Session,
|
||||
cfg: ast::CrateConfig,
|
||||
input: &Input,
|
||||
ppm: PpMode) {
|
||||
let krate = phase_1_parse_input(sess, cfg, input);
|
||||
let krate = phase_1_parse_input(&sess, cfg, input);
|
||||
let id = link::find_crate_id(krate.attrs.as_slice(), input.filestem());
|
||||
|
||||
let (krate, ast_map, is_expanded) = match ppm {
|
||||
PpmExpanded | PpmExpandedIdentified | PpmTyped => {
|
||||
let loader = &mut Loader::new(sess);
|
||||
let (krate, ast_map) = phase_2_configure_and_expand(sess, loader,
|
||||
let loader = &mut Loader::new(&sess);
|
||||
let (krate, ast_map) = phase_2_configure_and_expand(&sess, loader,
|
||||
krate, &id);
|
||||
(krate, Some(ast_map), true)
|
||||
}
|
||||
_ => (krate, None, false)
|
||||
};
|
||||
|
||||
let codemap = sess.codemap;
|
||||
let span_diagnostic = sess.span_diagnostic;
|
||||
|
||||
let annotation = match ppm {
|
||||
PpmIdentified | PpmExpandedIdentified => {
|
||||
~IdentifiedAnnotation as ~pprust::PpAnn
|
||||
@ -687,11 +690,11 @@ pub fn pretty_print_input(sess: Session,
|
||||
_ => ~pprust::NoAnn as ~pprust::PpAnn:,
|
||||
};
|
||||
|
||||
let src = &sess.codemap.get_filemap(source_name(input)).src;
|
||||
let src = &codemap.get_filemap(source_name(input)).src;
|
||||
let mut rdr = MemReader::new(src.as_bytes().to_owned());
|
||||
let stdout = io::stdout();
|
||||
pprust::print_crate(sess.codemap,
|
||||
sess.span_diagnostic,
|
||||
pprust::print_crate(codemap,
|
||||
span_diagnostic,
|
||||
&krate,
|
||||
source_name(input),
|
||||
&mut rdr,
|
||||
@ -1020,7 +1023,7 @@ pub fn build_session_(sopts: @session::Options,
|
||||
}
|
||||
);
|
||||
|
||||
@Session_ {
|
||||
Session {
|
||||
targ_cfg: target_cfg,
|
||||
opts: sopts,
|
||||
cstore: cstore,
|
||||
@ -1043,7 +1046,7 @@ pub fn build_session_(sopts: @session::Options,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_pretty(sess: Session, name: &str) -> PpMode {
|
||||
pub fn parse_pretty(sess: &Session, name: &str) -> PpMode {
|
||||
match name {
|
||||
&"normal" => PpmNormal,
|
||||
&"expanded" => PpmExpanded,
|
||||
@ -1143,7 +1146,7 @@ pub fn build_output_filenames(input: &Input,
|
||||
odir: &Option<Path>,
|
||||
ofile: &Option<Path>,
|
||||
attrs: &[ast::Attribute],
|
||||
sess: Session)
|
||||
sess: &Session)
|
||||
-> OutputFilenames {
|
||||
match *ofile {
|
||||
None => {
|
||||
@ -1196,7 +1199,7 @@ pub fn early_error(msg: &str) -> ! {
|
||||
fail!(diagnostic::FatalError);
|
||||
}
|
||||
|
||||
pub fn list_metadata(sess: Session, path: &Path,
|
||||
pub fn list_metadata(sess: &Session, path: &Path,
|
||||
out: &mut io::Writer) -> io::IoResult<()> {
|
||||
metadata::loader::list_file_metadata(
|
||||
session::sess_os_to_meta_os(sess.targ_cfg.os), path, out)
|
||||
|
@ -173,7 +173,7 @@ pub enum CrateType {
|
||||
CrateTypeStaticlib,
|
||||
}
|
||||
|
||||
pub struct Session_ {
|
||||
pub struct Session {
|
||||
targ_cfg: @Config,
|
||||
opts: @Options,
|
||||
cstore: @metadata::cstore::CStore,
|
||||
@ -201,9 +201,7 @@ pub struct Session_ {
|
||||
recursion_limit: Cell<uint>,
|
||||
}
|
||||
|
||||
pub type Session = @Session_;
|
||||
|
||||
impl Session_ {
|
||||
impl Session {
|
||||
pub fn span_fatal(&self, sp: Span, msg: &str) -> ! {
|
||||
self.span_diagnostic.span_fatal(sp, msg)
|
||||
}
|
||||
@ -451,7 +449,7 @@ cgoptions!(
|
||||
)
|
||||
|
||||
// Seems out of place, but it uses session, so I'm putting it here
|
||||
pub fn expect<T:Clone>(sess: Session, opt: Option<T>, msg: || -> ~str) -> T {
|
||||
pub fn expect<T:Clone>(sess: &Session, opt: Option<T>, msg: || -> ~str) -> T {
|
||||
diagnostic::expect(sess.diagnostic(), opt, msg)
|
||||
}
|
||||
|
||||
|
@ -13,17 +13,17 @@ use driver::session::Session;
|
||||
use syntax::ast;
|
||||
use syntax::ast_map;
|
||||
|
||||
struct NodeIdAssigner {
|
||||
sess: Session
|
||||
struct NodeIdAssigner<'a> {
|
||||
sess: &'a Session
|
||||
}
|
||||
|
||||
impl ast_map::FoldOps for NodeIdAssigner {
|
||||
impl<'a> ast_map::FoldOps for NodeIdAssigner<'a> {
|
||||
fn new_id(&self, old_id: ast::NodeId) -> ast::NodeId {
|
||||
assert_eq!(old_id, ast::DUMMY_NODE_ID);
|
||||
self.sess.next_node_id()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn assign_node_ids_and_map(sess: Session, krate: ast::Crate) -> (ast::Crate, ast_map::Map) {
|
||||
pub fn assign_node_ids_and_map(sess: &Session, krate: ast::Crate) -> (ast::Crate, ast_map::Map) {
|
||||
ast_map::map_crate(krate, NodeIdAssigner { sess: sess })
|
||||
}
|
||||
|
@ -86,12 +86,12 @@ impl Features {
|
||||
}
|
||||
}
|
||||
|
||||
struct Context {
|
||||
features: Vec<&'static str> ,
|
||||
sess: Session,
|
||||
struct Context<'a> {
|
||||
features: Vec<&'static str>,
|
||||
sess: &'a Session,
|
||||
}
|
||||
|
||||
impl Context {
|
||||
impl<'a> Context<'a> {
|
||||
fn gate_feature(&self, feature: &str, span: Span, explain: &str) {
|
||||
if !self.has_feature(feature) {
|
||||
self.sess.span_err(span, explain);
|
||||
@ -114,7 +114,7 @@ impl Context {
|
||||
}
|
||||
}
|
||||
|
||||
impl Visitor<()> for Context {
|
||||
impl<'a> Visitor<()> for Context<'a> {
|
||||
fn visit_ident(&mut self, sp: Span, id: ast::Ident, _: ()) {
|
||||
if !token::get_ident(id).get().is_ascii() {
|
||||
self.gate_feature("non_ascii_idents", sp,
|
||||
@ -293,7 +293,7 @@ impl Visitor<()> for Context {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn check_crate(sess: Session, krate: &ast::Crate) {
|
||||
pub fn check_crate(sess: &Session, krate: &ast::Crate) {
|
||||
let mut cx = Context {
|
||||
features: Vec::new(),
|
||||
sess: sess,
|
||||
|
@ -19,18 +19,18 @@ use syntax::visit::Visitor;
|
||||
|
||||
use driver::session::Session;
|
||||
|
||||
struct ShowSpanVisitor {
|
||||
sess: Session
|
||||
struct ShowSpanVisitor<'a> {
|
||||
sess: &'a Session
|
||||
}
|
||||
|
||||
impl Visitor<()> for ShowSpanVisitor {
|
||||
impl<'a> Visitor<()> for ShowSpanVisitor<'a> {
|
||||
fn visit_expr(&mut self, e: &ast::Expr, _: ()) {
|
||||
self.sess.span_note(e.span, "expression");
|
||||
visit::walk_expr(self, e, ());
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run(sess: Session, krate: &ast::Crate) {
|
||||
pub fn run(sess: &Session, krate: &ast::Crate) {
|
||||
let mut v = ShowSpanVisitor { sess: sess };
|
||||
visit::walk_crate(&mut v, krate, ());
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ use syntax::util::small_vector::SmallVector;
|
||||
|
||||
pub static VERSION: &'static str = "0.10-pre";
|
||||
|
||||
pub fn maybe_inject_crates_ref(sess: Session, krate: ast::Crate)
|
||||
pub fn maybe_inject_crates_ref(sess: &Session, krate: ast::Crate)
|
||||
-> ast::Crate {
|
||||
if use_std(&krate) {
|
||||
inject_crates_ref(sess, krate)
|
||||
@ -35,7 +35,7 @@ pub fn maybe_inject_crates_ref(sess: Session, krate: ast::Crate)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn maybe_inject_prelude(sess: Session, krate: ast::Crate) -> ast::Crate {
|
||||
pub fn maybe_inject_prelude(sess: &Session, krate: ast::Crate) -> ast::Crate {
|
||||
if use_std(&krate) {
|
||||
inject_prelude(sess, krate)
|
||||
} else {
|
||||
@ -55,8 +55,8 @@ fn no_prelude(attrs: &[ast::Attribute]) -> bool {
|
||||
attr::contains_name(attrs, "no_implicit_prelude")
|
||||
}
|
||||
|
||||
struct StandardLibraryInjector {
|
||||
sess: Session,
|
||||
struct StandardLibraryInjector<'a> {
|
||||
sess: &'a Session,
|
||||
}
|
||||
|
||||
pub fn with_version(krate: &str) -> Option<(InternedString, ast::StrStyle)> {
|
||||
@ -71,7 +71,7 @@ pub fn with_version(krate: &str) -> Option<(InternedString, ast::StrStyle)> {
|
||||
}
|
||||
}
|
||||
|
||||
impl fold::Folder for StandardLibraryInjector {
|
||||
impl<'a> fold::Folder for StandardLibraryInjector<'a> {
|
||||
fn fold_crate(&mut self, krate: ast::Crate) -> ast::Crate {
|
||||
let mut vis = vec!(ast::ViewItem {
|
||||
node: ast::ViewItemExternCrate(token::str_to_ident("std"),
|
||||
@ -120,19 +120,19 @@ impl fold::Folder for StandardLibraryInjector {
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_crates_ref(sess: Session, krate: ast::Crate) -> ast::Crate {
|
||||
fn inject_crates_ref(sess: &Session, krate: ast::Crate) -> ast::Crate {
|
||||
let mut fold = StandardLibraryInjector {
|
||||
sess: sess,
|
||||
};
|
||||
fold.fold_crate(krate)
|
||||
}
|
||||
|
||||
struct PreludeInjector {
|
||||
sess: Session,
|
||||
struct PreludeInjector<'a> {
|
||||
sess: &'a Session,
|
||||
}
|
||||
|
||||
|
||||
impl fold::Folder for PreludeInjector {
|
||||
impl<'a> fold::Folder for PreludeInjector<'a> {
|
||||
fn fold_crate(&mut self, krate: ast::Crate) -> ast::Crate {
|
||||
if !no_prelude(krate.attrs.as_slice()) {
|
||||
// only add `use std::prelude::*;` if there wasn't a
|
||||
@ -193,7 +193,7 @@ impl fold::Folder for PreludeInjector {
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_prelude(sess: Session, krate: ast::Crate) -> ast::Crate {
|
||||
fn inject_prelude(sess: &Session, krate: ast::Crate) -> ast::Crate {
|
||||
let mut fold = PreludeInjector {
|
||||
sess: sess,
|
||||
};
|
||||
|
@ -13,7 +13,7 @@
|
||||
#[allow(dead_code)];
|
||||
#[allow(unused_imports)];
|
||||
|
||||
use driver::session;
|
||||
use driver::session::Session;
|
||||
use front::config;
|
||||
use front::std_inject::with_version;
|
||||
use metadata::creader::Loader;
|
||||
@ -47,8 +47,8 @@ struct Test {
|
||||
}
|
||||
|
||||
struct TestCtxt<'a> {
|
||||
sess: session::Session,
|
||||
path: RefCell<Vec<ast::Ident> >,
|
||||
sess: &'a Session,
|
||||
path: RefCell<Vec<ast::Ident>>,
|
||||
ext_cx: ExtCtxt<'a>,
|
||||
testfns: RefCell<Vec<Test> >,
|
||||
is_test_crate: bool,
|
||||
@ -57,7 +57,7 @@ struct TestCtxt<'a> {
|
||||
|
||||
// Traverse the crate, collecting all the test functions, eliding any
|
||||
// existing main functions, and synthesizing a main test harness
|
||||
pub fn modify_for_testing(sess: session::Session,
|
||||
pub fn modify_for_testing(sess: &Session,
|
||||
krate: ast::Crate) -> ast::Crate {
|
||||
// We generate the test harness when building in the 'test'
|
||||
// configuration, either with the '--test' or '--cfg test'
|
||||
@ -161,7 +161,7 @@ impl<'a> fold::Folder for TestHarnessGenerator<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn generate_test_harness(sess: session::Session, krate: ast::Crate)
|
||||
fn generate_test_harness(sess: &Session, krate: ast::Crate)
|
||||
-> ast::Crate {
|
||||
let loader = &mut Loader::new(sess);
|
||||
let mut cx: TestCtxt = TestCtxt {
|
||||
|
@ -290,9 +290,9 @@ pub fn run_compiler(args: &[~str]) {
|
||||
let sess = d::build_session(sopts, input_file_path);
|
||||
let odir = matches.opt_str("out-dir").map(|o| Path::new(o));
|
||||
let ofile = matches.opt_str("o").map(|o| Path::new(o));
|
||||
let cfg = d::build_configuration(sess);
|
||||
let cfg = d::build_configuration(&sess);
|
||||
let pretty = matches.opt_default("pretty", "normal").map(|a| {
|
||||
d::parse_pretty(sess, a)
|
||||
d::parse_pretty(&sess, a)
|
||||
});
|
||||
match pretty {
|
||||
Some::<d::PpMode>(ppm) => {
|
||||
@ -306,7 +306,7 @@ pub fn run_compiler(args: &[~str]) {
|
||||
match input {
|
||||
d::FileInput(ref ifile) => {
|
||||
let mut stdout = io::stdout();
|
||||
d::list_metadata(sess, &(*ifile), &mut stdout).unwrap();
|
||||
d::list_metadata(&sess, &(*ifile), &mut stdout).unwrap();
|
||||
}
|
||||
d::StrInput(_) => {
|
||||
d::early_error("can not list metadata for stdin");
|
||||
@ -317,9 +317,9 @@ pub fn run_compiler(args: &[~str]) {
|
||||
let (crate_id, crate_name, crate_file_name) = sopts.print_metas;
|
||||
// these nasty nested conditions are to avoid doing extra work
|
||||
if crate_id || crate_name || crate_file_name {
|
||||
let attrs = parse_crate_attrs(sess, &input);
|
||||
let attrs = parse_crate_attrs(&sess, &input);
|
||||
let t_outputs = d::build_output_filenames(&input, &odir, &ofile,
|
||||
attrs.as_slice(), sess);
|
||||
attrs.as_slice(), &sess);
|
||||
let id = link::find_crate_id(attrs.as_slice(), t_outputs.out_filestem);
|
||||
|
||||
if crate_id {
|
||||
@ -344,7 +344,7 @@ pub fn run_compiler(args: &[~str]) {
|
||||
d::compile_input(sess, cfg, &input, &odir, &ofile);
|
||||
}
|
||||
|
||||
fn parse_crate_attrs(sess: session::Session, input: &d::Input) ->
|
||||
fn parse_crate_attrs(sess: &session::Session, input: &d::Input) ->
|
||||
Vec<ast::Attribute> {
|
||||
let result = match *input {
|
||||
d::FileInput(ref ifile) => {
|
||||
|
@ -39,7 +39,7 @@ use syntax::visit;
|
||||
|
||||
// Traverses an AST, reading all the information about use'd crates and extern
|
||||
// libraries necessary for later resolving, typechecking, linking, etc.
|
||||
pub fn read_crates(sess: Session,
|
||||
pub fn read_crates(sess: &Session,
|
||||
krate: &ast::Crate,
|
||||
os: loader::Os,
|
||||
intr: @IdentInterner) {
|
||||
@ -51,12 +51,7 @@ pub fn read_crates(sess: Session,
|
||||
intr: intr
|
||||
};
|
||||
visit_crate(&e, krate);
|
||||
{
|
||||
let mut v = ReadCrateVisitor {
|
||||
e: &mut e
|
||||
};
|
||||
visit::walk_crate(&mut v, krate, ());
|
||||
}
|
||||
visit::walk_crate(&mut e, krate, ());
|
||||
let crate_cache = e.crate_cache.borrow();
|
||||
dump_crates(crate_cache.get().as_slice());
|
||||
warn_if_multiple_versions(&mut e,
|
||||
@ -64,17 +59,13 @@ pub fn read_crates(sess: Session,
|
||||
crate_cache.get().as_slice());
|
||||
}
|
||||
|
||||
struct ReadCrateVisitor<'a> {
|
||||
e: &'a mut Env,
|
||||
}
|
||||
|
||||
impl<'a> visit::Visitor<()> for ReadCrateVisitor<'a> {
|
||||
impl<'a> visit::Visitor<()> for Env<'a> {
|
||||
fn visit_view_item(&mut self, a: &ast::ViewItem, _: ()) {
|
||||
visit_view_item(self.e, a);
|
||||
visit_view_item(self, a);
|
||||
visit::walk_view_item(self, a, ());
|
||||
}
|
||||
fn visit_item(&mut self, a: &ast::Item, _: ()) {
|
||||
visit_item(self.e, a);
|
||||
visit_item(self, a);
|
||||
visit::walk_item(self, a, ());
|
||||
}
|
||||
}
|
||||
@ -120,8 +111,8 @@ fn warn_if_multiple_versions(e: &mut Env,
|
||||
}
|
||||
}
|
||||
|
||||
struct Env {
|
||||
sess: Session,
|
||||
struct Env<'a> {
|
||||
sess: &'a Session,
|
||||
os: loader::Os,
|
||||
crate_cache: @RefCell<Vec<cache_entry>>,
|
||||
next_crate_num: ast::CrateNum,
|
||||
@ -391,12 +382,12 @@ fn resolve_crate_deps(e: &mut Env,
|
||||
return @RefCell::new(cnum_map);
|
||||
}
|
||||
|
||||
pub struct Loader {
|
||||
priv env: Env,
|
||||
pub struct Loader<'a> {
|
||||
priv env: Env<'a>,
|
||||
}
|
||||
|
||||
impl Loader {
|
||||
pub fn new(sess: Session) -> Loader {
|
||||
impl<'a> Loader<'a> {
|
||||
pub fn new(sess: &'a Session) -> Loader<'a> {
|
||||
let os = driver::get_os(driver::host_triple()).unwrap();
|
||||
let os = session::sess_os_to_meta_os(os);
|
||||
Loader {
|
||||
@ -411,7 +402,7 @@ impl Loader {
|
||||
}
|
||||
}
|
||||
|
||||
impl CrateLoader for Loader {
|
||||
impl<'a> CrateLoader for Loader<'a> {
|
||||
fn load_crate(&mut self, krate: &ast::ViewItem) -> MacroCrate {
|
||||
let info = extract_crate_info(&self.env, krate).unwrap();
|
||||
let cnum = resolve_crate(&mut self.env, None, info.ident,
|
||||
|
@ -46,7 +46,7 @@ pub enum Os {
|
||||
}
|
||||
|
||||
pub struct Context<'a> {
|
||||
sess: Session,
|
||||
sess: &'a Session,
|
||||
span: Span,
|
||||
ident: &'a str,
|
||||
crate_id: &'a CrateId,
|
||||
|
@ -137,7 +137,7 @@ pub fn decode_inlined_item(cdata: @cstore::crate_metadata,
|
||||
});
|
||||
let mut ast_dsr = reader::Decoder(ast_doc);
|
||||
let from_id_range = Decodable::decode(&mut ast_dsr);
|
||||
let to_id_range = reserve_id_range(dcx.tcx.sess, from_id_range);
|
||||
let to_id_range = reserve_id_range(&dcx.tcx.sess, from_id_range);
|
||||
let xcx = @ExtendedDecodeContext {
|
||||
dcx: dcx,
|
||||
from_id_range: from_id_range,
|
||||
@ -154,7 +154,7 @@ pub fn decode_inlined_item(cdata: @cstore::crate_metadata,
|
||||
debug!("< Decoded inlined fn: {}::{}",
|
||||
path_as_str.unwrap(),
|
||||
token::get_ident(ident));
|
||||
region::resolve_inlined_item(tcx.sess, &tcx.region_maps, &ii);
|
||||
region::resolve_inlined_item(&tcx.sess, &tcx.region_maps, &ii);
|
||||
decode_side_tables(xcx, ast_doc);
|
||||
match ii {
|
||||
ast::IIItem(i) => {
|
||||
@ -178,7 +178,7 @@ pub fn decode_exported_macro(par_doc: ebml::Doc) -> @ast::Item {
|
||||
// ______________________________________________________________________
|
||||
// Enumerating the IDs which appear in an AST
|
||||
|
||||
fn reserve_id_range(sess: Session,
|
||||
fn reserve_id_range(sess: &Session,
|
||||
from_id_range: ast_util::IdRange) -> ast_util::IdRange {
|
||||
// Handle the case of an empty range:
|
||||
if from_id_range.empty() { return from_id_range; }
|
||||
|
@ -22,7 +22,6 @@ use syntax::visit::Visitor;
|
||||
use syntax::visit;
|
||||
|
||||
pub struct CheckCrateVisitor {
|
||||
sess: Session,
|
||||
def_map: resolve::DefMap,
|
||||
method_map: typeck::MethodMap,
|
||||
tcx: ty::ctxt,
|
||||
@ -30,41 +29,34 @@ pub struct CheckCrateVisitor {
|
||||
|
||||
impl Visitor<bool> for CheckCrateVisitor {
|
||||
fn visit_item(&mut self, i: &Item, env: bool) {
|
||||
check_item(self, self.sess, self.def_map, i, env);
|
||||
check_item(self, i, env);
|
||||
}
|
||||
fn visit_pat(&mut self, p: &Pat, env: bool) {
|
||||
check_pat(self, p, env);
|
||||
}
|
||||
fn visit_expr(&mut self, ex: &Expr, env: bool) {
|
||||
check_expr(self, self.sess, self.def_map, self.method_map,
|
||||
self.tcx, ex, env);
|
||||
check_expr(self, ex, env);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn check_crate(sess: Session,
|
||||
krate: &Crate,
|
||||
pub fn check_crate(krate: &Crate,
|
||||
def_map: resolve::DefMap,
|
||||
method_map: typeck::MethodMap,
|
||||
tcx: ty::ctxt) {
|
||||
let mut v = CheckCrateVisitor {
|
||||
sess: sess,
|
||||
def_map: def_map,
|
||||
method_map: method_map,
|
||||
tcx: tcx,
|
||||
};
|
||||
visit::walk_crate(&mut v, krate, false);
|
||||
sess.abort_if_errors();
|
||||
tcx.sess.abort_if_errors();
|
||||
}
|
||||
|
||||
pub fn check_item(v: &mut CheckCrateVisitor,
|
||||
sess: Session,
|
||||
def_map: resolve::DefMap,
|
||||
it: &Item,
|
||||
_is_const: bool) {
|
||||
fn check_item(v: &mut CheckCrateVisitor, it: &Item, _is_const: bool) {
|
||||
match it.node {
|
||||
ItemStatic(_, _, ex) => {
|
||||
v.visit_expr(ex, true);
|
||||
check_item_recursion(sess, &v.tcx.map, def_map, it);
|
||||
check_item_recursion(&v.tcx.sess, &v.tcx.map, v.def_map, it);
|
||||
}
|
||||
ItemEnum(ref enum_definition, _) => {
|
||||
for var in (*enum_definition).variants.iter() {
|
||||
@ -77,8 +69,8 @@ pub fn check_item(v: &mut CheckCrateVisitor,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn check_pat(v: &mut CheckCrateVisitor, p: &Pat, _is_const: bool) {
|
||||
fn is_str(e: @Expr) -> bool {
|
||||
fn check_pat(v: &mut CheckCrateVisitor, p: &Pat, _is_const: bool) {
|
||||
fn is_str(e: &Expr) -> bool {
|
||||
match e.node {
|
||||
ExprVstore(expr, ExprVstoreUniq) => {
|
||||
match expr.node {
|
||||
@ -100,36 +92,30 @@ pub fn check_pat(v: &mut CheckCrateVisitor, p: &Pat, _is_const: bool) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn check_expr(v: &mut CheckCrateVisitor,
|
||||
sess: Session,
|
||||
def_map: resolve::DefMap,
|
||||
method_map: typeck::MethodMap,
|
||||
tcx: ty::ctxt,
|
||||
e: &Expr,
|
||||
is_const: bool) {
|
||||
fn check_expr(v: &mut CheckCrateVisitor, e: &Expr, is_const: bool) {
|
||||
if is_const {
|
||||
match e.node {
|
||||
ExprUnary(UnDeref, _) => { }
|
||||
ExprUnary(UnBox, _) | ExprUnary(UnUniq, _) => {
|
||||
sess.span_err(e.span,
|
||||
"cannot do allocations in constant expressions");
|
||||
v.tcx.sess.span_err(e.span,
|
||||
"cannot do allocations in constant expressions");
|
||||
return;
|
||||
}
|
||||
ExprLit(lit) if ast_util::lit_is_str(lit) => {}
|
||||
ExprBinary(..) | ExprUnary(..) => {
|
||||
let method_call = typeck::MethodCall::expr(e.id);
|
||||
if method_map.borrow().get().contains_key(&method_call) {
|
||||
sess.span_err(e.span, "user-defined operators are not \
|
||||
allowed in constant expressions");
|
||||
let method_call = typeck::MethodCall::expr(e.id);
|
||||
if v.method_map.borrow().get().contains_key(&method_call) {
|
||||
v.tcx.sess.span_err(e.span, "user-defined operators are not \
|
||||
allowed in constant expressions");
|
||||
}
|
||||
}
|
||||
ExprLit(_) => (),
|
||||
ExprCast(_, _) => {
|
||||
let ety = ty::expr_ty(tcx, e);
|
||||
let ety = ty::expr_ty(v.tcx, e);
|
||||
if !ty::type_is_numeric(ety) && !ty::type_is_unsafe_ptr(ety) {
|
||||
sess.span_err(e.span, ~"can not cast to `" +
|
||||
ppaux::ty_to_str(tcx, ety) +
|
||||
"` in a constant expression");
|
||||
v.tcx.sess.span_err(e.span, ~"can not cast to `" +
|
||||
ppaux::ty_to_str(v.tcx, ety) +
|
||||
"` in a constant expression");
|
||||
}
|
||||
}
|
||||
ExprPath(ref pth) => {
|
||||
@ -138,12 +124,11 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
|
||||
// foo::<bar> in a const. Currently that is only done on
|
||||
// a path in trans::callee that only works in block contexts.
|
||||
if !pth.segments.iter().all(|segment| segment.types.is_empty()) {
|
||||
sess.span_err(
|
||||
e.span, "paths in constants may only refer to \
|
||||
items without type parameters");
|
||||
v.tcx.sess.span_err(e.span,
|
||||
"paths in constants may only refer to \
|
||||
items without type parameters");
|
||||
}
|
||||
let def_map = def_map.borrow();
|
||||
match def_map.get().find(&e.id) {
|
||||
match v.def_map.borrow().get().find(&e.id) {
|
||||
Some(&DefStatic(..)) |
|
||||
Some(&DefFn(_, _)) |
|
||||
Some(&DefVariant(_, _, _)) |
|
||||
@ -151,24 +136,21 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
|
||||
|
||||
Some(&def) => {
|
||||
debug!("(checking const) found bad def: {:?}", def);
|
||||
sess.span_err(
|
||||
e.span,
|
||||
v.tcx.sess.span_err(e.span,
|
||||
"paths in constants may only refer to \
|
||||
constants or functions");
|
||||
}
|
||||
None => {
|
||||
sess.span_bug(e.span, "unbound path in const?!");
|
||||
v.tcx.sess.span_bug(e.span, "unbound path in const?!");
|
||||
}
|
||||
}
|
||||
}
|
||||
ExprCall(callee, _) => {
|
||||
let def_map = def_map.borrow();
|
||||
match def_map.get().find(&callee.id) {
|
||||
match v.def_map.borrow().get().find(&callee.id) {
|
||||
Some(&DefStruct(..)) => {} // OK.
|
||||
Some(&DefVariant(..)) => {} // OK.
|
||||
_ => {
|
||||
sess.span_err(
|
||||
e.span,
|
||||
v.tcx.sess.span_err(e.span,
|
||||
"function calls in constants are limited to \
|
||||
struct and enum constructors");
|
||||
}
|
||||
@ -184,18 +166,17 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
|
||||
ExprRepeat(..) |
|
||||
ExprStruct(..) => { }
|
||||
ExprAddrOf(..) => {
|
||||
sess.span_err(
|
||||
e.span,
|
||||
v.tcx.sess.span_err(e.span,
|
||||
"references in constants may only refer to \
|
||||
immutable values");
|
||||
},
|
||||
ExprVstore(_, ExprVstoreUniq) => {
|
||||
sess.span_err(e.span, "cannot allocate vectors in constant expressions")
|
||||
v.tcx.sess.span_err(e.span, "cannot allocate vectors in constant expressions")
|
||||
},
|
||||
|
||||
_ => {
|
||||
sess.span_err(e.span,
|
||||
"constant contains unimplemented expression type");
|
||||
v.tcx.sess.span_err(e.span,
|
||||
"constant contains unimplemented expression type");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -205,14 +186,14 @@ pub fn check_expr(v: &mut CheckCrateVisitor,
|
||||
|
||||
struct CheckItemRecursionVisitor<'a> {
|
||||
root_it: &'a Item,
|
||||
sess: Session,
|
||||
sess: &'a Session,
|
||||
ast_map: &'a ast_map::Map,
|
||||
def_map: resolve::DefMap,
|
||||
idstack: Vec<NodeId> }
|
||||
|
||||
// Make sure a const item doesn't recursively refer to itself
|
||||
// FIXME: Should use the dependency graph when it's available (#1356)
|
||||
pub fn check_item_recursion<'a>(sess: Session,
|
||||
pub fn check_item_recursion<'a>(sess: &'a Session,
|
||||
ast_map: &'a ast_map::Map,
|
||||
def_map: resolve::DefMap,
|
||||
it: &'a Item) {
|
||||
|
@ -21,7 +21,7 @@ use syntax::visit;
|
||||
use syntax::visit::Visitor;
|
||||
|
||||
struct EntryContext<'a> {
|
||||
session: Session,
|
||||
session: &'a Session,
|
||||
|
||||
ast_map: &'a ast_map::Map,
|
||||
|
||||
@ -48,7 +48,7 @@ impl<'a> Visitor<()> for EntryContext<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_entry_point(session: Session, krate: &Crate, ast_map: &ast_map::Map) {
|
||||
pub fn find_entry_point(session: &Session, krate: &Crate, ast_map: &ast_map::Map) {
|
||||
if session.building_library.get() {
|
||||
// No need to find a main function
|
||||
return;
|
||||
|
@ -103,27 +103,23 @@ impl LanguageItems {
|
||||
)*
|
||||
}
|
||||
|
||||
struct LanguageItemCollector {
|
||||
struct LanguageItemCollector<'a> {
|
||||
items: LanguageItems,
|
||||
|
||||
session: Session,
|
||||
session: &'a Session,
|
||||
|
||||
item_refs: HashMap<&'static str, uint>,
|
||||
}
|
||||
|
||||
struct LanguageItemVisitor<'a> {
|
||||
this: &'a mut LanguageItemCollector,
|
||||
}
|
||||
|
||||
impl<'a> Visitor<()> for LanguageItemVisitor<'a> {
|
||||
impl<'a> Visitor<()> for LanguageItemCollector<'a> {
|
||||
fn visit_item(&mut self, item: &ast::Item, _: ()) {
|
||||
match extract(item.attrs.as_slice()) {
|
||||
Some(value) => {
|
||||
let item_index = self.this.item_refs.find_equiv(&value).map(|x| *x);
|
||||
let item_index = self.item_refs.find_equiv(&value).map(|x| *x);
|
||||
|
||||
match item_index {
|
||||
Some(item_index) => {
|
||||
self.this.collect_item(item_index, local_def(item.id))
|
||||
self.collect_item(item_index, local_def(item.id))
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
@ -135,8 +131,8 @@ impl<'a> Visitor<()> for LanguageItemVisitor<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl LanguageItemCollector {
|
||||
pub fn new(session: Session) -> LanguageItemCollector {
|
||||
impl<'a> LanguageItemCollector<'a> {
|
||||
pub fn new(session: &'a Session) -> LanguageItemCollector<'a> {
|
||||
let mut item_refs = HashMap::new();
|
||||
|
||||
$( item_refs.insert($name, $variant as uint); )*
|
||||
@ -165,8 +161,7 @@ impl LanguageItemCollector {
|
||||
}
|
||||
|
||||
pub fn collect_local_language_items(&mut self, krate: &ast::Crate) {
|
||||
let mut v = LanguageItemVisitor { this: self };
|
||||
visit::walk_crate(&mut v, krate, ());
|
||||
visit::walk_crate(self, krate, ());
|
||||
}
|
||||
|
||||
pub fn collect_external_language_items(&mut self) {
|
||||
@ -200,7 +195,7 @@ pub fn extract(attrs: &[ast::Attribute]) -> Option<InternedString> {
|
||||
}
|
||||
|
||||
pub fn collect_language_items(krate: &ast::Crate,
|
||||
session: Session) -> @LanguageItems {
|
||||
session: &Session) -> @LanguageItems {
|
||||
let mut collector = LanguageItemCollector::new(session);
|
||||
collector.collect(krate);
|
||||
let LanguageItemCollector { items, .. } = collector;
|
||||
|
@ -530,7 +530,7 @@ impl<'a> Context<'a> {
|
||||
// of what we changed so we can roll everything back after invoking the
|
||||
// specified closure
|
||||
let mut pushed = 0u;
|
||||
each_lint(self.tcx.sess, attrs, |meta, level, lintname| {
|
||||
each_lint(&self.tcx.sess, attrs, |meta, level, lintname| {
|
||||
match self.dict.find_equiv(&lintname) {
|
||||
None => {
|
||||
self.span_lint(
|
||||
@ -594,7 +594,7 @@ impl<'a> Context<'a> {
|
||||
|
||||
// Check that every lint from the list of attributes satisfies `f`.
|
||||
// Return true if that's the case. Otherwise return false.
|
||||
pub fn each_lint(sess: session::Session,
|
||||
pub fn each_lint(sess: &session::Session,
|
||||
attrs: &[ast::Attribute],
|
||||
f: |@ast::MetaItem, level, InternedString| -> bool)
|
||||
-> bool {
|
||||
|
@ -92,7 +92,7 @@ pub struct Context {
|
||||
}
|
||||
|
||||
struct RegionResolutionVisitor<'a> {
|
||||
sess: Session,
|
||||
sess: &'a Session,
|
||||
|
||||
// Generated maps:
|
||||
region_maps: &'a RegionMaps,
|
||||
@ -909,7 +909,7 @@ impl<'a> Visitor<Context> for RegionResolutionVisitor<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn resolve_crate(sess: Session, krate: &ast::Crate) -> RegionMaps {
|
||||
pub fn resolve_crate(sess: &Session, krate: &ast::Crate) -> RegionMaps {
|
||||
let maps = RegionMaps {
|
||||
scope_map: RefCell::new(NodeMap::new()),
|
||||
var_map: RefCell::new(NodeMap::new()),
|
||||
@ -928,7 +928,7 @@ pub fn resolve_crate(sess: Session, krate: &ast::Crate) -> RegionMaps {
|
||||
return maps;
|
||||
}
|
||||
|
||||
pub fn resolve_inlined_item(sess: Session,
|
||||
pub fn resolve_inlined_item(sess: &Session,
|
||||
region_maps: &RegionMaps,
|
||||
item: &ast::InlinedItem) {
|
||||
let cx = Context {parent: None,
|
||||
|
@ -153,7 +153,7 @@ enum NameDefinition {
|
||||
ImportNameDefinition(Def, LastPrivate) //< The name identifies an import.
|
||||
}
|
||||
|
||||
impl Visitor<()> for Resolver {
|
||||
impl<'a> Visitor<()> for Resolver<'a> {
|
||||
fn visit_item(&mut self, item: &Item, _: ()) {
|
||||
self.resolve_item(item);
|
||||
}
|
||||
@ -787,9 +787,9 @@ fn namespace_error_to_str(ns: NamespaceError) -> &'static str {
|
||||
}
|
||||
}
|
||||
|
||||
fn Resolver(session: Session,
|
||||
lang_items: @LanguageItems,
|
||||
crate_span: Span) -> Resolver {
|
||||
fn Resolver<'a>(session: &'a Session,
|
||||
lang_items: @LanguageItems,
|
||||
crate_span: Span) -> Resolver<'a> {
|
||||
let graph_root = @NameBindings();
|
||||
|
||||
graph_root.define_module(NoParentLink,
|
||||
@ -802,7 +802,7 @@ fn Resolver(session: Session,
|
||||
let current_module = graph_root.get_module();
|
||||
|
||||
let this = Resolver {
|
||||
session: @session,
|
||||
session: session,
|
||||
lang_items: lang_items,
|
||||
|
||||
// The outermost module has def ID 0; this is not reflected in the
|
||||
@ -843,8 +843,8 @@ fn Resolver(session: Session,
|
||||
}
|
||||
|
||||
/// The main resolver class.
|
||||
struct Resolver {
|
||||
session: @Session,
|
||||
struct Resolver<'a> {
|
||||
session: &'a Session,
|
||||
lang_items: @LanguageItems,
|
||||
|
||||
graph_root: @NameBindings,
|
||||
@ -896,11 +896,11 @@ struct Resolver {
|
||||
used_imports: HashSet<(NodeId, Namespace)>,
|
||||
}
|
||||
|
||||
struct BuildReducedGraphVisitor<'a> {
|
||||
resolver: &'a mut Resolver,
|
||||
struct BuildReducedGraphVisitor<'a, 'b> {
|
||||
resolver: &'a mut Resolver<'b>,
|
||||
}
|
||||
|
||||
impl<'a> Visitor<ReducedGraphParent> for BuildReducedGraphVisitor<'a> {
|
||||
impl<'a, 'b> Visitor<ReducedGraphParent> for BuildReducedGraphVisitor<'a, 'b> {
|
||||
|
||||
fn visit_item(&mut self, item: &Item, context: ReducedGraphParent) {
|
||||
let p = self.resolver.build_reduced_graph_for_item(item, context);
|
||||
@ -928,16 +928,16 @@ impl<'a> Visitor<ReducedGraphParent> for BuildReducedGraphVisitor<'a> {
|
||||
|
||||
}
|
||||
|
||||
struct UnusedImportCheckVisitor<'a> { resolver: &'a mut Resolver }
|
||||
struct UnusedImportCheckVisitor<'a, 'b> { resolver: &'a mut Resolver<'b> }
|
||||
|
||||
impl<'a> Visitor<()> for UnusedImportCheckVisitor<'a> {
|
||||
impl<'a, 'b> Visitor<()> for UnusedImportCheckVisitor<'a, 'b> {
|
||||
fn visit_view_item(&mut self, vi: &ViewItem, _: ()) {
|
||||
self.resolver.check_for_item_unused_imports(vi);
|
||||
visit::walk_view_item(self, vi, ());
|
||||
}
|
||||
}
|
||||
|
||||
impl Resolver {
|
||||
impl<'a> Resolver<'a> {
|
||||
/// The main name resolution procedure.
|
||||
fn resolve(&mut self, krate: &ast::Crate) {
|
||||
self.build_reduced_graph(krate);
|
||||
@ -5571,7 +5571,7 @@ pub struct CrateMap {
|
||||
}
|
||||
|
||||
/// Entry point to crate resolution.
|
||||
pub fn resolve_crate(session: Session,
|
||||
pub fn resolve_crate(session: &Session,
|
||||
lang_items: @LanguageItems,
|
||||
krate: &Crate)
|
||||
-> CrateMap {
|
||||
|
@ -17,7 +17,7 @@
|
||||
* way. Therefore we break lifetime name resolution into a separate pass.
|
||||
*/
|
||||
|
||||
use driver::session;
|
||||
use driver::session::Session;
|
||||
use std::cell::RefCell;
|
||||
use std::vec_ng::Vec;
|
||||
use util::nodemap::NodeMap;
|
||||
@ -40,8 +40,8 @@ fn lifetime_show(lt_name: &ast::Name) -> token::InternedString {
|
||||
token::get_name(*lt_name)
|
||||
}
|
||||
|
||||
struct LifetimeContext {
|
||||
sess: session::Session,
|
||||
struct LifetimeContext<'a> {
|
||||
sess: &'a Session,
|
||||
named_region_map: @RefCell<NamedRegionMap>,
|
||||
}
|
||||
|
||||
@ -60,8 +60,7 @@ enum ScopeChain<'a> {
|
||||
|
||||
type Scope<'a> = &'a ScopeChain<'a>;
|
||||
|
||||
pub fn krate(sess: session::Session, krate: &ast::Crate)
|
||||
-> @RefCell<NamedRegionMap> {
|
||||
pub fn krate(sess: &Session, krate: &ast::Crate) -> @RefCell<NamedRegionMap> {
|
||||
let mut ctxt = LifetimeContext {
|
||||
sess: sess,
|
||||
named_region_map: @RefCell::new(NodeMap::new())
|
||||
@ -71,7 +70,7 @@ pub fn krate(sess: session::Session, krate: &ast::Crate)
|
||||
ctxt.named_region_map
|
||||
}
|
||||
|
||||
impl<'a> Visitor<Scope<'a>> for LifetimeContext {
|
||||
impl<'a, 'b> Visitor<Scope<'a>> for LifetimeContext<'b> {
|
||||
fn visit_item(&mut self,
|
||||
item: &ast::Item,
|
||||
_: Scope<'a>) {
|
||||
@ -181,7 +180,7 @@ impl<'a> ScopeChain<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl LifetimeContext {
|
||||
impl<'a> LifetimeContext<'a> {
|
||||
/// Visits self by adding a scope and handling recursive walk over the contents with `walk`.
|
||||
fn visit_fn_decl(&mut self,
|
||||
n: ast::NodeId,
|
||||
|
@ -373,7 +373,7 @@ fn variant_opt(bcx: &Block, pat_id: ast::NodeId) -> Opt {
|
||||
return lit(UnitLikeStructLit(pat_id));
|
||||
}
|
||||
_ => {
|
||||
ccx.sess.bug("non-variant or struct in variant_opt()");
|
||||
ccx.sess().bug("non-variant or struct in variant_opt()");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1324,8 +1324,7 @@ fn compare_values<'a>(
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
cx.tcx().sess.bug("only scalars and strings supported in \
|
||||
compare_values");
|
||||
cx.sess().bug("only scalars and strings supported in compare_values");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1585,7 +1584,7 @@ fn compile_submatch_continue<'r,
|
||||
let tup_repr = adt::represent_type(bcx.ccx(), tup_ty);
|
||||
let n_tup_elts = match ty::get(tup_ty).sty {
|
||||
ty::ty_tup(ref elts) => elts.len(),
|
||||
_ => ccx.sess.bug("non-tuple type in tuple pattern")
|
||||
_ => ccx.sess().bug("non-tuple type in tuple pattern")
|
||||
};
|
||||
let tup_vals = Vec::from_fn(n_tup_elts, |i| {
|
||||
adt::trans_field_ptr(bcx, tup_repr, val, 0, i)
|
||||
@ -1612,7 +1611,7 @@ fn compile_submatch_continue<'r,
|
||||
ty::lookup_struct_fields(tcx, struct_id).len();
|
||||
}
|
||||
_ => {
|
||||
ccx.sess.bug("non-struct type in tuple struct pattern");
|
||||
ccx.sess().bug("non-struct type in tuple struct pattern");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2093,7 +2092,7 @@ pub fn store_arg<'a>(mut bcx: &'a Block<'a>,
|
||||
// like `x: T`
|
||||
let arg_ty = node_id_type(bcx, pat.id);
|
||||
if type_of::arg_is_indirect(bcx.ccx(), arg_ty)
|
||||
&& bcx.ccx().sess.opts.debuginfo != FullDebugInfo {
|
||||
&& bcx.sess().opts.debuginfo != FullDebugInfo {
|
||||
// Don't copy an indirect argument to an alloca, the caller
|
||||
// already put it in a temporary alloca and gave it up, unless
|
||||
// we emit extra-debug-info, which requires local allocas :(.
|
||||
@ -2297,8 +2296,7 @@ fn bind_irrefutable_pat<'a>(
|
||||
bcx = bind_irrefutable_pat(bcx, inner, loaded_val, binding_mode, cleanup_scope);
|
||||
}
|
||||
ast::PatVec(..) => {
|
||||
bcx.tcx().sess.span_bug(
|
||||
pat.span,
|
||||
bcx.sess().span_bug(pat.span,
|
||||
format!("vector patterns are never irrefutable!"));
|
||||
}
|
||||
ast::PatWild | ast::PatWildMulti | ast::PatLit(_) | ast::PatRange(_, _) => ()
|
||||
|
@ -177,9 +177,9 @@ fn represent_type_uncached(cx: &CrateContext, t: ty::t) -> Repr {
|
||||
// non-empty body, explicit discriminants should have
|
||||
// been rejected by a checker before this point.
|
||||
if !cases.iter().enumerate().all(|(i,c)| c.discr == (i as Disr)) {
|
||||
cx.sess.bug(format!("non-C-like enum {} with specified \
|
||||
discriminants",
|
||||
ty::item_path_str(cx.tcx, def_id)))
|
||||
cx.sess().bug(format!("non-C-like enum {} with specified \
|
||||
discriminants",
|
||||
ty::item_path_str(cx.tcx, def_id)))
|
||||
}
|
||||
|
||||
if cases.len() == 1 {
|
||||
@ -230,7 +230,7 @@ fn represent_type_uncached(cx: &CrateContext, t: ty::t) -> Repr {
|
||||
false)
|
||||
}))
|
||||
}
|
||||
_ => cx.sess.bug("adt::represent_type called on non-ADT type")
|
||||
_ => cx.sess().bug("adt::represent_type called on non-ADT type")
|
||||
}
|
||||
}
|
||||
|
||||
@ -324,12 +324,12 @@ fn range_to_inttype(cx: &CrateContext, hint: Hint, bounds: &IntBounds) -> IntTyp
|
||||
match hint {
|
||||
attr::ReprInt(span, ity) => {
|
||||
if !bounds_usable(cx, ity, bounds) {
|
||||
cx.sess.span_bug(span, "representation hint insufficient for discriminant range")
|
||||
cx.sess().span_bug(span, "representation hint insufficient for discriminant range")
|
||||
}
|
||||
return ity;
|
||||
}
|
||||
attr::ReprExtern => {
|
||||
attempts = match cx.sess.targ_cfg.arch {
|
||||
attempts = match cx.sess().targ_cfg.arch {
|
||||
X86 | X86_64 => at_least_32,
|
||||
// WARNING: the ARM EABI has two variants; the one corresponding to `at_least_32`
|
||||
// appears to be used on Linux and NetBSD, but some systems may use the variant
|
||||
@ -577,7 +577,7 @@ pub fn trans_case<'a>(bcx: &'a Block<'a>, r: &Repr, discr: Disr)
|
||||
discr as u64, true)))
|
||||
}
|
||||
Univariant(..) => {
|
||||
bcx.ccx().sess.bug("no cases for univariants or structs")
|
||||
bcx.ccx().sess().bug("no cases for univariants or structs")
|
||||
}
|
||||
NullablePointer{ .. } => {
|
||||
assert!(discr == 0 || discr == 1);
|
||||
@ -651,7 +651,7 @@ pub fn num_args(r: &Repr, discr: Disr) -> uint {
|
||||
pub fn deref_ty(ccx: &CrateContext, r: &Repr) -> ty::t {
|
||||
match *r {
|
||||
CEnum(..) => {
|
||||
ccx.sess.bug("deref of c-like enum")
|
||||
ccx.sess().bug("deref of c-like enum")
|
||||
}
|
||||
Univariant(ref st, _) => {
|
||||
*st.fields.get(0)
|
||||
@ -661,7 +661,7 @@ pub fn deref_ty(ccx: &CrateContext, r: &Repr) -> ty::t {
|
||||
*cases.get(0).fields.get(0)
|
||||
}
|
||||
NullablePointer{ .. } => {
|
||||
ccx.sess.bug("deref of nullable ptr")
|
||||
ccx.sess().bug("deref of nullable ptr")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -674,7 +674,7 @@ pub fn trans_field_ptr(bcx: &Block, r: &Repr, val: ValueRef, discr: Disr,
|
||||
// someday), it will need to return a possibly-new bcx as well.
|
||||
match *r {
|
||||
CEnum(..) => {
|
||||
bcx.ccx().sess.bug("element access in C-like enum")
|
||||
bcx.ccx().sess().bug("element access in C-like enum")
|
||||
}
|
||||
Univariant(ref st, _dtor) => {
|
||||
assert_eq!(discr, 0);
|
||||
@ -719,7 +719,7 @@ fn struct_field_ptr(bcx: &Block, st: &Struct, val: ValueRef, ix: uint,
|
||||
pub fn trans_drop_flag_ptr(bcx: &Block, r: &Repr, val: ValueRef) -> ValueRef {
|
||||
match *r {
|
||||
Univariant(ref st, true) => GEPi(bcx, val, [0, st.fields.len() - 1]),
|
||||
_ => bcx.ccx().sess.bug("tried to get drop flag of non-droppable type")
|
||||
_ => bcx.ccx().sess().bug("tried to get drop flag of non-droppable type")
|
||||
}
|
||||
}
|
||||
|
||||
@ -874,7 +874,7 @@ pub fn const_get_discrim(ccx: &CrateContext, r: &Repr, val: ValueRef)
|
||||
pub fn const_get_field(ccx: &CrateContext, r: &Repr, val: ValueRef,
|
||||
_discr: Disr, ix: uint) -> ValueRef {
|
||||
match *r {
|
||||
CEnum(..) => ccx.sess.bug("element access in C-like enum const"),
|
||||
CEnum(..) => ccx.sess().bug("element access in C-like enum const"),
|
||||
Univariant(..) => const_struct_field(ccx, val, ix),
|
||||
General(..) => const_struct_field(ccx, val, ix + 1),
|
||||
NullablePointer{ .. } => const_struct_field(ccx, val, ix)
|
||||
|
@ -144,7 +144,7 @@ pub struct StatRecorder {
|
||||
|
||||
impl StatRecorder {
|
||||
pub fn new(ccx: @CrateContext, name: ~str) -> StatRecorder {
|
||||
let start = if ccx.sess.trans_stats() {
|
||||
let start = if ccx.sess().trans_stats() {
|
||||
time::precise_time_ns()
|
||||
} else {
|
||||
0
|
||||
@ -162,7 +162,7 @@ impl StatRecorder {
|
||||
#[unsafe_destructor]
|
||||
impl Drop for StatRecorder {
|
||||
fn drop(&mut self) {
|
||||
if self.ccx.sess.trans_stats() {
|
||||
if self.ccx.sess().trans_stats() {
|
||||
let end = time::precise_time_ns();
|
||||
let elapsed = ((end - self.start) / 1_000_000) as uint;
|
||||
let iend = self.ccx.stats.n_llvm_insns.get();
|
||||
@ -355,8 +355,8 @@ pub fn malloc_raw_dyn<'a>(
|
||||
match li.require(it) {
|
||||
Ok(id) => id,
|
||||
Err(s) => {
|
||||
bcx.tcx().sess.fatal(format!("allocation of `{}` {}",
|
||||
bcx.ty_to_str(t), s));
|
||||
bcx.sess().fatal(format!("allocation of `{}` {}",
|
||||
bcx.ty_to_str(t), s));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -522,7 +522,7 @@ pub fn set_no_split_stack(f: ValueRef) {
|
||||
pub fn note_unique_llvm_symbol(ccx: &CrateContext, sym: ~str) {
|
||||
let mut all_llvm_symbols = ccx.all_llvm_symbols.borrow_mut();
|
||||
if all_llvm_symbols.get().contains(&sym) {
|
||||
ccx.sess.bug(~"duplicate LLVM symbol: " + sym);
|
||||
ccx.sess().bug(~"duplicate LLVM symbol: " + sym);
|
||||
}
|
||||
all_llvm_symbols.get().insert(sym);
|
||||
}
|
||||
@ -555,7 +555,7 @@ pub fn get_res_dtor(ccx: @CrateContext,
|
||||
get_item_val(ccx, did.node)
|
||||
} else {
|
||||
let tcx = ccx.tcx;
|
||||
let name = csearch::get_symbol(ccx.sess.cstore, did);
|
||||
let name = csearch::get_symbol(ccx.sess().cstore, did);
|
||||
let class_ty = ty::subst_tps(tcx,
|
||||
substs,
|
||||
None,
|
||||
@ -572,7 +572,7 @@ pub fn get_res_dtor(ccx: @CrateContext,
|
||||
|
||||
// Structural comparison: a rather involved form of glue.
|
||||
pub fn maybe_name_value(cx: &CrateContext, v: ValueRef, s: &str) {
|
||||
if cx.sess.opts.cg.save_temps {
|
||||
if cx.sess().opts.cg.save_temps {
|
||||
s.with_c_str(|buf| {
|
||||
unsafe {
|
||||
llvm::LLVMSetValueName(v, buf)
|
||||
@ -617,8 +617,7 @@ pub fn compare_scalar_values<'a>(
|
||||
-> ValueRef {
|
||||
let _icx = push_ctxt("compare_scalar_values");
|
||||
fn die(cx: &Block) -> ! {
|
||||
cx.tcx().sess.bug("compare_scalar_values: must be a\
|
||||
comparison operator");
|
||||
cx.sess().bug("compare_scalar_values: must be a comparison operator");
|
||||
}
|
||||
match nt {
|
||||
nil_type => {
|
||||
@ -772,8 +771,8 @@ pub fn iter_structural_ty<'r,
|
||||
_match::single_result(r) => {
|
||||
AddCase(llswitch, r.val, variant_cx.llbb)
|
||||
}
|
||||
_ => ccx.sess.unimpl("value from adt::trans_case \
|
||||
in iter_structural_ty")
|
||||
_ => ccx.sess().unimpl("value from adt::trans_case \
|
||||
in iter_structural_ty")
|
||||
}
|
||||
let variant_cx =
|
||||
iter_variant(variant_cx,
|
||||
@ -786,8 +785,8 @@ pub fn iter_structural_ty<'r,
|
||||
}
|
||||
cx = next_cx;
|
||||
}
|
||||
_ => ccx.sess.unimpl("value from adt::trans_switch \
|
||||
in iter_structural_ty")
|
||||
_ => ccx.sess().unimpl("value from adt::trans_switch \
|
||||
in iter_structural_ty")
|
||||
}
|
||||
}
|
||||
_ => cx.sess().unimpl("type in iter_structural_ty")
|
||||
@ -865,8 +864,8 @@ pub fn fail_if_zero<'a>(
|
||||
ICmp(cx, lib::llvm::IntEQ, rhs, zero)
|
||||
}
|
||||
_ => {
|
||||
cx.tcx().sess.bug(~"fail-if-zero on unexpected type: " +
|
||||
ty_to_str(cx.ccx().tcx, rhs_t));
|
||||
cx.sess().bug(~"fail-if-zero on unexpected type: " +
|
||||
ty_to_str(cx.ccx().tcx, rhs_t));
|
||||
}
|
||||
};
|
||||
with_cond(cx, is_zero, |bcx| {
|
||||
@ -875,11 +874,11 @@ pub fn fail_if_zero<'a>(
|
||||
}
|
||||
|
||||
pub fn trans_external_path(ccx: &CrateContext, did: ast::DefId, t: ty::t) -> ValueRef {
|
||||
let name = csearch::get_symbol(ccx.sess.cstore, did);
|
||||
let name = csearch::get_symbol(ccx.sess().cstore, did);
|
||||
match ty::get(t).sty {
|
||||
ty::ty_bare_fn(ref fn_ty) => {
|
||||
match fn_ty.abis.for_target(ccx.sess.targ_cfg.os,
|
||||
ccx.sess.targ_cfg.arch) {
|
||||
match fn_ty.abis.for_target(ccx.sess().targ_cfg.os,
|
||||
ccx.sess().targ_cfg.arch) {
|
||||
Some(Rust) | Some(RustIntrinsic) => {
|
||||
get_extern_rust_fn(ccx,
|
||||
fn_ty.sig.inputs.as_slice(),
|
||||
@ -970,7 +969,7 @@ pub fn invoke<'a>(
|
||||
}
|
||||
|
||||
pub fn need_invoke(bcx: &Block) -> bool {
|
||||
if bcx.ccx().sess.no_landing_pads() {
|
||||
if bcx.sess().no_landing_pads() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1081,7 +1080,7 @@ pub fn with_cond<'a>(
|
||||
pub fn call_memcpy(cx: &Block, dst: ValueRef, src: ValueRef, n_bytes: ValueRef, align: u32) {
|
||||
let _icx = push_ctxt("call_memcpy");
|
||||
let ccx = cx.ccx();
|
||||
let key = match ccx.sess.targ_cfg.arch {
|
||||
let key = match ccx.sess().targ_cfg.arch {
|
||||
X86 | Arm | Mips => "llvm.memcpy.p0i8.p0i8.i32",
|
||||
X86_64 => "llvm.memcpy.p0i8.p0i8.i64"
|
||||
};
|
||||
@ -1125,7 +1124,7 @@ fn memzero(b: &Builder, llptr: ValueRef, ty: Type) {
|
||||
let _icx = push_ctxt("memzero");
|
||||
let ccx = b.ccx;
|
||||
|
||||
let intrinsic_key = match ccx.sess.targ_cfg.arch {
|
||||
let intrinsic_key = match ccx.sess().targ_cfg.arch {
|
||||
X86 | Arm | Mips => "llvm.memset.p0i8.i32",
|
||||
X86_64 => "llvm.memset.p0i8.i64"
|
||||
};
|
||||
@ -1384,7 +1383,7 @@ fn copy_args_to_allocas<'a>(fcx: &FunctionContext<'a>,
|
||||
|
||||
bcx = _match::store_arg(bcx, args[i].pat, arg_datum, arg_scope_id);
|
||||
|
||||
if fcx.ccx.sess.opts.debuginfo == FullDebugInfo {
|
||||
if fcx.ccx.sess().opts.debuginfo == FullDebugInfo {
|
||||
debuginfo::create_argument_metadata(bcx, &args[i]);
|
||||
}
|
||||
}
|
||||
@ -1615,7 +1614,7 @@ fn trans_enum_variant_or_tuple_like_struct(ccx: @CrateContext,
|
||||
|
||||
let result_ty = match ty::get(ctor_ty).sty {
|
||||
ty::ty_bare_fn(ref bft) => bft.sig.output,
|
||||
_ => ccx.sess.bug(
|
||||
_ => ccx.sess().bug(
|
||||
format!("trans_enum_variant_or_tuple_like_struct: \
|
||||
unexpected ctor return type {}",
|
||||
ty_to_str(ccx.tcx, ctor_ty)))
|
||||
@ -1724,16 +1723,16 @@ pub fn trans_item(ccx: @CrateContext, item: &ast::Item) {
|
||||
// because we need to get the value of the bool out of LLVM
|
||||
if attr::contains_name(item.attrs.as_slice(), "static_assert") {
|
||||
if m == ast::MutMutable {
|
||||
ccx.sess.span_fatal(expr.span,
|
||||
"cannot have static_assert on a mutable \
|
||||
static");
|
||||
ccx.sess().span_fatal(expr.span,
|
||||
"cannot have static_assert on a mutable \
|
||||
static");
|
||||
}
|
||||
|
||||
let const_values = ccx.const_values.borrow();
|
||||
let v = const_values.get().get_copy(&item.id);
|
||||
unsafe {
|
||||
if !(llvm::LLVMConstIntGetZExtValue(v) != 0) {
|
||||
ccx.sess.span_fatal(expr.span, "static assertion failed");
|
||||
ccx.sess().span_fatal(expr.span, "static assertion failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1798,7 +1797,7 @@ fn finish_register_fn(ccx: @CrateContext, sp: Span, sym: ~str, node_id: ast::Nod
|
||||
}
|
||||
}
|
||||
|
||||
if is_entry_fn(&ccx.sess, node_id) && !ccx.sess.building_library.get() {
|
||||
if is_entry_fn(ccx.sess(), node_id) && !ccx.sess().building_library.get() {
|
||||
create_entry_wrapper(ccx, sp, llfn);
|
||||
}
|
||||
}
|
||||
@ -1853,7 +1852,7 @@ pub fn is_entry_fn(sess: &Session, node_id: ast::NodeId) -> bool {
|
||||
pub fn create_entry_wrapper(ccx: @CrateContext,
|
||||
_sp: Span,
|
||||
main_llfn: ValueRef) {
|
||||
let et = ccx.sess.entry_type.get().unwrap();
|
||||
let et = ccx.sess().entry_type.get().unwrap();
|
||||
match et {
|
||||
session::EntryMain => {
|
||||
create_entry_fn(ccx, main_llfn, true);
|
||||
@ -1881,7 +1880,7 @@ pub fn create_entry_wrapper(ccx: @CrateContext,
|
||||
let (start_fn, args) = if use_start_lang_item {
|
||||
let start_def_id = match ccx.tcx.lang_items.require(StartFnLangItem) {
|
||||
Ok(id) => id,
|
||||
Err(s) => { ccx.tcx.sess.fatal(s); }
|
||||
Err(s) => { ccx.sess().fatal(s); }
|
||||
};
|
||||
let start_fn = if start_def_id.krate == ast::LOCAL_CRATE {
|
||||
get_item_val(ccx, start_def_id.node)
|
||||
@ -1973,7 +1972,7 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::NodeId) -> ValueRef {
|
||||
match external_srcs.get().find(&i.id) {
|
||||
Some(&did) => {
|
||||
debug!("but found in other crate...");
|
||||
(csearch::get_symbol(ccx.sess.cstore,
|
||||
(csearch::get_symbol(ccx.sess().cstore,
|
||||
did), false)
|
||||
}
|
||||
None => (sym, true)
|
||||
@ -2013,7 +2012,7 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::NodeId) -> ValueRef {
|
||||
let reachable =
|
||||
ccx.reachable.borrow();
|
||||
if reachable.get().contains(&id) {
|
||||
ccx.sess.span_bug(i.span,
|
||||
ccx.sess().span_bug(i.span,
|
||||
"insignificant static is \
|
||||
reachable");
|
||||
}
|
||||
@ -2093,8 +2092,8 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::NodeId) -> ValueRef {
|
||||
debug!("get_item_val(): processing a NodeTraitMethod");
|
||||
match *trait_method {
|
||||
ast::Required(_) => {
|
||||
ccx.sess.bug("unexpected variant: required trait method in \
|
||||
get_item_val()");
|
||||
ccx.sess().bug("unexpected variant: required trait method in \
|
||||
get_item_val()");
|
||||
}
|
||||
ast::Provided(m) => {
|
||||
register_method(ccx, id, m)
|
||||
@ -2152,8 +2151,8 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::NodeId) -> ValueRef {
|
||||
// Only register the constructor if this is a tuple-like struct.
|
||||
match struct_def.ctor_id {
|
||||
None => {
|
||||
ccx.tcx.sess.bug("attempt to register a constructor of \
|
||||
a non-tuple-like struct")
|
||||
ccx.sess().bug("attempt to register a constructor of \
|
||||
a non-tuple-like struct")
|
||||
}
|
||||
Some(ctor_id) => {
|
||||
let parent = ccx.tcx.map.get_parent(id);
|
||||
@ -2173,8 +2172,8 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::NodeId) -> ValueRef {
|
||||
}
|
||||
|
||||
ref variant => {
|
||||
ccx.sess.bug(format!("get_item_val(): unexpected variant: {:?}",
|
||||
variant))
|
||||
ccx.sess().bug(format!("get_item_val(): unexpected variant: {:?}",
|
||||
variant))
|
||||
}
|
||||
};
|
||||
|
||||
@ -2409,7 +2408,7 @@ pub fn symname(name: &str, hash: &str, vers: &str) -> ~str {
|
||||
link::exported_name(ast_map::Values(path.iter()).chain(None), hash, vers)
|
||||
}
|
||||
|
||||
pub fn decl_crate_map(sess: session::Session, mapmeta: LinkMeta,
|
||||
pub fn decl_crate_map(sess: &Session, mapmeta: LinkMeta,
|
||||
llmod: ModuleRef) -> (~str, ValueRef) {
|
||||
let targ_cfg = sess.targ_cfg;
|
||||
let int_type = Type::int(targ_cfg.arch);
|
||||
@ -2452,7 +2451,7 @@ pub fn fill_crate_map(ccx: @CrateContext, map: ValueRef) {
|
||||
llvm::LLVMConstPointerCast(get_item_val(ccx, did.node),
|
||||
ccx.int_type.ptr_to().to_ref())
|
||||
} else {
|
||||
let name = csearch::get_symbol(ccx.sess.cstore, did);
|
||||
let name = csearch::get_symbol(ccx.sess().cstore, did);
|
||||
let global = name.with_c_str(|buf| {
|
||||
llvm::LLVMAddGlobal(ccx.llmod, ccx.int_type.to_ref(), buf)
|
||||
});
|
||||
@ -2472,7 +2471,7 @@ pub fn fill_crate_map(ccx: @CrateContext, map: ValueRef) {
|
||||
pub fn crate_ctxt_to_encode_parms<'r>(cx: &'r CrateContext, ie: encoder::EncodeInlinedItem<'r>)
|
||||
-> encoder::EncodeParams<'r> {
|
||||
|
||||
let diag = cx.sess.diagnostic();
|
||||
let diag = cx.sess().diagnostic();
|
||||
let item_symbols = &cx.item_symbols;
|
||||
let link_meta = &cx.link_meta;
|
||||
encoder::EncodeParams {
|
||||
@ -2482,7 +2481,7 @@ pub fn crate_ctxt_to_encode_parms<'r>(cx: &'r CrateContext, ie: encoder::EncodeI
|
||||
item_symbols: item_symbols,
|
||||
non_inlineable_statics: &cx.non_inlineable_statics,
|
||||
link_meta: link_meta,
|
||||
cstore: cx.sess.cstore,
|
||||
cstore: cx.sess().cstore,
|
||||
encode_inlined_item: ie,
|
||||
}
|
||||
}
|
||||
@ -2490,7 +2489,7 @@ pub fn crate_ctxt_to_encode_parms<'r>(cx: &'r CrateContext, ie: encoder::EncodeI
|
||||
pub fn write_metadata(cx: &CrateContext, krate: &ast::Crate) -> Vec<u8> {
|
||||
use flate;
|
||||
|
||||
if !cx.sess.building_library.get() {
|
||||
if !cx.sess().building_library.get() {
|
||||
return Vec::new()
|
||||
}
|
||||
|
||||
@ -2512,15 +2511,14 @@ pub fn write_metadata(cx: &CrateContext, krate: &ast::Crate) -> Vec<u8> {
|
||||
});
|
||||
unsafe {
|
||||
llvm::LLVMSetInitializer(llglobal, llconst);
|
||||
cx.sess.targ_cfg.target_strs.meta_sect_name.with_c_str(|buf| {
|
||||
cx.sess().targ_cfg.target_strs.meta_sect_name.with_c_str(|buf| {
|
||||
llvm::LLVMSetSection(llglobal, buf)
|
||||
});
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
|
||||
pub fn trans_crate(sess: session::Session,
|
||||
krate: ast::Crate,
|
||||
pub fn trans_crate(krate: ast::Crate,
|
||||
analysis: &CrateAnalysis,
|
||||
output: &OutputFilenames) -> CrateTranslation {
|
||||
// Before we touch LLVM, make sure that multithreading is enabled.
|
||||
@ -2537,7 +2535,7 @@ pub fn trans_crate(sess: session::Session,
|
||||
});
|
||||
|
||||
if POISONED {
|
||||
sess.bug("couldn't enable multi-threaded LLVM");
|
||||
analysis.ty_cx.sess.bug("couldn't enable multi-threaded LLVM");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2553,8 +2551,7 @@ pub fn trans_crate(sess: session::Session,
|
||||
// 1. http://llvm.org/bugs/show_bug.cgi?id=11479
|
||||
let llmod_id = link_meta.crateid.name + ".rs";
|
||||
|
||||
let ccx = @CrateContext::new(sess,
|
||||
llmod_id,
|
||||
let ccx = @CrateContext::new(llmod_id,
|
||||
analysis.ty_cx,
|
||||
analysis.exp_map2,
|
||||
analysis.maps,
|
||||
@ -2574,7 +2571,7 @@ pub fn trans_crate(sess: session::Session,
|
||||
// __rust_crate_map_toplevel symbol (extra underscore) which it will
|
||||
// subsequently fail to find. So to mitigate that we just introduce
|
||||
// an alias from the symbol it expects to the one that actually exists.
|
||||
if ccx.sess.targ_cfg.os == OsWin32 && !ccx.sess.building_library.get() {
|
||||
if ccx.sess().targ_cfg.os == OsWin32 && !ccx.sess().building_library.get() {
|
||||
|
||||
let maptype = val_ty(ccx.crate_map).to_ref();
|
||||
|
||||
@ -2587,13 +2584,13 @@ pub fn trans_crate(sess: session::Session,
|
||||
}
|
||||
|
||||
glue::emit_tydescs(ccx);
|
||||
if ccx.sess.opts.debuginfo != NoDebugInfo {
|
||||
if ccx.sess().opts.debuginfo != NoDebugInfo {
|
||||
debuginfo::finalize(ccx);
|
||||
}
|
||||
|
||||
// Translate the metadata.
|
||||
let metadata = write_metadata(ccx, &krate);
|
||||
if ccx.sess.trans_stats() {
|
||||
if ccx.sess().trans_stats() {
|
||||
println!("--- trans stats ---");
|
||||
println!("n_static_tydescs: {}", ccx.stats.n_static_tydescs.get());
|
||||
println!("n_glues_created: {}", ccx.stats.n_glues_created.get());
|
||||
@ -2619,7 +2616,7 @@ pub fn trans_crate(sess: session::Session,
|
||||
}
|
||||
}
|
||||
}
|
||||
if ccx.sess.count_llvm_insns() {
|
||||
if ccx.sess().count_llvm_insns() {
|
||||
let llvm_insns = ccx.stats.llvm_insns.borrow();
|
||||
for (k, v) in llvm_insns.get().iter() {
|
||||
println!("{:7u} {}", *v, *k);
|
||||
|
@ -44,13 +44,13 @@ impl<'a> Builder<'a> {
|
||||
}
|
||||
|
||||
pub fn count_insn(&self, category: &str) {
|
||||
if self.ccx.sess.trans_stats() {
|
||||
if self.ccx.sess().trans_stats() {
|
||||
self.ccx.stats.n_llvm_insns.set(self.ccx
|
||||
.stats
|
||||
.n_llvm_insns
|
||||
.get() + 1);
|
||||
}
|
||||
if self.ccx.sess.count_llvm_insns() {
|
||||
if self.ccx.sess().count_llvm_insns() {
|
||||
base::with_insn_ctxt(|v| {
|
||||
let mut h = self.ccx.stats.llvm_insns.borrow_mut();
|
||||
|
||||
@ -748,15 +748,15 @@ impl<'a> Builder<'a> {
|
||||
}
|
||||
|
||||
pub fn add_span_comment(&self, sp: Span, text: &str) {
|
||||
if self.ccx.sess.asm_comments() {
|
||||
let s = format!("{} ({})", text, self.ccx.sess.codemap.span_to_str(sp));
|
||||
if self.ccx.sess().asm_comments() {
|
||||
let s = format!("{} ({})", text, self.ccx.sess().codemap.span_to_str(sp));
|
||||
debug!("{}", s);
|
||||
self.add_comment(s);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_comment(&self, text: &str) {
|
||||
if self.ccx.sess.asm_comments() {
|
||||
if self.ccx.sess().asm_comments() {
|
||||
let sanitized = text.replace("$", "");
|
||||
let comment_text = format!("\\# {}", sanitized.replace("\n", "\n\t# "));
|
||||
self.count_insn("inlineasm");
|
||||
|
@ -94,7 +94,7 @@ pub fn compute_abi_info(ccx: &CrateContext,
|
||||
atys: &[Type],
|
||||
rty: Type,
|
||||
ret_def: bool) -> FnType {
|
||||
match ccx.sess.targ_cfg.arch {
|
||||
match ccx.sess().targ_cfg.arch {
|
||||
X86 => cabi_x86::compute_abi_info(ccx, atys, rty, ret_def),
|
||||
X86_64 => cabi_x86_64::compute_abi_info(ccx, atys, rty, ret_def),
|
||||
Arm => cabi_arm::compute_abi_info(ccx, atys, rty, ret_def),
|
||||
|
@ -36,7 +36,7 @@ pub fn compute_abi_info(ccx: &CrateContext,
|
||||
// Clang's ABI handling is in lib/CodeGen/TargetInfo.cpp
|
||||
|
||||
enum Strategy { RetValue(Type), RetPointer }
|
||||
let strategy = match ccx.sess.targ_cfg.os {
|
||||
let strategy = match ccx.sess().targ_cfg.os {
|
||||
OsWin32 | OsMacos => {
|
||||
match llsize_of_alloc(ccx, rty) {
|
||||
1 => RetValue(Type::i8()),
|
||||
|
@ -365,7 +365,7 @@ pub fn trans_fn_ref_with_vtables(
|
||||
true
|
||||
} else if def_id.krate == ast::LOCAL_CRATE {
|
||||
let map_node = session::expect(
|
||||
ccx.sess,
|
||||
ccx.sess(),
|
||||
ccx.tcx.map.find(def_id.node),
|
||||
|| format!("local item should be in ast map"));
|
||||
|
||||
|
@ -227,7 +227,7 @@ pub fn store_environment<'a>(
|
||||
for (i, bv) in bound_values.move_iter().enumerate() {
|
||||
debug!("Copy {} into closure", bv.to_str(ccx));
|
||||
|
||||
if ccx.sess.asm_comments() {
|
||||
if ccx.sess().asm_comments() {
|
||||
add_comment(bcx, format!("Copy {} into closure",
|
||||
bv.to_str(ccx)));
|
||||
}
|
||||
@ -301,7 +301,7 @@ fn load_environment<'a>(bcx: &'a Block<'a>, cdata_ty: ty::t,
|
||||
|
||||
// Store the pointer to closure data in an alloca for debug info because that's what the
|
||||
// llvm.dbg.declare intrinsic expects
|
||||
let env_pointer_alloca = if bcx.ccx().sess.opts.debuginfo == FullDebugInfo {
|
||||
let env_pointer_alloca = if bcx.sess().opts.debuginfo == FullDebugInfo {
|
||||
let alloc = alloc_ty(bcx, ty::mk_mut_ptr(bcx.tcx(), cdata_ty), "__debuginfo_env_ptr");
|
||||
Store(bcx, llcdata, alloc);
|
||||
Some(alloc)
|
||||
@ -419,9 +419,9 @@ pub fn get_wrapper_for_bare_fn(ccx: @CrateContext,
|
||||
ast::DefFn(did, _) | ast::DefStaticMethod(did, _, _) |
|
||||
ast::DefVariant(_, did, _) | ast::DefStruct(did) => did,
|
||||
_ => {
|
||||
ccx.sess.bug(format!("get_wrapper_for_bare_fn: \
|
||||
expected a statically resolved fn, got {:?}",
|
||||
def));
|
||||
ccx.sess().bug(format!("get_wrapper_for_bare_fn: \
|
||||
expected a statically resolved fn, got {:?}",
|
||||
def));
|
||||
}
|
||||
};
|
||||
|
||||
@ -440,9 +440,9 @@ pub fn get_wrapper_for_bare_fn(ccx: @CrateContext,
|
||||
let f = match ty::get(closure_ty).sty {
|
||||
ty::ty_closure(ref f) => f,
|
||||
_ => {
|
||||
ccx.sess.bug(format!("get_wrapper_for_bare_fn: \
|
||||
expected a closure ty, got {}",
|
||||
closure_ty.repr(tcx)));
|
||||
ccx.sess().bug(format!("get_wrapper_for_bare_fn: \
|
||||
expected a closure ty, got {}",
|
||||
closure_ty.repr(tcx)));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -383,13 +383,6 @@ impl<'a> FunctionContext<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn warn_not_to_commit(ccx: &mut CrateContext, msg: &str) {
|
||||
if !ccx.do_not_commit_warning_issued.get() {
|
||||
ccx.do_not_commit_warning_issued.set(true);
|
||||
ccx.sess.warn(msg.to_str() + " -- do not commit like this!");
|
||||
}
|
||||
}
|
||||
|
||||
// Heap selectors. Indicate which heap something should go on.
|
||||
#[deriving(Eq)]
|
||||
pub enum heap {
|
||||
@ -446,7 +439,7 @@ impl<'a> Block<'a> {
|
||||
pub fn tcx(&self) -> ty::ctxt {
|
||||
self.fcx.ccx.tcx
|
||||
}
|
||||
pub fn sess(&self) -> Session { self.fcx.ccx.sess }
|
||||
pub fn sess(&self) -> &'a Session { self.fcx.ccx.sess() }
|
||||
|
||||
pub fn ident(&self, ident: Ident) -> ~str {
|
||||
token::get_ident(ident).get().to_str()
|
||||
|
@ -53,7 +53,7 @@ pub fn const_lit(cx: &CrateContext, e: &ast::Expr, lit: ast::Lit)
|
||||
ty::ty_uint(t) => {
|
||||
C_integral(Type::uint_from_ty(cx, t), i as u64, false)
|
||||
}
|
||||
_ => cx.sess.span_bug(lit.span,
|
||||
_ => cx.sess().span_bug(lit.span,
|
||||
format!("integer literal has type {} (expected int or uint)",
|
||||
ty_to_str(cx.tcx, lit_int_ty)))
|
||||
}
|
||||
@ -68,7 +68,7 @@ pub fn const_lit(cx: &CrateContext, e: &ast::Expr, lit: ast::Lit)
|
||||
C_floating(fs.get(), Type::float_from_ty(t))
|
||||
}
|
||||
_ => {
|
||||
cx.sess.span_bug(lit.span,
|
||||
cx.sess().span_bug(lit.span,
|
||||
"floating point literal doesn't have the right type");
|
||||
}
|
||||
}
|
||||
@ -147,15 +147,15 @@ fn const_deref(cx: &CrateContext, v: ValueRef, t: ty::t, explicit: bool)
|
||||
const_deref_newtype(cx, v, t)
|
||||
}
|
||||
_ => {
|
||||
cx.sess.bug(format!("unexpected dereferenceable type {}",
|
||||
ty_to_str(cx.tcx, t)))
|
||||
cx.sess().bug(format!("unexpected dereferenceable type {}",
|
||||
ty_to_str(cx.tcx, t)))
|
||||
}
|
||||
};
|
||||
(dv, mt.ty)
|
||||
}
|
||||
None => {
|
||||
cx.sess.bug(format!("can't dereference const of type {}",
|
||||
ty_to_str(cx.tcx, t)))
|
||||
cx.sess().bug(format!("can't dereference const of type {}",
|
||||
ty_to_str(cx.tcx, t)))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -210,7 +210,7 @@ pub fn const_expr(cx: @CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
||||
llconst = C_struct([wrapper, C_null(Type::i8p())], false)
|
||||
}
|
||||
ty::AutoAddEnv(ref r, ref s) => {
|
||||
cx.sess
|
||||
cx.sess()
|
||||
.span_bug(e.span,
|
||||
format!("unexpected static function: region \
|
||||
{:?} sigil {:?}",
|
||||
@ -218,7 +218,7 @@ pub fn const_expr(cx: @CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
||||
*s))
|
||||
}
|
||||
ty::AutoObject(..) => {
|
||||
cx.sess
|
||||
cx.sess()
|
||||
.span_unimpl(e.span,
|
||||
"unimplemented const coercion to trait \
|
||||
object");
|
||||
@ -266,11 +266,11 @@ pub fn const_expr(cx: @CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
cx.sess.span_bug(e.span,
|
||||
format!("unimplemented \
|
||||
const autoref \
|
||||
{:?}",
|
||||
autoref))
|
||||
cx.sess().span_bug(e.span,
|
||||
format!("unimplemented \
|
||||
const autoref \
|
||||
{:?}",
|
||||
autoref))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -289,7 +289,7 @@ pub fn const_expr(cx: @CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
||||
llvm::LLVMDumpValue(llconst);
|
||||
llvm::LLVMDumpValue(C_undef(llty));
|
||||
}
|
||||
cx.sess.bug(format!("const {} of type {} has size {} instead of {}",
|
||||
cx.sess().bug(format!("const {} of type {} has size {} instead of {}",
|
||||
e.repr(cx.tcx), ty_to_str(cx.tcx, ety),
|
||||
csize, tsize));
|
||||
}
|
||||
@ -440,8 +440,8 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
let iv = match const_eval::eval_const_expr(cx.tcx, index) {
|
||||
const_eval::const_int(i) => i as u64,
|
||||
const_eval::const_uint(u) => u,
|
||||
_ => cx.sess.span_bug(index.span,
|
||||
"index is not an integer-constant expression")
|
||||
_ => cx.sess().span_bug(index.span,
|
||||
"index is not an integer-constant expression")
|
||||
};
|
||||
let (arr, len) = match ty::get(bt).sty {
|
||||
ty::ty_vec(_, vstore) | ty::ty_str(vstore) =>
|
||||
@ -453,11 +453,11 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
let e1 = const_get_elt(cx, bv, [0]);
|
||||
(const_deref_ptr(cx, e1), const_get_elt(cx, bv, [1]))
|
||||
},
|
||||
_ => cx.sess.span_bug(base.span,
|
||||
"index-expr base must be fixed-size or slice")
|
||||
_ => cx.sess().span_bug(base.span,
|
||||
"index-expr base must be fixed-size or slice")
|
||||
},
|
||||
_ => cx.sess.span_bug(base.span,
|
||||
"index-expr base must be a vector or string type")
|
||||
_ => cx.sess().span_bug(base.span,
|
||||
"index-expr base must be a vector or string type")
|
||||
};
|
||||
|
||||
let len = llvm::LLVMConstIntGetZExtValue(len) as u64;
|
||||
@ -468,8 +468,8 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
if iv >= len {
|
||||
// FIXME #3170: report this earlier on in the const-eval
|
||||
// pass. Reporting here is a bit late.
|
||||
cx.sess.span_err(e.span,
|
||||
"const index-expr is out of bounds");
|
||||
cx.sess().span_err(e.span,
|
||||
"const index-expr is out of bounds");
|
||||
}
|
||||
(const_get_elt(cx, arr, [iv as c_uint]), inlineable)
|
||||
}
|
||||
@ -511,8 +511,8 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
llvm::LLVMConstIntCast(iv, llty.to_ref(), s)
|
||||
}
|
||||
expr::cast_float => llvm::LLVMConstUIToFP(iv, llty.to_ref()),
|
||||
_ => cx.sess.bug("enum cast destination is not \
|
||||
integral or float")
|
||||
_ => cx.sess().bug("enum cast destination is not \
|
||||
integral or float")
|
||||
}
|
||||
}
|
||||
(expr::cast_pointer, expr::cast_pointer) => {
|
||||
@ -522,8 +522,8 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
llvm::LLVMConstIntToPtr(v, llty.to_ref())
|
||||
}
|
||||
_ => {
|
||||
cx.sess.impossible_case(e.span,
|
||||
"bad combination of types for cast")
|
||||
cx.sess().impossible_case(e.span,
|
||||
"bad combination of types for cast")
|
||||
}
|
||||
}, inlineable)
|
||||
}
|
||||
@ -558,7 +558,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
(adt::const_get_field(cx, repr, bv, discr, ix),
|
||||
inlineable)
|
||||
}
|
||||
None => cx.tcx.sess.span_bug(e.span, "missing struct field")
|
||||
None => cx.sess().span_bug(e.span, "missing struct field")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -580,7 +580,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
ast::ExprLit(ref lit) => {
|
||||
match lit.node {
|
||||
ast::LitStr(..) => { const_expr(cx, sub, is_local) }
|
||||
_ => { cx.sess.span_bug(e.span, "bad const-slice lit") }
|
||||
_ => { cx.sess().span_bug(e.span, "bad const-slice lit") }
|
||||
}
|
||||
}
|
||||
ast::ExprVec(ref es, ast::MutImmutable) => {
|
||||
@ -598,7 +598,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
let p = const_ptrcast(cx, gv, llunitty);
|
||||
(C_struct([p, C_uint(cx, es.len())], false), false)
|
||||
}
|
||||
_ => cx.sess.span_bug(e.span, "bad const-slice expr")
|
||||
_ => cx.sess().span_bug(e.span, "bad const-slice expr")
|
||||
}
|
||||
}
|
||||
ast::ExprRepeat(elem, count, _) => {
|
||||
@ -608,7 +608,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
let n = match const_eval::eval_const_expr(cx.tcx, count) {
|
||||
const_eval::const_int(i) => i as uint,
|
||||
const_eval::const_uint(i) => i as uint,
|
||||
_ => cx.sess.span_bug(count.span, "count must be integral const expression.")
|
||||
_ => cx.sess().span_bug(count.span, "count must be integral const expression.")
|
||||
};
|
||||
let vs = vec::from_elem(n, const_expr(cx, elem, is_local).val0());
|
||||
let v = if vs.iter().any(|vi| val_ty(*vi) != llunitty) {
|
||||
@ -654,7 +654,7 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
(C_null(llty), true)
|
||||
}
|
||||
_ => {
|
||||
cx.sess.span_bug(e.span, "expected a const, fn, struct, or variant def")
|
||||
cx.sess().span_bug(e.span, "expected a const, fn, struct, or variant def")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -684,11 +684,11 @@ fn const_expr_unadjusted(cx: @CrateContext, e: &ast::Expr,
|
||||
vinfo.disr_val,
|
||||
arg_vals.as_slice()), inlineable)
|
||||
}
|
||||
_ => cx.sess.span_bug(e.span, "expected a struct or variant def")
|
||||
_ => cx.sess().span_bug(e.span, "expected a struct or variant def")
|
||||
}
|
||||
}
|
||||
ast::ExprParen(e) => { const_expr(cx, e, is_local) }
|
||||
_ => cx.sess.span_bug(e.span,
|
||||
_ => cx.sess().span_bug(e.span,
|
||||
"bad constant expression type in consts::const_expr")
|
||||
};
|
||||
}
|
||||
|
@ -9,8 +9,8 @@
|
||||
// except according to those terms.
|
||||
|
||||
|
||||
use driver::session;
|
||||
use driver::session::NoDebugInfo;
|
||||
use driver::session::Session;
|
||||
use lib::llvm::{ContextRef, ModuleRef, ValueRef};
|
||||
use lib::llvm::{llvm, TargetData, TypeNames};
|
||||
use lib::llvm::mk_target_data;
|
||||
@ -39,7 +39,6 @@ use syntax::ast;
|
||||
use syntax::parse::token::InternedString;
|
||||
|
||||
pub struct CrateContext {
|
||||
sess: session::Session,
|
||||
llmod: ModuleRef,
|
||||
llcx: ContextRef,
|
||||
metadata_llmod: ModuleRef,
|
||||
@ -115,12 +114,10 @@ pub struct CrateContext {
|
||||
// is not emitted by LLVM's GC pass when no functions use GC.
|
||||
uses_gc: bool,
|
||||
dbg_cx: Option<debuginfo::CrateDebugContext>,
|
||||
do_not_commit_warning_issued: Cell<bool>,
|
||||
}
|
||||
|
||||
impl CrateContext {
|
||||
pub fn new(sess: session::Session,
|
||||
name: &str,
|
||||
pub fn new(name: &str,
|
||||
tcx: ty::ctxt,
|
||||
emap2: resolve::ExportMap2,
|
||||
maps: astencode::Maps,
|
||||
@ -137,8 +134,8 @@ impl CrateContext {
|
||||
let metadata_llmod = format!("{}_metadata", name).with_c_str(|buf| {
|
||||
llvm::LLVMModuleCreateWithNameInContext(buf, llcx)
|
||||
});
|
||||
let data_layout: &str = sess.targ_cfg.target_strs.data_layout;
|
||||
let targ_triple: &str = sess.targ_cfg.target_strs.target_triple;
|
||||
let data_layout: &str = tcx.sess.targ_cfg.target_strs.data_layout;
|
||||
let targ_triple: &str = tcx.sess.targ_cfg.target_strs.target_triple;
|
||||
data_layout.with_c_str(|buf| {
|
||||
llvm::LLVMSetDataLayout(llmod, buf);
|
||||
llvm::LLVMSetDataLayout(metadata_llmod, buf);
|
||||
@ -147,13 +144,13 @@ impl CrateContext {
|
||||
llvm::LLVMRustSetNormalizedTarget(llmod, buf);
|
||||
llvm::LLVMRustSetNormalizedTarget(metadata_llmod, buf);
|
||||
});
|
||||
let targ_cfg = sess.targ_cfg;
|
||||
let targ_cfg = tcx.sess.targ_cfg;
|
||||
|
||||
let td = mk_target_data(sess.targ_cfg.target_strs.data_layout);
|
||||
let td = mk_target_data(tcx.sess.targ_cfg.target_strs.data_layout);
|
||||
let tn = TypeNames::new();
|
||||
|
||||
let mut intrinsics = base::declare_intrinsics(llmod);
|
||||
if sess.opts.debuginfo != NoDebugInfo {
|
||||
if tcx.sess.opts.debuginfo != NoDebugInfo {
|
||||
base::declare_dbg_intrinsics(llmod, &mut intrinsics);
|
||||
}
|
||||
let int_type = Type::int(targ_cfg.arch);
|
||||
@ -166,19 +163,18 @@ impl CrateContext {
|
||||
tn.associate_type("tydesc", &tydesc_type);
|
||||
tn.associate_type("str_slice", &str_slice_ty);
|
||||
|
||||
let (crate_map_name, crate_map) = decl_crate_map(sess, link_meta.clone(), llmod);
|
||||
let dbg_cx = if sess.opts.debuginfo != NoDebugInfo {
|
||||
let (crate_map_name, crate_map) = decl_crate_map(&tcx.sess, link_meta.clone(), llmod);
|
||||
let dbg_cx = if tcx.sess.opts.debuginfo != NoDebugInfo {
|
||||
Some(debuginfo::CrateDebugContext::new(llmod))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
if sess.count_llvm_insns() {
|
||||
if tcx.sess.count_llvm_insns() {
|
||||
base::init_insn_ctxt()
|
||||
}
|
||||
|
||||
CrateContext {
|
||||
sess: sess,
|
||||
llmod: llmod,
|
||||
llcx: llcx,
|
||||
metadata_llmod: metadata_llmod,
|
||||
@ -235,11 +231,14 @@ impl CrateContext {
|
||||
crate_map_name: crate_map_name,
|
||||
uses_gc: false,
|
||||
dbg_cx: dbg_cx,
|
||||
do_not_commit_warning_issued: Cell::new(false),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn sess<'a>(&'a self) -> &'a Session {
|
||||
&self.tcx.sess
|
||||
}
|
||||
|
||||
pub fn builder<'a>(&'a self) -> Builder<'a> {
|
||||
Builder::new(self)
|
||||
}
|
||||
|
@ -213,10 +213,10 @@ impl FunctionDebugContext {
|
||||
match *self {
|
||||
FunctionDebugContext(~ref data) => data,
|
||||
DebugInfoDisabled => {
|
||||
cx.sess.span_bug(span, FunctionDebugContext::debuginfo_disabled_message());
|
||||
cx.sess().span_bug(span, FunctionDebugContext::debuginfo_disabled_message());
|
||||
}
|
||||
FunctionWithoutDebugInfo => {
|
||||
cx.sess.span_bug(span, FunctionDebugContext::should_be_ignored_message());
|
||||
cx.sess().span_bug(span, FunctionDebugContext::should_be_ignored_message());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -268,7 +268,7 @@ pub fn finalize(cx: @CrateContext) {
|
||||
// instruct LLVM to emit an older version of dwarf, however,
|
||||
// for OS X to understand. For more info see #11352
|
||||
// This can be overridden using --llvm-opts -dwarf-version,N.
|
||||
if cx.sess.targ_cfg.os == abi::OsMacos {
|
||||
if cx.sess().targ_cfg.os == abi::OsMacos {
|
||||
"Dwarf Version".with_c_str(
|
||||
|s| llvm::LLVMRustAddModuleFlag(cx.llmod, s, 2));
|
||||
}
|
||||
@ -299,7 +299,7 @@ pub fn create_local_var_metadata(bcx: &Block, local: &ast::Local) {
|
||||
match lllocals.get().find_copy(&node_id) {
|
||||
Some(datum) => datum,
|
||||
None => {
|
||||
bcx.tcx().sess.span_bug(span,
|
||||
bcx.sess().span_bug(span,
|
||||
format!("no entry in lllocals table for {:?}",
|
||||
node_id));
|
||||
}
|
||||
@ -338,7 +338,7 @@ pub fn create_captured_var_metadata(bcx: &Block,
|
||||
|
||||
let variable_ident = match ast_item {
|
||||
None => {
|
||||
cx.sess.span_bug(span, "debuginfo::create_captured_var_metadata() - NodeId not found");
|
||||
cx.sess().span_bug(span, "debuginfo::create_captured_var_metadata: node not found");
|
||||
}
|
||||
Some(ast_map::NodeLocal(pat)) | Some(ast_map::NodeArg(pat)) => {
|
||||
match pat.node {
|
||||
@ -346,7 +346,7 @@ pub fn create_captured_var_metadata(bcx: &Block,
|
||||
ast_util::path_to_ident(path)
|
||||
}
|
||||
_ => {
|
||||
cx.sess
|
||||
cx.sess()
|
||||
.span_bug(span,
|
||||
format!(
|
||||
"debuginfo::create_captured_var_metadata() - \
|
||||
@ -357,7 +357,7 @@ pub fn create_captured_var_metadata(bcx: &Block,
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
cx.sess.span_bug(span, format!("debuginfo::create_captured_var_metadata() - \
|
||||
cx.sess().span_bug(span, format!("debuginfo::create_captured_var_metadata() - \
|
||||
Captured var-id refers to unexpected ast_map variant: {:?}", ast_item));
|
||||
}
|
||||
};
|
||||
@ -441,7 +441,7 @@ pub fn create_argument_metadata(bcx: &Block, arg: &ast::Arg) {
|
||||
match llargs.get().find_copy(&node_id) {
|
||||
Some(v) => v,
|
||||
None => {
|
||||
bcx.tcx().sess.span_bug(span,
|
||||
bcx.sess().span_bug(span,
|
||||
format!("no entry in llargs table for {:?}",
|
||||
node_id));
|
||||
}
|
||||
@ -449,7 +449,7 @@ pub fn create_argument_metadata(bcx: &Block, arg: &ast::Arg) {
|
||||
};
|
||||
|
||||
if unsafe { llvm::LLVMIsAAllocaInst(llarg.val) } == ptr::null() {
|
||||
cx.sess.span_bug(span, "debuginfo::create_argument_metadata() - \
|
||||
cx.sess().span_bug(span, "debuginfo::create_argument_metadata() - \
|
||||
Referenced variable location is not an alloca!");
|
||||
}
|
||||
|
||||
@ -485,7 +485,7 @@ pub fn set_source_location(fcx: &FunctionContext,
|
||||
|
||||
let cx = fcx.ccx;
|
||||
|
||||
debug!("set_source_location: {}", cx.sess.codemap.span_to_str(span));
|
||||
debug!("set_source_location: {}", cx.sess().codemap.span_to_str(span));
|
||||
|
||||
if fcx.debug_context.get_ref(cx, span).source_locations_enabled.get() {
|
||||
let loc = span_start(cx, span);
|
||||
@ -532,7 +532,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
fn_ast_id: ast::NodeId,
|
||||
param_substs: Option<@param_substs>,
|
||||
llfn: ValueRef) -> FunctionDebugContext {
|
||||
if cx.sess.opts.debuginfo == NoDebugInfo {
|
||||
if cx.sess().opts.debuginfo == NoDebugInfo {
|
||||
return DebugInfoDisabled;
|
||||
}
|
||||
|
||||
@ -551,7 +551,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
(item.ident, fn_decl, generics, top_level_block, item.span, true)
|
||||
}
|
||||
_ => {
|
||||
cx.sess.span_bug(item.span,
|
||||
cx.sess().span_bug(item.span,
|
||||
"create_function_debug_context: item bound to non-function");
|
||||
}
|
||||
}
|
||||
@ -579,7 +579,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
// Don't try to lookup the item path:
|
||||
false)
|
||||
}
|
||||
_ => cx.sess.span_bug(expr.span,
|
||||
_ => cx.sess().span_bug(expr.span,
|
||||
"create_function_debug_context: expected an expr_fn_block here")
|
||||
}
|
||||
}
|
||||
@ -594,7 +594,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
true)
|
||||
}
|
||||
_ => {
|
||||
cx.sess
|
||||
cx.sess()
|
||||
.bug(format!("create_function_debug_context: \
|
||||
unexpected sort of node: {:?}",
|
||||
fnitem))
|
||||
@ -606,8 +606,8 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
ast_map::NodeStructCtor(..) => {
|
||||
return FunctionWithoutDebugInfo;
|
||||
}
|
||||
_ => cx.sess.bug(format!("create_function_debug_context: \
|
||||
unexpected sort of node: {:?}", fnitem))
|
||||
_ => cx.sess().bug(format!("create_function_debug_context: \
|
||||
unexpected sort of node: {:?}", fnitem))
|
||||
};
|
||||
|
||||
// This can be the case for functions inlined from another crate
|
||||
@ -672,7 +672,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
true,
|
||||
scope_line as c_uint,
|
||||
FlagPrototyped as c_uint,
|
||||
cx.sess.opts.optimize != session::No,
|
||||
cx.sess().opts.optimize != session::No,
|
||||
llfn,
|
||||
template_parameters,
|
||||
ptr::null())
|
||||
@ -708,7 +708,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
fn_decl: &ast::FnDecl,
|
||||
param_substs: Option<@param_substs>,
|
||||
error_span: Span) -> DIArray {
|
||||
if cx.sess.opts.debuginfo == LimitedDebugInfo {
|
||||
if cx.sess().opts.debuginfo == LimitedDebugInfo {
|
||||
return create_DIArray(DIB(cx), []);
|
||||
}
|
||||
|
||||
@ -793,7 +793,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
}
|
||||
|
||||
// Only create type information if full debuginfo is enabled
|
||||
if cx.sess.opts.debuginfo == FullDebugInfo {
|
||||
if cx.sess().opts.debuginfo == FullDebugInfo {
|
||||
let actual_self_type_metadata = type_metadata(cx,
|
||||
actual_self_type,
|
||||
codemap::DUMMY_SP);
|
||||
@ -837,7 +837,7 @@ pub fn create_function_debug_context(cx: &CrateContext,
|
||||
}
|
||||
|
||||
// Again, only create type information if full debuginfo is enabled
|
||||
if cx.sess.opts.debuginfo == FullDebugInfo {
|
||||
if cx.sess().opts.debuginfo == FullDebugInfo {
|
||||
let actual_type_metadata = type_metadata(cx, actual_type, codemap::DUMMY_SP);
|
||||
let param_metadata = token::get_ident(ident).get()
|
||||
.with_c_str(|name| {
|
||||
@ -873,12 +873,12 @@ fn create_DIArray(builder: DIBuilderRef, arr: &[DIDescriptor]) -> DIArray {
|
||||
}
|
||||
|
||||
fn compile_unit_metadata(cx: &CrateContext) {
|
||||
let work_dir = &cx.sess.working_dir;
|
||||
let compile_unit_name = match cx.sess.local_crate_source_file {
|
||||
let work_dir = &cx.sess().working_dir;
|
||||
let compile_unit_name = match cx.sess().local_crate_source_file {
|
||||
None => fallback_path(cx),
|
||||
Some(ref abs_path) => {
|
||||
if abs_path.is_relative() {
|
||||
cx.sess.warn("debuginfo: Invalid path to crate's local root source file!");
|
||||
cx.sess().warn("debuginfo: Invalid path to crate's local root source file!");
|
||||
fallback_path(cx)
|
||||
} else {
|
||||
match abs_path.path_relative_from(work_dir) {
|
||||
@ -917,7 +917,7 @@ fn compile_unit_metadata(cx: &CrateContext) {
|
||||
compile_unit_name,
|
||||
work_dir,
|
||||
producer,
|
||||
cx.sess.opts.optimize != session::No,
|
||||
cx.sess().opts.optimize != session::No,
|
||||
flags,
|
||||
0,
|
||||
split_name);
|
||||
@ -968,7 +968,7 @@ fn declare_local(bcx: &Block,
|
||||
file_metadata,
|
||||
loc.line as c_uint,
|
||||
type_metadata,
|
||||
cx.sess.opts.optimize != session::No,
|
||||
cx.sess().opts.optimize != session::No,
|
||||
0,
|
||||
argument_index)
|
||||
}
|
||||
@ -1028,7 +1028,7 @@ fn file_metadata(cx: &CrateContext, full_path: &str) -> DIFile {
|
||||
debug!("file_metadata: {}", full_path);
|
||||
|
||||
// FIXME (#9639): This needs to handle non-utf8 paths
|
||||
let work_dir = cx.sess.working_dir.as_str().unwrap();
|
||||
let work_dir = cx.sess().working_dir.as_str().unwrap();
|
||||
let file_name =
|
||||
if full_path.starts_with(work_dir) {
|
||||
full_path.slice(work_dir.len() + 1u, full_path.len())
|
||||
@ -1063,7 +1063,7 @@ fn scope_metadata(fcx: &FunctionContext,
|
||||
None => {
|
||||
let node = fcx.ccx.tcx.map.get(node_id);
|
||||
|
||||
fcx.ccx.sess.span_bug(span,
|
||||
fcx.ccx.sess().span_bug(span,
|
||||
format!("debuginfo: Could not find scope info for node {:?}", node));
|
||||
}
|
||||
}
|
||||
@ -1096,7 +1096,7 @@ fn basic_type_metadata(cx: &CrateContext, t: ty::t) -> DIType {
|
||||
ast::TyF32 => (~"f32", DW_ATE_float),
|
||||
ast::TyF64 => (~"f64", DW_ATE_float)
|
||||
},
|
||||
_ => cx.sess.bug("debuginfo::basic_type_metadata - t is invalid type")
|
||||
_ => cx.sess().bug("debuginfo::basic_type_metadata - t is invalid type")
|
||||
};
|
||||
|
||||
let llvm_type = type_of::type_of(cx, t);
|
||||
@ -1329,7 +1329,7 @@ impl GeneralMemberDescriptionFactory {
|
||||
// Capture type_rep, so we don't have to copy the struct_defs array
|
||||
let struct_defs = match *self.type_rep {
|
||||
adt::General(_, ref struct_defs) => struct_defs,
|
||||
_ => cx.sess.bug("unreachable")
|
||||
_ => cx.sess().bug("unreachable")
|
||||
};
|
||||
|
||||
struct_defs
|
||||
@ -1653,9 +1653,9 @@ fn set_members_of_composite_type(cx: &CrateContext,
|
||||
let mut composite_types_completed =
|
||||
debug_context(cx).composite_types_completed.borrow_mut();
|
||||
if composite_types_completed.get().contains(&composite_type_metadata) {
|
||||
cx.sess.span_bug(definition_span, "debuginfo::set_members_of_composite_type() - \
|
||||
Already completed forward declaration \
|
||||
re-encountered.");
|
||||
cx.sess().span_bug(definition_span, "debuginfo::set_members_of_composite_type() - \
|
||||
Already completed forward declaration \
|
||||
re-encountered.");
|
||||
} else {
|
||||
composite_types_completed.get().insert(composite_type_metadata);
|
||||
}
|
||||
@ -1856,7 +1856,7 @@ fn vec_metadata(cx: &CrateContext,
|
||||
let element_llvm_type = type_of::type_of(cx, element_type);
|
||||
let (element_size, element_align) = size_and_align_of(cx, element_llvm_type);
|
||||
|
||||
let vec_llvm_type = Type::vec(cx.sess.targ_cfg.arch, &element_llvm_type);
|
||||
let vec_llvm_type = Type::vec(cx.sess().targ_cfg.arch, &element_llvm_type);
|
||||
let vec_type_name: &str = format!("[{}]", ppaux::ty_to_str(cx.tcx, element_type));
|
||||
|
||||
let member_llvm_types = vec_llvm_type.field_types();
|
||||
@ -2144,7 +2144,7 @@ fn type_metadata(cx: &CrateContext,
|
||||
elements.as_slice(),
|
||||
usage_site_span).finalize(cx)
|
||||
}
|
||||
_ => cx.sess.bug(format!("debuginfo: unexpected type in type_metadata: {:?}", sty))
|
||||
_ => cx.sess().bug(format!("debuginfo: unexpected type in type_metadata: {:?}", sty))
|
||||
};
|
||||
|
||||
let mut created_types = debug_context(cx).created_types.borrow_mut();
|
||||
@ -2218,7 +2218,7 @@ fn generate_unique_type_id(prefix: &'static str) -> ~str {
|
||||
|
||||
/// Return codemap::Loc corresponding to the beginning of the span
|
||||
fn span_start(cx: &CrateContext, span: Span) -> codemap::Loc {
|
||||
cx.sess.codemap.lookup_char_pos(span.lo)
|
||||
cx.sess().codemap.lookup_char_pos(span.lo)
|
||||
}
|
||||
|
||||
fn size_and_align_of(cx: &CrateContext, llvm_type: Type) -> (u64, u64) {
|
||||
@ -2250,7 +2250,7 @@ fn fn_should_be_ignored(fcx: &FunctionContext) -> bool {
|
||||
fn assert_type_for_node_id(cx: &CrateContext, node_id: ast::NodeId, error_span: Span) {
|
||||
let node_types = cx.tcx.node_types.borrow();
|
||||
if !node_types.get().contains_key(&(node_id as uint)) {
|
||||
cx.sess.span_bug(error_span, "debuginfo: Could not find type for node id!");
|
||||
cx.sess().span_bug(error_span, "debuginfo: Could not find type for node id!");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2315,7 +2315,7 @@ fn populate_scope_map(cx: &CrateContext,
|
||||
&mut Vec<ScopeStackEntry> ,
|
||||
&mut HashMap<ast::NodeId, DIScope>|) {
|
||||
// Create a new lexical scope and push it onto the stack
|
||||
let loc = cx.sess.codemap.lookup_char_pos(scope_span.lo);
|
||||
let loc = cx.sess().codemap.lookup_char_pos(scope_span.lo);
|
||||
let file_metadata = file_metadata(cx, loc.file.name);
|
||||
let parent_scope = scope_stack.last().unwrap().scope_metadata;
|
||||
|
||||
@ -2338,7 +2338,7 @@ fn populate_scope_map(cx: &CrateContext,
|
||||
}
|
||||
|
||||
if scope_stack.last().unwrap().scope_metadata != scope_metadata {
|
||||
cx.sess.span_bug(scope_span, "debuginfo: Inconsistency in scope management.");
|
||||
cx.sess().span_bug(scope_span, "debuginfo: Inconsistency in scope management.");
|
||||
}
|
||||
|
||||
scope_stack.pop();
|
||||
@ -2432,7 +2432,7 @@ fn populate_scope_map(cx: &CrateContext,
|
||||
|
||||
if need_new_scope {
|
||||
// Create a new lexical scope and push it onto the stack
|
||||
let loc = cx.sess.codemap.lookup_char_pos(pat.span.lo);
|
||||
let loc = cx.sess().codemap.lookup_char_pos(pat.span.lo);
|
||||
let file_metadata = file_metadata(cx, loc.file.name);
|
||||
let parent_scope = scope_stack.last().unwrap().scope_metadata;
|
||||
|
||||
@ -2614,13 +2614,13 @@ fn populate_scope_map(cx: &CrateContext,
|
||||
}
|
||||
|
||||
ast::ExprForLoop(_, _, _, _) => {
|
||||
cx.sess.span_bug(exp.span, "debuginfo::populate_scope_map() - \
|
||||
Found unexpanded for-loop.");
|
||||
cx.sess().span_bug(exp.span, "debuginfo::populate_scope_map() - \
|
||||
Found unexpanded for-loop.");
|
||||
}
|
||||
|
||||
ast::ExprMac(_) => {
|
||||
cx.sess.span_bug(exp.span, "debuginfo::populate_scope_map() - \
|
||||
Found unexpanded macro.");
|
||||
cx.sess().span_bug(exp.span, "debuginfo::populate_scope_map() - \
|
||||
Found unexpanded macro.");
|
||||
}
|
||||
|
||||
ast::ExprLoop(block, _) |
|
||||
@ -2827,7 +2827,7 @@ fn namespace_for_item(cx: &CrateContext, def_id: ast::DefId) -> @NamespaceTreeNo
|
||||
match parent_node {
|
||||
Some(node) => node,
|
||||
None => {
|
||||
cx.sess.bug(format!("debuginfo::namespace_for_item(): \
|
||||
cx.sess().bug(format!("debuginfo::namespace_for_item(): \
|
||||
path too short for {:?}", def_id));
|
||||
}
|
||||
}
|
||||
|
@ -581,7 +581,7 @@ fn trans_def<'a>(bcx: &'a Block<'a>,
|
||||
unsafe {
|
||||
let llty = type_of::type_of(bcx.ccx(), const_ty);
|
||||
let symbol = csearch::get_symbol(
|
||||
bcx.ccx().sess.cstore,
|
||||
bcx.ccx().sess().cstore,
|
||||
did);
|
||||
let llval = symbol.with_c_str(|buf| {
|
||||
llvm::LLVMAddGlobal(bcx.ccx().llmod,
|
||||
@ -1618,16 +1618,16 @@ fn trans_imm_cast<'a>(bcx: &'a Block<'a>,
|
||||
val_ty(lldiscrim_a),
|
||||
lldiscrim_a, true),
|
||||
cast_float => SIToFP(bcx, lldiscrim_a, ll_t_out),
|
||||
_ => ccx.sess.bug(format!("translating unsupported cast: \
|
||||
{} ({:?}) -> {} ({:?})",
|
||||
t_in.repr(ccx.tcx), k_in,
|
||||
t_out.repr(ccx.tcx), k_out))
|
||||
_ => ccx.sess().bug(format!("translating unsupported cast: \
|
||||
{} ({:?}) -> {} ({:?})",
|
||||
t_in.repr(ccx.tcx), k_in,
|
||||
t_out.repr(ccx.tcx), k_out))
|
||||
}
|
||||
}
|
||||
_ => ccx.sess.bug(format!("translating unsupported cast: \
|
||||
{} ({:?}) -> {} ({:?})",
|
||||
t_in.repr(ccx.tcx), k_in,
|
||||
t_out.repr(ccx.tcx), k_out))
|
||||
_ => ccx.sess().bug(format!("translating unsupported cast: \
|
||||
{} ({:?}) -> {} ({:?})",
|
||||
t_in.repr(ccx.tcx), k_in,
|
||||
t_out.repr(ccx.tcx), k_out))
|
||||
};
|
||||
return immediate_rvalue_bcx(bcx, newval, t_out).to_expr_datumblock();
|
||||
}
|
||||
@ -1665,7 +1665,6 @@ fn trans_assign_op<'a>(
|
||||
return result_datum.store_to(bcx, dst_datum.val);
|
||||
}
|
||||
|
||||
|
||||
fn auto_ref<'a>(bcx: &'a Block<'a>,
|
||||
datum: Datum<Expr>,
|
||||
expr: &ast::Expr)
|
||||
|
@ -75,23 +75,23 @@ struct LlvmSignature {
|
||||
|
||||
pub fn llvm_calling_convention(ccx: &CrateContext,
|
||||
abis: AbiSet) -> Option<CallConv> {
|
||||
let os = ccx.sess.targ_cfg.os;
|
||||
let arch = ccx.sess.targ_cfg.arch;
|
||||
let os = ccx.sess().targ_cfg.os;
|
||||
let arch = ccx.sess().targ_cfg.arch;
|
||||
abis.for_target(os, arch).map(|abi| {
|
||||
match abi {
|
||||
RustIntrinsic => {
|
||||
// Intrinsics are emitted by monomorphic fn
|
||||
ccx.sess.bug(format!("asked to register intrinsic fn"));
|
||||
ccx.sess().bug(format!("asked to register intrinsic fn"));
|
||||
}
|
||||
|
||||
Rust => {
|
||||
// FIXME(#3678) Implement linking to foreign fns with Rust ABI
|
||||
ccx.sess.unimpl(
|
||||
ccx.sess().unimpl(
|
||||
format!("foreign functions with Rust ABI"));
|
||||
}
|
||||
|
||||
// It's the ABI's job to select this, not us.
|
||||
System => ccx.sess.bug("system abi should be selected elsewhere"),
|
||||
System => ccx.sess().bug("system abi should be selected elsewhere"),
|
||||
|
||||
Stdcall => lib::llvm::X86StdcallCallConv,
|
||||
Fastcall => lib::llvm::X86FastcallCallConv,
|
||||
@ -222,7 +222,7 @@ pub fn register_foreign_item_fn(ccx: @CrateContext, abis: AbiSet,
|
||||
let cc = match llvm_calling_convention(ccx, abis) {
|
||||
Some(cc) => cc,
|
||||
None => {
|
||||
ccx.sess.span_fatal(foreign_item.span,
|
||||
ccx.sess().span_fatal(foreign_item.span,
|
||||
format!("ABI `{}` has no suitable calling convention \
|
||||
for target architecture",
|
||||
abis.user_string(ccx.tcx)));
|
||||
@ -294,7 +294,7 @@ pub fn trans_native_call<'a>(
|
||||
|
||||
let (fn_abis, fn_sig) = match ty::get(callee_ty).sty {
|
||||
ty::ty_bare_fn(ref fn_ty) => (fn_ty.abis, fn_ty.sig.clone()),
|
||||
_ => ccx.sess.bug("trans_native_call called on non-function type")
|
||||
_ => ccx.sess().bug("trans_native_call called on non-function type")
|
||||
};
|
||||
let llsig = foreign_signature(ccx, &fn_sig, passed_arg_tys.as_slice());
|
||||
let ret_def = !return_type_is_void(bcx.ccx(), fn_sig.output);
|
||||
@ -383,7 +383,7 @@ pub fn trans_native_call<'a>(
|
||||
Some(cc) => cc,
|
||||
None => {
|
||||
// FIXME(#8357) We really ought to report a span here
|
||||
ccx.sess.fatal(
|
||||
ccx.sess().fatal(
|
||||
format!("ABI string `{}` has no suitable ABI \
|
||||
for target architecture",
|
||||
fn_abis.user_string(ccx.tcx)));
|
||||
@ -563,10 +563,10 @@ pub fn trans_rust_fn_with_foreign_abi(ccx: @CrateContext,
|
||||
f
|
||||
}
|
||||
_ => {
|
||||
ccx.sess.bug(format!("build_rust_fn: extern fn {} has ty {}, \
|
||||
expected a bare fn ty",
|
||||
ccx.tcx.map.path_to_str(id),
|
||||
t.repr(tcx)));
|
||||
ccx.sess().bug(format!("build_rust_fn: extern fn {} has ty {}, \
|
||||
expected a bare fn ty",
|
||||
ccx.tcx.map.path_to_str(id),
|
||||
t.repr(tcx)));
|
||||
}
|
||||
};
|
||||
|
||||
@ -860,7 +860,7 @@ fn foreign_types_for_fn_ty(ccx: &CrateContext,
|
||||
ty: ty::t) -> ForeignTypes {
|
||||
let fn_sig = match ty::get(ty).sty {
|
||||
ty::ty_bare_fn(ref fn_ty) => fn_ty.sig.clone(),
|
||||
_ => ccx.sess.bug("foreign_types_for_fn_ty called on non-function type")
|
||||
_ => ccx.sess().bug("foreign_types_for_fn_ty called on non-function type")
|
||||
};
|
||||
let llsig = foreign_signature(ccx, &fn_sig, fn_sig.inputs.as_slice());
|
||||
let ret_def = !return_type_is_void(ccx, fn_sig.output);
|
||||
|
@ -173,7 +173,7 @@ pub fn call_visit_glue(bcx: &Block, v: ValueRef, tydesc: ValueRef,
|
||||
let ccx = bcx.ccx();
|
||||
// NB: Don't short-circuit even if this block is unreachable because
|
||||
// GC-based cleanup needs to the see that the roots are live.
|
||||
if bcx.unreachable.get() && !ccx.sess.no_landing_pads() { return; }
|
||||
if bcx.unreachable.get() && !ccx.sess().no_landing_pads() { return; }
|
||||
|
||||
let static_glue_fn = match static_ti {
|
||||
None => None,
|
||||
@ -403,7 +403,7 @@ pub fn declare_tydesc(ccx: &CrateContext, t: ty::t) -> @tydesc_info {
|
||||
|
||||
let llty = type_of(ccx, t);
|
||||
|
||||
if ccx.sess.count_type_sizes() {
|
||||
if ccx.sess().count_type_sizes() {
|
||||
println!("{}\t{}", llsize_of_real(ccx, llty),
|
||||
ppaux::ty_to_str(ccx.tcx, t));
|
||||
}
|
||||
|
@ -122,14 +122,14 @@ pub fn maybe_instantiate_inline(ccx: @CrateContext, fn_id: ast::DefId)
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => ccx.sess.bug("maybe_instantiate_inline: item has a \
|
||||
non-enum, non-struct parent")
|
||||
_ => ccx.sess().bug("maybe_instantiate_inline: item has a \
|
||||
non-enum, non-struct parent")
|
||||
}
|
||||
trans_item(ccx, item);
|
||||
local_def(my_id)
|
||||
}
|
||||
csearch::found_parent(_, _) => {
|
||||
ccx.sess.bug("maybe_get_item_ast returned a found_parent \
|
||||
ccx.sess().bug("maybe_get_item_ast returned a found_parent \
|
||||
with a non-item parent");
|
||||
}
|
||||
csearch::found(ast::IIMethod(impl_did, is_provided, mth)) => {
|
||||
|
@ -218,7 +218,7 @@ pub fn trans_intrinsic(ccx: @CrateContext,
|
||||
"acq" => lib::llvm::Acquire,
|
||||
"rel" => lib::llvm::Release,
|
||||
"acqrel" => lib::llvm::AcquireRelease,
|
||||
_ => ccx.sess.fatal("unknown ordering in atomic intrinsic")
|
||||
_ => ccx.sess().fatal("unknown ordering in atomic intrinsic")
|
||||
}
|
||||
};
|
||||
|
||||
@ -259,7 +259,7 @@ pub fn trans_intrinsic(ccx: @CrateContext,
|
||||
"min" => lib::llvm::Min,
|
||||
"umax" => lib::llvm::UMax,
|
||||
"umin" => lib::llvm::UMin,
|
||||
_ => ccx.sess.fatal("unknown atomic operation")
|
||||
_ => ccx.sess().fatal("unknown atomic operation")
|
||||
};
|
||||
|
||||
let old = AtomicRMW(bcx, atom_op, get_param(decl, first_real_arg),
|
||||
@ -377,7 +377,7 @@ pub fn trans_intrinsic(ccx: @CrateContext,
|
||||
ast_map::NodeExpr(e) => e.span,
|
||||
_ => fail!("transmute has non-expr arg"),
|
||||
};
|
||||
ccx.sess.span_fatal(sp,
|
||||
ccx.sess().span_fatal(sp,
|
||||
format!("transmute called on types with different sizes: \
|
||||
{intype} ({insize, plural, =1{# bit} other{# bits}}) to \
|
||||
{outtype} ({outsize, plural, =1{# bit} other{# bits}})",
|
||||
@ -527,7 +527,7 @@ pub fn trans_intrinsic(ccx: @CrateContext,
|
||||
_ => {
|
||||
// Could we make this an enum rather than a string? does it get
|
||||
// checked earlier?
|
||||
ccx.sess.span_bug(item.span, "unknown intrinsic");
|
||||
ccx.sess().span_bug(item.span, "unknown intrinsic");
|
||||
}
|
||||
}
|
||||
fcx.cleanup();
|
||||
|
@ -108,8 +108,8 @@ pub fn trans_method_callee<'a>(
|
||||
(method.origin, method.ty)
|
||||
}
|
||||
None => {
|
||||
bcx.tcx().sess.span_bug(bcx.tcx().map.span(method_call.expr_id),
|
||||
"method call expr wasn't in method map")
|
||||
bcx.sess().span_bug(bcx.tcx().map.span(method_call.expr_id),
|
||||
"method call expr wasn't in method map")
|
||||
}
|
||||
};
|
||||
|
||||
@ -145,9 +145,9 @@ pub fn trans_method_callee<'a>(
|
||||
let self_expr = match self_expr {
|
||||
Some(self_expr) => self_expr,
|
||||
None => {
|
||||
bcx.tcx().sess.span_bug(bcx.tcx().map.span(method_call.expr_id),
|
||||
"self expr wasn't provided for trait object \
|
||||
callee (trying to call overloaded op?)")
|
||||
bcx.sess().span_bug(bcx.tcx().map.span(method_call.expr_id),
|
||||
"self expr wasn't provided for trait object \
|
||||
callee (trying to call overloaded op?)")
|
||||
}
|
||||
};
|
||||
trans_trait_callee(bcx,
|
||||
@ -425,7 +425,7 @@ pub fn trans_trait_callee_from_llval<'a>(bcx: &'a Block<'a>,
|
||||
type_of_rust_fn(ccx, true, f.sig.inputs.slice_from(1), f.sig.output)
|
||||
}
|
||||
_ => {
|
||||
ccx.sess.bug("meth::trans_trait_callee given non-bare-rust-fn");
|
||||
ccx.sess().bug("meth::trans_trait_callee given non-bare-rust-fn");
|
||||
}
|
||||
};
|
||||
let llvtable = Load(bcx,
|
||||
@ -500,7 +500,7 @@ pub fn get_vtable(bcx: &Block,
|
||||
methods.push(vtable_method)
|
||||
}
|
||||
}
|
||||
_ => ccx.sess.bug("get_vtable: expected a static origin"),
|
||||
_ => ccx.sess().bug("get_vtable: expected a static origin"),
|
||||
}
|
||||
}
|
||||
|
||||
@ -548,8 +548,8 @@ fn emit_vtable_methods(bcx: &Block,
|
||||
|
||||
let trt_id = match ty::impl_trait_ref(tcx, impl_id) {
|
||||
Some(t_id) => t_id.def_id,
|
||||
None => ccx.sess.bug("make_impl_vtable: don't know how to \
|
||||
make a vtable for a type impl!")
|
||||
None => ccx.sess().bug("make_impl_vtable: don't know how to \
|
||||
make a vtable for a type impl!")
|
||||
};
|
||||
|
||||
ty::populate_implementations_for_trait_if_necessary(bcx.tcx(), trt_id);
|
||||
|
@ -95,7 +95,7 @@ pub fn monomorphic_fn(ccx: @CrateContext,
|
||||
let mut is_static_provided = None;
|
||||
|
||||
let map_node = session::expect(
|
||||
ccx.sess,
|
||||
ccx.sess(),
|
||||
ccx.tcx.map.find(fn_id.node),
|
||||
|| format!("while monomorphizing {:?}, couldn't find it in the \
|
||||
item map (may have attempted to monomorphize an item \
|
||||
@ -172,8 +172,8 @@ pub fn monomorphic_fn(ccx: @CrateContext,
|
||||
// Random cut-off -- code that needs to instantiate the same function
|
||||
// recursively more than thirty times can probably safely be assumed
|
||||
// to be causing an infinite expansion.
|
||||
if depth > ccx.sess.recursion_limit.get() {
|
||||
ccx.sess.span_fatal(ccx.tcx.map.span(fn_id.node),
|
||||
if depth > ccx.sess().recursion_limit.get() {
|
||||
ccx.sess().span_fatal(ccx.tcx.map.span(fn_id.node),
|
||||
"reached the recursion limit during monomorphization");
|
||||
}
|
||||
|
||||
@ -207,7 +207,7 @@ pub fn monomorphic_fn(ccx: @CrateContext,
|
||||
d
|
||||
}
|
||||
_ => {
|
||||
ccx.tcx.sess.bug("Can't monomorphize this kind of item")
|
||||
ccx.sess().bug("Can't monomorphize this kind of item")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -239,7 +239,7 @@ pub fn monomorphic_fn(ccx: @CrateContext,
|
||||
d);
|
||||
}
|
||||
ast::StructVariantKind(_) =>
|
||||
ccx.tcx.sess.bug("can't monomorphize struct variants"),
|
||||
ccx.sess().bug("can't monomorphize struct variants"),
|
||||
}
|
||||
d
|
||||
}
|
||||
@ -258,8 +258,8 @@ pub fn monomorphic_fn(ccx: @CrateContext,
|
||||
d
|
||||
}
|
||||
_ => {
|
||||
ccx.tcx.sess.bug(format!("can't monomorphize a {:?}",
|
||||
map_node))
|
||||
ccx.sess().bug(format!("can't monomorphize a {:?}",
|
||||
map_node))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -281,7 +281,7 @@ pub fn monomorphic_fn(ccx: @CrateContext,
|
||||
ast_map::NodeArg(..) |
|
||||
ast_map::NodeBlock(..) |
|
||||
ast_map::NodeLocal(..) => {
|
||||
ccx.tcx.sess.bug(format!("can't monomorphize a {:?}", map_node))
|
||||
ccx.sess().bug(format!("can't monomorphize a {:?}", map_node))
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -86,7 +86,7 @@ pub fn type_of_fn_from_ty(cx: &CrateContext, fty: ty::t) -> Type {
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
cx.sess.bug("type_of_fn_from_ty given non-closure, non-bare-fn")
|
||||
cx.sess().bug("type_of_fn_from_ty given non-closure, non-bare-fn")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -142,7 +142,7 @@ pub fn sizing_type_of(cx: &CrateContext, t: ty::t) -> Type {
|
||||
|
||||
ty::ty_unboxed_vec(mt) => {
|
||||
let sz_ty = sizing_type_of(cx, mt.ty);
|
||||
Type::vec(cx.sess.targ_cfg.arch, &sz_ty)
|
||||
Type::vec(cx.sess().targ_cfg.arch, &sz_ty)
|
||||
}
|
||||
|
||||
ty::ty_tup(..) | ty::ty_enum(..) => {
|
||||
@ -162,7 +162,8 @@ pub fn sizing_type_of(cx: &CrateContext, t: ty::t) -> Type {
|
||||
}
|
||||
|
||||
ty::ty_self(_) | ty::ty_infer(..) | ty::ty_param(..) | ty::ty_err(..) => {
|
||||
cx.tcx.sess.bug(format!("fictitious type {:?} in sizing_type_of()", ty::get(t).sty))
|
||||
cx.sess().bug(format!("fictitious type {:?} in sizing_type_of()",
|
||||
ty::get(t).sty))
|
||||
}
|
||||
};
|
||||
|
||||
@ -212,7 +213,7 @@ pub fn type_of(cx: &CrateContext, t: ty::t) -> Type {
|
||||
ty::ty_uint(t) => Type::uint_from_ty(cx, t),
|
||||
ty::ty_float(t) => Type::float_from_ty(t),
|
||||
ty::ty_str(ty::vstore_uniq) => {
|
||||
Type::vec(cx.sess.targ_cfg.arch, &Type::i8()).ptr_to()
|
||||
Type::vec(cx.sess().targ_cfg.arch, &Type::i8()).ptr_to()
|
||||
}
|
||||
ty::ty_enum(did, ref substs) => {
|
||||
// Only create the named struct, but don't fill it in. We
|
||||
@ -231,11 +232,11 @@ pub fn type_of(cx: &CrateContext, t: ty::t) -> Type {
|
||||
}
|
||||
ty::ty_vec(ref mt, ty::vstore_uniq) => {
|
||||
let ty = type_of(cx, mt.ty);
|
||||
Type::vec(cx.sess.targ_cfg.arch, &ty).ptr_to()
|
||||
Type::vec(cx.sess().targ_cfg.arch, &ty).ptr_to()
|
||||
}
|
||||
ty::ty_unboxed_vec(ref mt) => {
|
||||
let ty = type_of(cx, mt.ty);
|
||||
Type::vec(cx.sess.targ_cfg.arch, &ty)
|
||||
Type::vec(cx.sess().targ_cfg.arch, &ty)
|
||||
}
|
||||
ty::ty_ptr(ref mt) => type_of(cx, mt.ty).ptr_to(),
|
||||
ty::ty_rptr(_, ref mt) => type_of(cx, mt.ty).ptr_to(),
|
||||
@ -288,10 +289,10 @@ pub fn type_of(cx: &CrateContext, t: ty::t) -> Type {
|
||||
adt::incomplete_type_of(cx, repr, name)
|
||||
}
|
||||
}
|
||||
ty::ty_self(..) => cx.tcx.sess.unimpl("type_of: ty_self"),
|
||||
ty::ty_infer(..) => cx.tcx.sess.bug("type_of with ty_infer"),
|
||||
ty::ty_param(..) => cx.tcx.sess.bug("type_of with ty_param"),
|
||||
ty::ty_err(..) => cx.tcx.sess.bug("type_of with ty_err")
|
||||
ty::ty_self(..) => cx.sess().unimpl("type_of: ty_self"),
|
||||
ty::ty_infer(..) => cx.sess().bug("type_of with ty_infer"),
|
||||
ty::ty_param(..) => cx.sess().bug("type_of with ty_param"),
|
||||
ty::ty_err(..) => cx.sess().bug("type_of with ty_err")
|
||||
};
|
||||
|
||||
debug!("--> mapped t={} {:?} to llty={}",
|
||||
|
@ -11,7 +11,7 @@
|
||||
#[allow(non_camel_case_types)];
|
||||
|
||||
use back::svh::Svh;
|
||||
use driver::session;
|
||||
use driver::session::Session;
|
||||
use metadata::csearch;
|
||||
use metadata;
|
||||
use middle::const_eval;
|
||||
@ -262,7 +262,7 @@ pub struct ctxt_ {
|
||||
interner: RefCell<FnvHashMap<intern_key, ~t_box_>>,
|
||||
next_id: Cell<uint>,
|
||||
cstore: @metadata::cstore::CStore,
|
||||
sess: session::Session,
|
||||
sess: Session,
|
||||
def_map: resolve::DefMap,
|
||||
|
||||
named_region_map: @RefCell<resolve_lifetime::NamedRegionMap>,
|
||||
@ -1081,7 +1081,7 @@ pub type type_cache = RefCell<DefIdMap<ty_param_bounds_and_ty>>;
|
||||
|
||||
pub type node_type_table = RefCell<HashMap<uint,t>>;
|
||||
|
||||
pub fn mk_ctxt(s: session::Session,
|
||||
pub fn mk_ctxt(s: Session,
|
||||
dm: resolve::DefMap,
|
||||
named_region_map: @RefCell<resolve_lifetime::NamedRegionMap>,
|
||||
map: ast_map::Map,
|
||||
|
@ -189,7 +189,7 @@ impl<'a> visit::Visitor<()> for PrivilegedScopeVisitor<'a> {
|
||||
ItemImpl(_, None, ast_ty, _) => {
|
||||
if !self.cc.ast_type_is_defined_in_local_crate(ast_ty) {
|
||||
// This is an error.
|
||||
let session = self.cc.crate_context.tcx.sess;
|
||||
let session = &self.cc.crate_context.tcx.sess;
|
||||
session.span_err(item.span,
|
||||
"cannot associate methods with a type outside the \
|
||||
crate the type is defined in; define and implement \
|
||||
@ -210,7 +210,7 @@ impl<'a> visit::Visitor<()> for PrivilegedScopeVisitor<'a> {
|
||||
self.cc.trait_ref_to_trait_def_id(trait_ref);
|
||||
|
||||
if trait_def_id.krate != LOCAL_CRATE {
|
||||
let session = self.cc.crate_context.tcx.sess;
|
||||
let session = &self.cc.crate_context.tcx.sess;
|
||||
session.span_err(item.span,
|
||||
"cannot provide an extension implementation \
|
||||
where both trait and type are not defined in this crate");
|
||||
@ -274,7 +274,7 @@ impl CoherenceChecker {
|
||||
item.span,
|
||||
self_type.ty) {
|
||||
None => {
|
||||
let session = self.crate_context.tcx.sess;
|
||||
let session = &self.crate_context.tcx.sess;
|
||||
session.span_err(item.span,
|
||||
"no base type found for inherent implementation; \
|
||||
implement a trait or new type instead");
|
||||
@ -447,7 +447,7 @@ impl CoherenceChecker {
|
||||
implementation_b);
|
||||
|
||||
if self.polytypes_unify(polytype_a.clone(), polytype_b) {
|
||||
let session = self.crate_context.tcx.sess;
|
||||
let session = &self.crate_context.tcx.sess;
|
||||
session.span_err(
|
||||
self.span_of_impl(implementation_a),
|
||||
format!("conflicting implementations for trait `{}`",
|
||||
|
@ -26,6 +26,7 @@ use rustc::metadata::decoder;
|
||||
|
||||
use std;
|
||||
|
||||
use core;
|
||||
use doctree;
|
||||
use visit_ast;
|
||||
use std::local_data;
|
||||
@ -84,7 +85,7 @@ impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
|
||||
let cx = local_data::get(super::ctxtkey, |x| *x.unwrap());
|
||||
|
||||
let mut externs = ~[];
|
||||
cx.sess.cstore.iter_crate_data(|n, meta| {
|
||||
cx.sess().cstore.iter_crate_data(|n, meta| {
|
||||
externs.push((n, meta.clean()));
|
||||
});
|
||||
|
||||
@ -683,7 +684,7 @@ impl Clean<Type> for ast::Ty {
|
||||
fn clean(&self) -> Type {
|
||||
use syntax::ast::*;
|
||||
debug!("cleaning type `{:?}`", self);
|
||||
let codemap = local_data::get(super::ctxtkey, |x| *x.unwrap()).sess.codemap;
|
||||
let codemap = local_data::get(super::ctxtkey, |x| *x.unwrap()).sess().codemap;
|
||||
debug!("span corresponds to `{}`", codemap.span_to_str(self.span));
|
||||
match self.node {
|
||||
TyNil => Unit,
|
||||
@ -865,7 +866,7 @@ pub struct Span {
|
||||
|
||||
impl Clean<Span> for syntax::codemap::Span {
|
||||
fn clean(&self) -> Span {
|
||||
let cm = local_data::get(super::ctxtkey, |x| *x.unwrap()).sess.codemap;
|
||||
let cm = local_data::get(super::ctxtkey, |x| *x.unwrap()).sess().codemap;
|
||||
let filename = cm.span_to_filename(*self);
|
||||
let lo = cm.lookup_char_pos(self.lo);
|
||||
let hi = cm.lookup_char_pos(self.hi);
|
||||
@ -1179,7 +1180,7 @@ trait ToSource {
|
||||
impl ToSource for syntax::codemap::Span {
|
||||
fn to_src(&self) -> ~str {
|
||||
debug!("converting span {:?} to snippet", self.clean());
|
||||
let cm = local_data::get(super::ctxtkey, |x| x.unwrap().clone()).sess.codemap.clone();
|
||||
let cm = local_data::get(super::ctxtkey, |x| x.unwrap().clone()).sess().codemap.clone();
|
||||
let sn = match cm.span_to_snippet(*self) {
|
||||
Some(x) => x,
|
||||
None => ~""
|
||||
@ -1234,10 +1235,10 @@ fn name_from_pat(p: &ast::Pat) -> ~str {
|
||||
fn resolve_type(path: Path, tpbs: Option<~[TyParamBound]>,
|
||||
id: ast::NodeId) -> Type {
|
||||
let cx = local_data::get(super::ctxtkey, |x| *x.unwrap());
|
||||
let tycx = match cx.tycx {
|
||||
Some(tycx) => tycx,
|
||||
let tycx = match cx.maybe_typed {
|
||||
core::Typed(ref tycx) => tycx,
|
||||
// If we're extracting tests, this return value doesn't matter.
|
||||
None => return Bool
|
||||
core::NotTyped(_) => return Bool
|
||||
};
|
||||
debug!("searching for {:?} in defmap", id);
|
||||
let def_map = tycx.def_map.borrow();
|
||||
@ -1289,12 +1290,12 @@ fn resolve_use_source(path: Path, id: ast::NodeId) -> ImportSource {
|
||||
|
||||
fn resolve_def(id: ast::NodeId) -> Option<ast::DefId> {
|
||||
let cx = local_data::get(super::ctxtkey, |x| *x.unwrap());
|
||||
match cx.tycx {
|
||||
Some(tcx) => {
|
||||
match cx.maybe_typed {
|
||||
core::Typed(ref tcx) => {
|
||||
let def_map = tcx.def_map.borrow();
|
||||
def_map.get().find(&id).map(|&d| ast_util::def_id_of_def(d))
|
||||
}
|
||||
None => None
|
||||
core::NotTyped(_) => None
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,10 +27,23 @@ use visit_ast::RustdocVisitor;
|
||||
use clean;
|
||||
use clean::Clean;
|
||||
|
||||
pub enum MaybeTyped {
|
||||
Typed(middle::ty::ctxt),
|
||||
NotTyped(driver::session::Session)
|
||||
}
|
||||
|
||||
pub struct DocContext {
|
||||
krate: ast::Crate,
|
||||
tycx: Option<middle::ty::ctxt>,
|
||||
sess: driver::session::Session
|
||||
maybe_typed: MaybeTyped
|
||||
}
|
||||
|
||||
impl DocContext {
|
||||
pub fn sess<'a>(&'a self) -> &'a driver::session::Session {
|
||||
match self.maybe_typed {
|
||||
Typed(ref tcx) => &tcx.sess,
|
||||
NotTyped(ref sess) => sess
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CrateAnalysis {
|
||||
@ -67,27 +80,27 @@ fn get_ast_and_resolve(cpath: &Path,
|
||||
parsesess.cm,
|
||||
span_diagnostic_handler);
|
||||
|
||||
let mut cfg = build_configuration(sess);
|
||||
let mut cfg = build_configuration(&sess);
|
||||
for cfg_ in cfgs.move_iter() {
|
||||
let cfg_ = token::intern_and_get_ident(cfg_);
|
||||
cfg.push(@dummy_spanned(ast::MetaWord(cfg_)));
|
||||
}
|
||||
|
||||
let krate = phase_1_parse_input(sess, cfg, &input);
|
||||
let loader = &mut Loader::new(sess);
|
||||
let id = from_str("rustdoc").unwrap();
|
||||
let (krate, ast_map) = phase_2_configure_and_expand(sess, loader,
|
||||
krate, &id);
|
||||
let krate = phase_1_parse_input(&sess, cfg, &input);
|
||||
let (krate, ast_map) = phase_2_configure_and_expand(&sess, &mut Loader::new(sess),
|
||||
krate, &from_str("rustdoc").unwrap());
|
||||
let driver::driver::CrateAnalysis {
|
||||
exported_items, public_items, ty_cx, ..
|
||||
} = phase_3_run_analysis_passes(sess, &krate, ast_map);
|
||||
|
||||
debug!("crate: {:?}", krate);
|
||||
return (DocContext { krate: krate, tycx: Some(ty_cx), sess: sess },
|
||||
CrateAnalysis {
|
||||
exported_items: exported_items,
|
||||
public_items: public_items,
|
||||
});
|
||||
(DocContext {
|
||||
krate: krate,
|
||||
maybe_typed: Typed(ty_cx)
|
||||
}, CrateAnalysis {
|
||||
exported_items: exported_items,
|
||||
public_items: public_items,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn run_core (libs: HashSet<Path>, cfgs: ~[~str], path: &Path) -> (clean::Crate, CrateAnalysis) {
|
||||
|
@ -58,17 +58,14 @@ pub fn run(input: &str, libs: @RefCell<HashSet<Path>>, mut test_args: ~[~str]) -
|
||||
parsesess.cm,
|
||||
span_diagnostic_handler);
|
||||
|
||||
let cfg = driver::build_configuration(sess);
|
||||
let krate = driver::phase_1_parse_input(sess, cfg, &input);
|
||||
let loader = &mut Loader::new(sess);
|
||||
let id = from_str("rustdoc-test").unwrap();
|
||||
let (krate, _) = driver::phase_2_configure_and_expand(sess, loader, krate,
|
||||
&id);
|
||||
let cfg = driver::build_configuration(&sess);
|
||||
let krate = driver::phase_1_parse_input(&sess, cfg, &input);
|
||||
let (krate, _) = driver::phase_2_configure_and_expand(sess, &mut Loader::new(sess), krate,
|
||||
&from_str("rustdoc-test").unwrap());
|
||||
|
||||
let ctx = @core::DocContext {
|
||||
krate: krate,
|
||||
tycx: None,
|
||||
sess: sess,
|
||||
maybe_typed: core::NotTyped(sess),
|
||||
};
|
||||
local_data::set(super::ctxtkey, ctx);
|
||||
|
||||
@ -140,7 +137,7 @@ fn runtest(test: &str, cratename: &str, libs: HashSet<Path>, should_fail: bool,
|
||||
|
||||
let outdir = TempDir::new("rustdoctest").expect("rustdoc needs a tempdir");
|
||||
let out = Some(outdir.path().clone());
|
||||
let cfg = driver::build_configuration(sess);
|
||||
let cfg = driver::build_configuration(&sess);
|
||||
driver::compile_input(sess, cfg, &input, &out, &None);
|
||||
|
||||
if no_run { return }
|
||||
|
@ -183,21 +183,18 @@ impl<'a> RustdocVisitor<'a> {
|
||||
|
||||
fn resolve_id(&mut self, id: ast::NodeId, glob: bool,
|
||||
om: &mut Module) -> bool {
|
||||
let def = {
|
||||
let dm = match self.cx.tycx {
|
||||
Some(tcx) => tcx.def_map.borrow(),
|
||||
None => return false,
|
||||
};
|
||||
ast_util::def_id_of_def(*dm.get().get(&id))
|
||||
let tcx = match self.cx.maybe_typed {
|
||||
core::Typed(ref tcx) => tcx,
|
||||
core::NotTyped(_) => return false
|
||||
};
|
||||
let def = ast_util::def_id_of_def(*tcx.def_map.borrow().get().get(&id));
|
||||
if !ast_util::is_local(def) { return false }
|
||||
let analysis = match self.analysis {
|
||||
Some(analysis) => analysis, None => return false
|
||||
};
|
||||
if analysis.public_items.contains(&def.node) { return false }
|
||||
|
||||
let item = self.cx.tycx.unwrap().map.get(def.node);
|
||||
match item {
|
||||
match tcx.map.get(def.node) {
|
||||
ast_map::NodeItem(it) => {
|
||||
if glob {
|
||||
match it.node {
|
||||
|
Loading…
Reference in New Issue
Block a user