mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-06 23:17:37 +00:00
Move trans, back, driver, and back into a new crate, rustc_trans. Reduces memory usage significantly and opens opportunities for more parallel compilation.
This commit is contained in:
parent
f637f1c5a2
commit
dc6e414e6f
11
mk/crates.mk
11
mk/crates.mk
@ -53,7 +53,7 @@ TARGET_CRATES := libc std green native flate arena term \
|
|||||||
serialize sync getopts collections test time rand \
|
serialize sync getopts collections test time rand \
|
||||||
log regex graphviz core rbml alloc rustrt \
|
log regex graphviz core rbml alloc rustrt \
|
||||||
unicode
|
unicode
|
||||||
HOST_CRATES := syntax rustc rustdoc regex_macros fmt_macros \
|
HOST_CRATES := syntax rustc rustc_trans rustdoc regex_macros fmt_macros \
|
||||||
rustc_llvm rustc_back
|
rustc_llvm rustc_back
|
||||||
CRATES := $(TARGET_CRATES) $(HOST_CRATES)
|
CRATES := $(TARGET_CRATES) $(HOST_CRATES)
|
||||||
TOOLS := compiletest rustdoc rustc
|
TOOLS := compiletest rustdoc rustc
|
||||||
@ -69,11 +69,12 @@ DEPS_graphviz := std
|
|||||||
DEPS_green := std native:context_switch
|
DEPS_green := std native:context_switch
|
||||||
DEPS_native := std
|
DEPS_native := std
|
||||||
DEPS_syntax := std term serialize log fmt_macros arena libc
|
DEPS_syntax := std term serialize log fmt_macros arena libc
|
||||||
|
DEPS_rustc_trans := rustc rustc_back rustc_llvm libc
|
||||||
DEPS_rustc := syntax flate arena serialize getopts rbml \
|
DEPS_rustc := syntax flate arena serialize getopts rbml \
|
||||||
time log graphviz rustc_llvm rustc_back
|
time log graphviz rustc_llvm rustc_back
|
||||||
DEPS_rustc_llvm := native:rustllvm libc std
|
DEPS_rustc_llvm := native:rustllvm libc std
|
||||||
DEPS_rustc_back := std syntax rustc_llvm flate log libc
|
DEPS_rustc_back := std syntax rustc_llvm flate log libc
|
||||||
DEPS_rustdoc := rustc native:hoedown serialize getopts \
|
DEPS_rustdoc := rustc rustc_trans native:hoedown serialize getopts \
|
||||||
test time
|
test time
|
||||||
DEPS_flate := std native:miniz
|
DEPS_flate := std native:miniz
|
||||||
DEPS_arena := std
|
DEPS_arena := std
|
||||||
@ -96,7 +97,7 @@ DEPS_fmt_macros = std
|
|||||||
|
|
||||||
TOOL_DEPS_compiletest := test getopts native
|
TOOL_DEPS_compiletest := test getopts native
|
||||||
TOOL_DEPS_rustdoc := rustdoc native
|
TOOL_DEPS_rustdoc := rustdoc native
|
||||||
TOOL_DEPS_rustc := rustc native
|
TOOL_DEPS_rustc := rustc_trans native
|
||||||
TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs
|
TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs
|
||||||
TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs
|
TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs
|
||||||
TOOL_SOURCE_rustc := $(S)src/driver/driver.rs
|
TOOL_SOURCE_rustc := $(S)src/driver/driver.rs
|
||||||
@ -112,8 +113,8 @@ ONLY_RLIB_unicode := 1
|
|||||||
# You should not need to edit below this line
|
# You should not need to edit below this line
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
DOC_CRATES := $(filter-out rustc, $(filter-out syntax, $(CRATES)))
|
DOC_CRATES := $(filter-out rustc, $(filter-out rustc_trans, $(filter-out syntax, $(CRATES))))
|
||||||
COMPILER_DOC_CRATES := rustc syntax
|
COMPILER_DOC_CRATES := rustc rustc_trans syntax
|
||||||
|
|
||||||
# This macro creates some simple definitions for each crate being built, just
|
# This macro creates some simple definitions for each crate being built, just
|
||||||
# some munging of all of the parameters above.
|
# some munging of all of the parameters above.
|
||||||
|
@ -12,6 +12,6 @@
|
|||||||
extern crate "rustdoc" as this;
|
extern crate "rustdoc" as this;
|
||||||
|
|
||||||
#[cfg(rustc)]
|
#[cfg(rustc)]
|
||||||
extern crate "rustc" as this;
|
extern crate "rustc_trans" as this;
|
||||||
|
|
||||||
fn main() { this::main() }
|
fn main() { this::main() }
|
||||||
|
@ -13,31 +13,62 @@ https://github.com/rust-lang/rust/issues
|
|||||||
|
|
||||||
Your concerns are probably the same as someone else's.
|
Your concerns are probably the same as someone else's.
|
||||||
|
|
||||||
|
The crates of rustc
|
||||||
High-level concepts
|
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Rustc consists of the following subdirectories:
|
Rustc consists of four crates altogether: `libsyntax`, `librustc`,
|
||||||
|
`librustc_back`, and `librustc_trans` (the names and divisions are not
|
||||||
|
set in stone and may change; in general, a finer-grained division of
|
||||||
|
crates is preferable):
|
||||||
|
|
||||||
front/ - front-end: attributes, conditional compilation
|
- `libsyntax` contains those things concerned purely with syntax --
|
||||||
middle/ - middle-end: name resolution, typechecking, LLVM code
|
that is, the AST, parser, pretty-printer, lexer, macro expander, and
|
||||||
|
utilities for traversing ASTs -- are in a separate crate called
|
||||||
|
"syntax", whose files are in ./../libsyntax, where . is the current
|
||||||
|
directory (that is, the parent directory of front/, middle/, back/,
|
||||||
|
and so on).
|
||||||
|
|
||||||
|
- `librustc` (the current directory) contains the high-level analysis
|
||||||
|
passes, such as the type checker, borrow checker, and so forth.
|
||||||
|
It is the heart of the compiler.
|
||||||
|
|
||||||
|
- `librustc_back` contains some very low-level details that are
|
||||||
|
specific to different LLVM targets and so forth.
|
||||||
|
|
||||||
|
- `librustc_trans` contains the code to convert from Rust IR into LLVM
|
||||||
|
IR, and then from LLVM IR into machine code, as well as the main
|
||||||
|
driver that orchestrates all the other passes and various other bits
|
||||||
|
of miscellany. In general it contains code that runs towards the
|
||||||
|
end of the compilation process.
|
||||||
|
|
||||||
|
Roughly speaking the "order" of the three crates is as follows:
|
||||||
|
|
||||||
|
libsyntax -> librustc -> librustc_trans
|
||||||
|
| |
|
||||||
|
+-----------------+-------------------+
|
||||||
|
|
|
||||||
|
librustc_trans/driver
|
||||||
|
|
||||||
|
Here the role of `librustc_trans/driver` is to invoke the compiler
|
||||||
|
from libsyntax, then the analysis phases from librustc, and finally
|
||||||
|
the lowering and codegen passes from librustc_trans.
|
||||||
|
|
||||||
|
Modules in the rustc crate
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The rustc crate itself consists of the following subdirectories
|
||||||
|
(mostly, but not entirely, in their own directories):
|
||||||
|
|
||||||
|
session - options and data that pertain to the compilation session as a whole
|
||||||
|
middle - middle-end: name resolution, typechecking, LLVM code
|
||||||
generation
|
generation
|
||||||
back/ - back-end: linking and ABI
|
metadata - encoder and decoder for data required by
|
||||||
metadata/ - encoder and decoder for data required by
|
|
||||||
separate compilation
|
separate compilation
|
||||||
driver/ - command-line processing, main() entrypoint
|
util - ubiquitous types and helper functions
|
||||||
util/ - ubiquitous types and helper functions
|
lib - bindings to LLVM
|
||||||
lib/ - bindings to LLVM
|
|
||||||
|
|
||||||
The files concerned purely with syntax -- that is, the AST, parser,
|
|
||||||
pretty-printer, lexer, macro expander, and utilities for traversing
|
|
||||||
ASTs -- are in a separate crate called "syntax", whose files are in
|
|
||||||
./../libsyntax, where . is the current directory (that is, the parent
|
|
||||||
directory of front/, middle/, back/, and so on).
|
|
||||||
|
|
||||||
The entry-point for the compiler is main() in lib.rs, and
|
|
||||||
this file sequences the various parts together.
|
|
||||||
|
|
||||||
|
The entry-point for the compiler is main() in the librustc_trans
|
||||||
|
crate. But the
|
||||||
|
|
||||||
The 3 central data structures:
|
The 3 central data structures:
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -66,10 +97,10 @@ The 3 central data structures:
|
|||||||
compilation. Most variants in the ast::ty tag have a
|
compilation. Most variants in the ast::ty tag have a
|
||||||
corresponding variant in the ty::sty tag.
|
corresponding variant in the ty::sty tag.
|
||||||
|
|
||||||
#3: lib/llvm.rs defines the exported types ValueRef, TypeRef,
|
#3: lib/llvm.rs (in librustc_trans) defines the exported types
|
||||||
BasicBlockRef, and several others. Each of these is an opaque
|
ValueRef, TypeRef, BasicBlockRef, and several others. Each of
|
||||||
pointer to an LLVM type, manipulated through the lib::llvm
|
these is an opaque pointer to an LLVM type, manipulated through
|
||||||
interface.
|
the lib::llvm interface.
|
||||||
|
|
||||||
|
|
||||||
Control and information flow within the compiler:
|
Control and information flow within the compiler:
|
||||||
@ -87,7 +118,7 @@ Control and information flow within the compiler:
|
|||||||
structures. The driver passes environments to each compiler pass
|
structures. The driver passes environments to each compiler pass
|
||||||
that needs to refer to them.
|
that needs to refer to them.
|
||||||
|
|
||||||
- Finally middle/trans.rs translates the Rust AST to LLVM bitcode in a
|
- Finally, the `trans` module in `librustc_trans` translates the Rust
|
||||||
type-directed way. When it's finished synthesizing LLVM values,
|
AST to LLVM bitcode in a type-directed way. When it's finished
|
||||||
rustc asks LLVM to write them out in some form (.bc, .o) and
|
synthesizing LLVM values, rustc asks LLVM to write them out in some
|
||||||
possibly run the system linker.
|
form (.bc, .o) and possibly run the system linker.
|
||||||
|
@ -62,11 +62,6 @@ pub mod back {
|
|||||||
pub use rustc_back::target_strs;
|
pub use rustc_back::target_strs;
|
||||||
pub use rustc_back::x86;
|
pub use rustc_back::x86;
|
||||||
pub use rustc_back::x86_64;
|
pub use rustc_back::x86_64;
|
||||||
|
|
||||||
pub mod link;
|
|
||||||
pub mod lto;
|
|
||||||
pub mod write;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod middle {
|
pub mod middle {
|
||||||
@ -99,11 +94,9 @@ pub mod middle {
|
|||||||
pub mod region;
|
pub mod region;
|
||||||
pub mod resolve;
|
pub mod resolve;
|
||||||
pub mod resolve_lifetime;
|
pub mod resolve_lifetime;
|
||||||
pub mod save;
|
|
||||||
pub mod stability;
|
pub mod stability;
|
||||||
pub mod subst;
|
pub mod subst;
|
||||||
pub mod traits;
|
pub mod traits;
|
||||||
pub mod trans;
|
|
||||||
pub mod ty;
|
pub mod ty;
|
||||||
pub mod ty_fold;
|
pub mod ty_fold;
|
||||||
pub mod typeck;
|
pub mod typeck;
|
||||||
@ -112,7 +105,7 @@ pub mod middle {
|
|||||||
|
|
||||||
pub mod metadata;
|
pub mod metadata;
|
||||||
|
|
||||||
pub mod driver;
|
pub mod session;
|
||||||
|
|
||||||
pub mod plugin;
|
pub mod plugin;
|
||||||
|
|
||||||
@ -142,9 +135,3 @@ __build_diagnostic_array!(DIAGNOSTICS)
|
|||||||
mod rustc {
|
mod rustc {
|
||||||
pub use lint;
|
pub use lint;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn main() {
|
|
||||||
let args = std::os::args();
|
|
||||||
let result = driver::run(args);
|
|
||||||
std::os::set_exit_status(result);
|
|
||||||
}
|
|
||||||
|
@ -30,8 +30,7 @@ use middle::subst;
|
|||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::typeck::astconv::AstConv;
|
use middle::typeck::astconv::AstConv;
|
||||||
use middle::typeck::infer;
|
use middle::typeck::infer;
|
||||||
use driver::session::Session;
|
use session::{early_error, Session};
|
||||||
use driver::early_error;
|
|
||||||
use lint::{Level, LevelSource, Lint, LintId, LintArray, LintPass, LintPassObject};
|
use lint::{Level, LevelSource, Lint, LintId, LintArray, LintPass, LintPassObject};
|
||||||
use lint::{Default, CommandLine, Node, Allow, Warn, Deny, Forbid};
|
use lint::{Default, CommandLine, Node, Allow, Warn, Deny, Forbid};
|
||||||
use lint::builtin;
|
use lint::builtin;
|
||||||
|
@ -13,8 +13,7 @@
|
|||||||
//! Validates all used crates and extern libraries and loads their metadata
|
//! Validates all used crates and extern libraries and loads their metadata
|
||||||
|
|
||||||
use back::svh::Svh;
|
use back::svh::Svh;
|
||||||
use driver::session::Session;
|
use session::{config, Session};
|
||||||
use driver::driver;
|
|
||||||
use metadata::cstore;
|
use metadata::cstore;
|
||||||
use metadata::cstore::{CStore, CrateSource};
|
use metadata::cstore::{CStore, CrateSource};
|
||||||
use metadata::decoder;
|
use metadata::decoder;
|
||||||
@ -455,7 +454,7 @@ impl<'a> PluginMetadataReader<'a> {
|
|||||||
pub fn read_plugin_metadata(&mut self, krate: &ast::ViewItem) -> PluginMetadata {
|
pub fn read_plugin_metadata(&mut self, krate: &ast::ViewItem) -> PluginMetadata {
|
||||||
let info = extract_crate_info(&self.env, krate).unwrap();
|
let info = extract_crate_info(&self.env, krate).unwrap();
|
||||||
let target_triple = self.env.sess.opts.target_triple.as_slice();
|
let target_triple = self.env.sess.opts.target_triple.as_slice();
|
||||||
let is_cross = target_triple != driver::host_triple();
|
let is_cross = target_triple != config::host_triple();
|
||||||
let mut should_link = info.should_link && !is_cross;
|
let mut should_link = info.should_link && !is_cross;
|
||||||
let mut load_ctxt = loader::Context {
|
let mut load_ctxt = loader::Context {
|
||||||
sess: self.env.sess,
|
sess: self.env.sess,
|
||||||
@ -464,7 +463,7 @@ impl<'a> PluginMetadataReader<'a> {
|
|||||||
crate_name: info.name.as_slice(),
|
crate_name: info.name.as_slice(),
|
||||||
hash: None,
|
hash: None,
|
||||||
filesearch: self.env.sess.host_filesearch(),
|
filesearch: self.env.sess.host_filesearch(),
|
||||||
triple: driver::host_triple(),
|
triple: config::host_triple(),
|
||||||
root: &None,
|
root: &None,
|
||||||
rejected_via_hash: vec!(),
|
rejected_via_hash: vec!(),
|
||||||
rejected_via_triple: vec!(),
|
rejected_via_triple: vec!(),
|
||||||
@ -481,7 +480,7 @@ impl<'a> PluginMetadataReader<'a> {
|
|||||||
if decoder::get_plugin_registrar_fn(lib.metadata.as_slice()).is_some() {
|
if decoder::get_plugin_registrar_fn(lib.metadata.as_slice()).is_some() {
|
||||||
let message = format!("crate `{}` contains a plugin_registrar fn but \
|
let message = format!("crate `{}` contains a plugin_registrar fn but \
|
||||||
only a version for triple `{}` could be found (need {})",
|
only a version for triple `{}` could be found (need {})",
|
||||||
info.ident, target_triple, driver::host_triple());
|
info.ident, target_triple, config::host_triple());
|
||||||
self.env.sess.span_err(krate.span, message.as_slice());
|
self.env.sess.span_err(krate.span, message.as_slice());
|
||||||
// need to abort now because the syntax expansion
|
// need to abort now because the syntax expansion
|
||||||
// code will shortly attempt to load and execute
|
// code will shortly attempt to load and execute
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
pub use self::InlinedItemRef::*;
|
pub use self::InlinedItemRef::*;
|
||||||
|
|
||||||
use back::svh::Svh;
|
use back::svh::Svh;
|
||||||
use driver::config;
|
use session::config;
|
||||||
use metadata::common::*;
|
use metadata::common::*;
|
||||||
use metadata::cstore;
|
use metadata::cstore;
|
||||||
use metadata::decoder;
|
use metadata::decoder;
|
||||||
|
@ -214,7 +214,7 @@
|
|||||||
|
|
||||||
use back::archive::{METADATA_FILENAME};
|
use back::archive::{METADATA_FILENAME};
|
||||||
use back::svh::Svh;
|
use back::svh::Svh;
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{False, ObjectFile, mk_section_iter};
|
use llvm::{False, ObjectFile, mk_section_iter};
|
||||||
use llvm::archive_ro::ArchiveRO;
|
use llvm::archive_ro::ArchiveRO;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
use metadata::common as c;
|
use metadata::common as c;
|
||||||
use metadata::cstore as cstore;
|
use metadata::cstore as cstore;
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use metadata::decoder;
|
use metadata::decoder;
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use metadata::encoder as e;
|
use metadata::encoder as e;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
use self::Context::*;
|
use self::Context::*;
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::codemap::Span;
|
use syntax::codemap::Span;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
// This compiler pass detects static items that refer to themselves
|
// This compiler pass detects static items that refer to themselves
|
||||||
// recursively.
|
// recursively.
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use middle::resolve;
|
use middle::resolve;
|
||||||
use middle::def::{DefStatic, DefConst};
|
use middle::def::{DefStatic, DefConst};
|
||||||
|
|
||||||
|
@ -63,8 +63,8 @@
|
|||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
|
|
||||||
use driver::session;
|
use session;
|
||||||
use driver::config;
|
use session::config;
|
||||||
use metadata::cstore;
|
use metadata::cstore;
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
@ -9,8 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
|
||||||
use driver::config;
|
use session::{config, Session};
|
||||||
use driver::session::Session;
|
|
||||||
use syntax::ast::{Name, NodeId, Item, ItemFn};
|
use syntax::ast::{Name, NodeId, Item, ItemFn};
|
||||||
use syntax::ast_map;
|
use syntax::ast_map;
|
||||||
use syntax::attr;
|
use syntax::attr;
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
pub use self::LangItem::*;
|
pub use self::LangItem::*;
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use metadata::csearch::each_lang_item;
|
use metadata::csearch::each_lang_item;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::weak_lang_items;
|
use middle::weak_lang_items;
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
// makes all other generics or inline functions that it references
|
// makes all other generics or inline functions that it references
|
||||||
// reachable as well.
|
// reachable as well.
|
||||||
|
|
||||||
use driver::config;
|
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::typeck;
|
use middle::typeck;
|
||||||
use middle::privacy;
|
use middle::privacy;
|
||||||
|
use session::config;
|
||||||
use util::nodemap::NodeSet;
|
use util::nodemap::NodeSet;
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
@ -21,7 +21,7 @@ Most of the documentation on regions can be found in
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use middle::ty::{FreeRegion};
|
use middle::ty::{FreeRegion};
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::nodemap::{FnvHashMap, NodeMap, NodeSet};
|
use util::nodemap::{FnvHashMap, NodeMap, NodeSet};
|
||||||
|
@ -36,7 +36,7 @@ use self::ModuleKind::*;
|
|||||||
use self::TraitReferenceType::*;
|
use self::TraitReferenceType::*;
|
||||||
use self::FallbackChecks::*;
|
use self::FallbackChecks::*;
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use lint;
|
use lint;
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use metadata::decoder::{DefLike, DlDef, DlField, DlImpl};
|
use metadata::decoder::{DefLike, DlDef, DlField, DlImpl};
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
pub use self::DefRegion::*;
|
pub use self::DefRegion::*;
|
||||||
use self::ScopeChain::*;
|
use self::ScopeChain::*;
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
|
@ -37,7 +37,7 @@ pub use self::sty::*;
|
|||||||
pub use self::IntVarValue::*;
|
pub use self::IntVarValue::*;
|
||||||
|
|
||||||
use back::svh::Svh;
|
use back::svh::Svh;
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use lint;
|
use lint;
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::const_eval;
|
use middle::const_eval;
|
||||||
|
@ -82,7 +82,7 @@ use self::Expectation::*;
|
|||||||
use self::IsBinopAssignment::*;
|
use self::IsBinopAssignment::*;
|
||||||
use self::TupleArgumentsFlag::*;
|
use self::TupleArgumentsFlag::*;
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use middle::const_eval;
|
use middle::const_eval;
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::lang_items::IteratorItem;
|
use middle::lang_items::IteratorItem;
|
||||||
|
@ -67,7 +67,6 @@ pub mod region_inference;
|
|||||||
pub mod resolve;
|
pub mod resolve;
|
||||||
mod skolemize;
|
mod skolemize;
|
||||||
pub mod sub;
|
pub mod sub;
|
||||||
pub mod test;
|
|
||||||
pub mod type_variable;
|
pub mod type_variable;
|
||||||
pub mod unify;
|
pub mod unify;
|
||||||
|
|
||||||
@ -996,6 +995,16 @@ impl TypeTrace {
|
|||||||
pub fn span(&self) -> Span {
|
pub fn span(&self) -> Span {
|
||||||
self.origin.span()
|
self.origin.span()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dummy() -> TypeTrace {
|
||||||
|
TypeTrace {
|
||||||
|
origin: Misc(codemap::DUMMY_SP),
|
||||||
|
values: Types(ty::expected_found {
|
||||||
|
expected: ty::mk_err(),
|
||||||
|
found: ty::mk_err(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Repr for TypeTrace {
|
impl Repr for TypeTrace {
|
||||||
|
@ -65,13 +65,12 @@ pub use self::ExprAdjustment::*;
|
|||||||
pub use self::vtable_origin::*;
|
pub use self::vtable_origin::*;
|
||||||
pub use self::MethodOrigin::*;
|
pub use self::MethodOrigin::*;
|
||||||
|
|
||||||
use driver::config;
|
|
||||||
|
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::resolve;
|
use middle::resolve;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::VecPerParamSpace;
|
use middle::subst::VecPerParamSpace;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
use session::config;
|
||||||
use util::common::time;
|
use util::common::time;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
use util::ppaux;
|
use util::ppaux;
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
//! Validity checking for weak lang items
|
//! Validity checking for weak lang items
|
||||||
|
|
||||||
use driver::config;
|
use session::config;
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::lang_items;
|
use middle::lang_items;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
//! Used by `rustc` when loading a plugin.
|
//! Used by `rustc` when loading a plugin.
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use metadata::creader::PluginMetadataReader;
|
use metadata::creader::PluginMetadataReader;
|
||||||
use plugin::registry::Registry;
|
use plugin::registry::Registry;
|
||||||
|
|
||||||
|
@ -15,14 +15,11 @@ pub use self::EntryFnType::*;
|
|||||||
pub use self::CrateType::*;
|
pub use self::CrateType::*;
|
||||||
pub use self::Passes::*;
|
pub use self::Passes::*;
|
||||||
pub use self::OptLevel::*;
|
pub use self::OptLevel::*;
|
||||||
|
pub use self::OutputType::*;
|
||||||
pub use self::DebugInfoLevel::*;
|
pub use self::DebugInfoLevel::*;
|
||||||
|
|
||||||
use driver::{early_error, early_warn};
|
use session::{early_error, early_warn, Session};
|
||||||
use driver::driver;
|
|
||||||
use driver::session::Session;
|
|
||||||
|
|
||||||
use back;
|
|
||||||
use back::write;
|
|
||||||
use rustc_back::target::Target;
|
use rustc_back::target::Target;
|
||||||
use lint;
|
use lint;
|
||||||
use metadata::cstore;
|
use metadata::cstore;
|
||||||
@ -65,6 +62,15 @@ pub enum DebugInfoLevel {
|
|||||||
FullDebugInfo,
|
FullDebugInfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[deriving(Clone, PartialEq, PartialOrd, Ord, Eq)]
|
||||||
|
pub enum OutputType {
|
||||||
|
OutputTypeBitcode,
|
||||||
|
OutputTypeAssembly,
|
||||||
|
OutputTypeLlvmAssembly,
|
||||||
|
OutputTypeObject,
|
||||||
|
OutputTypeExe,
|
||||||
|
}
|
||||||
|
|
||||||
#[deriving(Clone)]
|
#[deriving(Clone)]
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
// The crate config requested for the session, which may be combined
|
// The crate config requested for the session, which may be combined
|
||||||
@ -76,7 +82,7 @@ pub struct Options {
|
|||||||
pub debuginfo: DebugInfoLevel,
|
pub debuginfo: DebugInfoLevel,
|
||||||
pub lint_opts: Vec<(String, lint::Level)>,
|
pub lint_opts: Vec<(String, lint::Level)>,
|
||||||
pub describe_lints: bool,
|
pub describe_lints: bool,
|
||||||
pub output_types: Vec<back::write::OutputType> ,
|
pub output_types: Vec<OutputType> ,
|
||||||
// This was mutable for rustpkg, which updates search paths based on the
|
// This was mutable for rustpkg, which updates search paths based on the
|
||||||
// parsed code. It remains mutable in case its replacements wants to use
|
// parsed code. It remains mutable in case its replacements wants to use
|
||||||
// this.
|
// this.
|
||||||
@ -108,6 +114,19 @@ pub struct Options {
|
|||||||
pub alt_std_name: Option<String>
|
pub alt_std_name: Option<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn host_triple() -> &'static str {
|
||||||
|
// Get the host triple out of the build environment. This ensures that our
|
||||||
|
// idea of the host triple is the same as for the set of libraries we've
|
||||||
|
// actually built. We can't just take LLVM's host triple because they
|
||||||
|
// normalize all ix86 architectures to i386.
|
||||||
|
//
|
||||||
|
// Instead of grabbing the host triple (for the current host), we grab (at
|
||||||
|
// compile time) the target triple that this rustc is built with and
|
||||||
|
// calling that (at runtime) the host triple.
|
||||||
|
(option_env!("CFG_COMPILER_HOST_TRIPLE")).
|
||||||
|
expect("CFG_COMPILER_HOST_TRIPLE")
|
||||||
|
}
|
||||||
|
|
||||||
/// Some reasonable defaults
|
/// Some reasonable defaults
|
||||||
pub fn basic_options() -> Options {
|
pub fn basic_options() -> Options {
|
||||||
Options {
|
Options {
|
||||||
@ -120,7 +139,7 @@ pub fn basic_options() -> Options {
|
|||||||
output_types: Vec::new(),
|
output_types: Vec::new(),
|
||||||
addl_lib_search_paths: RefCell::new(Vec::new()),
|
addl_lib_search_paths: RefCell::new(Vec::new()),
|
||||||
maybe_sysroot: None,
|
maybe_sysroot: None,
|
||||||
target_triple: driver::host_triple().to_string(),
|
target_triple: host_triple().to_string(),
|
||||||
cfg: Vec::new(),
|
cfg: Vec::new(),
|
||||||
test: false,
|
test: false,
|
||||||
parse_only: false,
|
parse_only: false,
|
||||||
@ -673,11 +692,11 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
|
|||||||
for unparsed_output_type in unparsed_output_types.iter() {
|
for unparsed_output_type in unparsed_output_types.iter() {
|
||||||
for part in unparsed_output_type.as_slice().split(',') {
|
for part in unparsed_output_type.as_slice().split(',') {
|
||||||
let output_type = match part.as_slice() {
|
let output_type = match part.as_slice() {
|
||||||
"asm" => write::OutputTypeAssembly,
|
"asm" => OutputTypeAssembly,
|
||||||
"ir" => write::OutputTypeLlvmAssembly,
|
"ir" => OutputTypeLlvmAssembly,
|
||||||
"bc" => write::OutputTypeBitcode,
|
"bc" => OutputTypeBitcode,
|
||||||
"obj" => write::OutputTypeObject,
|
"obj" => OutputTypeObject,
|
||||||
"link" => write::OutputTypeExe,
|
"link" => OutputTypeExe,
|
||||||
_ => {
|
_ => {
|
||||||
early_error(format!("unknown emission type: `{}`",
|
early_error(format!("unknown emission type: `{}`",
|
||||||
part).as_slice())
|
part).as_slice())
|
||||||
@ -690,12 +709,12 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
|
|||||||
output_types.as_mut_slice().sort();
|
output_types.as_mut_slice().sort();
|
||||||
output_types.dedup();
|
output_types.dedup();
|
||||||
if output_types.len() == 0 {
|
if output_types.len() == 0 {
|
||||||
output_types.push(write::OutputTypeExe);
|
output_types.push(OutputTypeExe);
|
||||||
}
|
}
|
||||||
|
|
||||||
let sysroot_opt = matches.opt_str("sysroot").map(|m| Path::new(m));
|
let sysroot_opt = matches.opt_str("sysroot").map(|m| Path::new(m));
|
||||||
let target = matches.opt_str("target").unwrap_or(
|
let target = matches.opt_str("target").unwrap_or(
|
||||||
driver::host_triple().to_string());
|
host_triple().to_string());
|
||||||
let opt_level = {
|
let opt_level = {
|
||||||
if matches.opt_present("O") {
|
if matches.opt_present("O") {
|
||||||
if matches.opt_present("opt-level") {
|
if matches.opt_present("opt-level") {
|
||||||
@ -880,8 +899,8 @@ impl fmt::Show for CrateType {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
||||||
use driver::config::{build_configuration, optgroups, build_session_options};
|
use session::config::{build_configuration, optgroups, build_session_options};
|
||||||
use driver::session::build_session;
|
use session::build_session;
|
||||||
|
|
||||||
use getopts::getopts;
|
use getopts::getopts;
|
||||||
use syntax::attr;
|
use syntax::attr;
|
@ -9,8 +9,6 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
|
||||||
use driver::config;
|
|
||||||
use driver::driver;
|
|
||||||
use metadata::cstore::CStore;
|
use metadata::cstore::CStore;
|
||||||
use metadata::filesearch;
|
use metadata::filesearch;
|
||||||
use lint;
|
use lint;
|
||||||
@ -18,7 +16,7 @@ use util::nodemap::NodeMap;
|
|||||||
|
|
||||||
use syntax::ast::NodeId;
|
use syntax::ast::NodeId;
|
||||||
use syntax::codemap::Span;
|
use syntax::codemap::Span;
|
||||||
use syntax::diagnostic;
|
use syntax::diagnostic::{mod, Emitter};
|
||||||
use syntax::diagnostics;
|
use syntax::diagnostics;
|
||||||
use syntax::feature_gate;
|
use syntax::feature_gate;
|
||||||
use syntax::parse;
|
use syntax::parse;
|
||||||
@ -29,6 +27,8 @@ use syntax::{ast, codemap};
|
|||||||
use std::os;
|
use std::os;
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
||||||
|
pub mod config;
|
||||||
|
|
||||||
// Represents the data associated with a compilation
|
// Represents the data associated with a compilation
|
||||||
// session for a single crate.
|
// session for a single crate.
|
||||||
pub struct Session {
|
pub struct Session {
|
||||||
@ -197,7 +197,7 @@ impl Session {
|
|||||||
pub fn host_filesearch<'a>(&'a self) -> filesearch::FileSearch<'a> {
|
pub fn host_filesearch<'a>(&'a self) -> filesearch::FileSearch<'a> {
|
||||||
filesearch::FileSearch::new(
|
filesearch::FileSearch::new(
|
||||||
self.sysroot(),
|
self.sysroot(),
|
||||||
driver::host_triple(),
|
config::host_triple(),
|
||||||
&self.opts.addl_lib_search_paths)
|
&self.opts.addl_lib_search_paths)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -263,3 +263,15 @@ pub fn build_session_(sopts: config::Options,
|
|||||||
pub fn expect<T>(sess: &Session, opt: Option<T>, msg: || -> String) -> T {
|
pub fn expect<T>(sess: &Session, opt: Option<T>, msg: || -> String) -> T {
|
||||||
diagnostic::expect(sess.diagnostic(), opt, msg)
|
diagnostic::expect(sess.diagnostic(), opt, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn early_error(msg: &str) -> ! {
|
||||||
|
let mut emitter = diagnostic::EmitterWriter::stderr(diagnostic::Auto, None);
|
||||||
|
emitter.emit(None, msg, None, diagnostic::Fatal);
|
||||||
|
panic!(diagnostic::FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn early_warn(msg: &str) {
|
||||||
|
let mut emitter = diagnostic::EmitterWriter::stderr(diagnostic::Auto, None);
|
||||||
|
emitter.emit(None, msg, None, diagnostic::Warning);
|
||||||
|
}
|
||||||
|
|
1
src/librustc_trans/README.txt
Normal file
1
src/librustc_trans/README.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
See the README.txt in ../librustc.
|
@ -13,15 +13,15 @@ use super::archive;
|
|||||||
use super::rpath;
|
use super::rpath;
|
||||||
use super::rpath::RPathConfig;
|
use super::rpath::RPathConfig;
|
||||||
use super::svh::Svh;
|
use super::svh::Svh;
|
||||||
use super::write::{OutputTypeBitcode, OutputTypeExe, OutputTypeObject};
|
|
||||||
use driver::driver::{CrateTranslation, OutputFilenames, Input, FileInput};
|
use driver::driver::{CrateTranslation, OutputFilenames, Input, FileInput};
|
||||||
use driver::config::NoDebugInfo;
|
use session::config;
|
||||||
use driver::session::Session;
|
use session::config::NoDebugInfo;
|
||||||
use driver::config;
|
use session::config::{OutputTypeBitcode, OutputTypeExe, OutputTypeObject};
|
||||||
|
use session::Session;
|
||||||
use metadata::common::LinkMeta;
|
use metadata::common::LinkMeta;
|
||||||
use metadata::{encoder, cstore, filesearch, csearch, creader};
|
use metadata::{encoder, cstore, filesearch, csearch, creader};
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use middle::trans::common::gensym_name;
|
use trans::common::gensym_name;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::common::time;
|
use util::common::time;
|
||||||
use util::ppaux;
|
use util::ppaux;
|
@ -10,13 +10,12 @@
|
|||||||
|
|
||||||
use super::link;
|
use super::link;
|
||||||
use super::write;
|
use super::write;
|
||||||
use driver::session;
|
use rustc::session::{mod, config};
|
||||||
use driver::config;
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::archive_ro::ArchiveRO;
|
use llvm::archive_ro::ArchiveRO;
|
||||||
use llvm::{ModuleRef, TargetMachineRef, True, False};
|
use llvm::{ModuleRef, TargetMachineRef, True, False};
|
||||||
use metadata::cstore;
|
use rustc::metadata::cstore;
|
||||||
use util::common::time;
|
use rustc::util::common::time;
|
||||||
|
|
||||||
use libc;
|
use libc;
|
||||||
use flate;
|
use flate;
|
@ -8,14 +8,12 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
pub use self::OutputType::*;
|
|
||||||
|
|
||||||
use back::lto;
|
use back::lto;
|
||||||
use back::link::{get_cc_prog, remove};
|
use back::link::{get_cc_prog, remove};
|
||||||
use driver::driver::{CrateTranslation, ModuleTranslation, OutputFilenames};
|
use driver::driver::{CrateTranslation, ModuleTranslation, OutputFilenames};
|
||||||
use driver::config::{NoDebugInfo, Passes, SomePasses, AllPasses};
|
use session::config::{NoDebugInfo, Passes, SomePasses, AllPasses};
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use driver::config;
|
use session::config;
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{ModuleRef, TargetMachineRef, PassManagerRef, DiagnosticInfoRef, ContextRef};
|
use llvm::{ModuleRef, TargetMachineRef, PassManagerRef, DiagnosticInfoRef, ContextRef};
|
||||||
use llvm::SMDiagnosticRef;
|
use llvm::SMDiagnosticRef;
|
||||||
@ -35,15 +33,6 @@ use std::sync::{Arc, Mutex};
|
|||||||
use std::task::TaskBuilder;
|
use std::task::TaskBuilder;
|
||||||
use libc::{c_uint, c_int, c_void};
|
use libc::{c_uint, c_int, c_void};
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq, PartialOrd, Ord, Eq)]
|
|
||||||
pub enum OutputType {
|
|
||||||
OutputTypeBitcode,
|
|
||||||
OutputTypeAssembly,
|
|
||||||
OutputTypeLlvmAssembly,
|
|
||||||
OutputTypeObject,
|
|
||||||
OutputTypeExe,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn llvm_err(handler: &diagnostic::Handler, msg: String) -> ! {
|
pub fn llvm_err(handler: &diagnostic::Handler, msg: String) -> ! {
|
||||||
unsafe {
|
unsafe {
|
||||||
let cstr = llvm::LLVMRustGetLastError();
|
let cstr = llvm::LLVMRustGetLastError();
|
||||||
@ -536,7 +525,7 @@ unsafe fn optimize_and_codegen(cgcx: &CodegenContext,
|
|||||||
|
|
||||||
pub fn run_passes(sess: &Session,
|
pub fn run_passes(sess: &Session,
|
||||||
trans: &CrateTranslation,
|
trans: &CrateTranslation,
|
||||||
output_types: &[OutputType],
|
output_types: &[config::OutputType],
|
||||||
crate_output: &OutputFilenames) {
|
crate_output: &OutputFilenames) {
|
||||||
// It's possible that we have `codegen_units > 1` but only one item in
|
// It's possible that we have `codegen_units > 1` but only one item in
|
||||||
// `trans.modules`. We could theoretically proceed and do LTO in that
|
// `trans.modules`. We could theoretically proceed and do LTO in that
|
||||||
@ -580,26 +569,26 @@ pub fn run_passes(sess: &Session,
|
|||||||
// archive in order to allow LTO against it.
|
// archive in order to allow LTO against it.
|
||||||
let needs_crate_bitcode =
|
let needs_crate_bitcode =
|
||||||
sess.crate_types.borrow().contains(&config::CrateTypeRlib) &&
|
sess.crate_types.borrow().contains(&config::CrateTypeRlib) &&
|
||||||
sess.opts.output_types.contains(&OutputTypeExe);
|
sess.opts.output_types.contains(&config::OutputTypeExe);
|
||||||
if needs_crate_bitcode {
|
if needs_crate_bitcode {
|
||||||
modules_config.emit_bc = true;
|
modules_config.emit_bc = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for output_type in output_types.iter() {
|
for output_type in output_types.iter() {
|
||||||
match *output_type {
|
match *output_type {
|
||||||
OutputTypeBitcode => { modules_config.emit_bc = true; },
|
config::OutputTypeBitcode => { modules_config.emit_bc = true; },
|
||||||
OutputTypeLlvmAssembly => { modules_config.emit_ir = true; },
|
config::OutputTypeLlvmAssembly => { modules_config.emit_ir = true; },
|
||||||
OutputTypeAssembly => {
|
config::OutputTypeAssembly => {
|
||||||
modules_config.emit_asm = true;
|
modules_config.emit_asm = true;
|
||||||
// If we're not using the LLVM assembler, this function
|
// If we're not using the LLVM assembler, this function
|
||||||
// could be invoked specially with output_type_assembly, so
|
// could be invoked specially with output_type_assembly, so
|
||||||
// in this case we still want the metadata object file.
|
// in this case we still want the metadata object file.
|
||||||
if !sess.opts.output_types.contains(&OutputTypeAssembly) {
|
if !sess.opts.output_types.contains(&config::OutputTypeAssembly) {
|
||||||
metadata_config.emit_obj = true;
|
metadata_config.emit_obj = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
OutputTypeObject => { modules_config.emit_obj = true; },
|
config::OutputTypeObject => { modules_config.emit_obj = true; },
|
||||||
OutputTypeExe => {
|
config::OutputTypeExe => {
|
||||||
modules_config.emit_obj = true;
|
modules_config.emit_obj = true;
|
||||||
metadata_config.emit_obj = true;
|
metadata_config.emit_obj = true;
|
||||||
},
|
},
|
||||||
@ -647,7 +636,7 @@ pub fn run_passes(sess: &Session,
|
|||||||
|
|
||||||
// Produce final compile outputs.
|
// Produce final compile outputs.
|
||||||
|
|
||||||
let copy_if_one_unit = |ext: &str, output_type: OutputType, keep_numbered: bool| {
|
let copy_if_one_unit = |ext: &str, output_type: config::OutputType, keep_numbered: bool| {
|
||||||
// Three cases:
|
// Three cases:
|
||||||
if sess.opts.cg.codegen_units == 1 {
|
if sess.opts.cg.codegen_units == 1 {
|
||||||
// 1) Only one codegen unit. In this case it's no difficulty
|
// 1) Only one codegen unit. In this case it's no difficulty
|
||||||
@ -750,25 +739,31 @@ pub fn run_passes(sess: &Session,
|
|||||||
let mut user_wants_bitcode = false;
|
let mut user_wants_bitcode = false;
|
||||||
for output_type in output_types.iter() {
|
for output_type in output_types.iter() {
|
||||||
match *output_type {
|
match *output_type {
|
||||||
OutputTypeBitcode => {
|
config::OutputTypeBitcode => {
|
||||||
user_wants_bitcode = true;
|
user_wants_bitcode = true;
|
||||||
// Copy to .bc, but always keep the .0.bc. There is a later
|
// Copy to .bc, but always keep the .0.bc. There is a later
|
||||||
// check to figure out if we should delete .0.bc files, or keep
|
// check to figure out if we should delete .0.bc files, or keep
|
||||||
// them for making an rlib.
|
// them for making an rlib.
|
||||||
copy_if_one_unit("0.bc", OutputTypeBitcode, true);
|
copy_if_one_unit("0.bc", config::OutputTypeBitcode, true);
|
||||||
},
|
}
|
||||||
OutputTypeLlvmAssembly => { copy_if_one_unit("0.ll", OutputTypeLlvmAssembly, false); },
|
config::OutputTypeLlvmAssembly => {
|
||||||
OutputTypeAssembly => { copy_if_one_unit("0.s", OutputTypeAssembly, false); },
|
copy_if_one_unit("0.ll", config::OutputTypeLlvmAssembly, false);
|
||||||
OutputTypeObject => { link_obj(&crate_output.path(OutputTypeObject)); },
|
}
|
||||||
OutputTypeExe => {
|
config::OutputTypeAssembly => {
|
||||||
// If OutputTypeObject is already in the list, then
|
copy_if_one_unit("0.s", config::OutputTypeAssembly, false);
|
||||||
// `crate.o` will be handled by the OutputTypeObject case.
|
}
|
||||||
|
config::OutputTypeObject => {
|
||||||
|
link_obj(&crate_output.path(config::OutputTypeObject));
|
||||||
|
}
|
||||||
|
config::OutputTypeExe => {
|
||||||
|
// If config::OutputTypeObject is already in the list, then
|
||||||
|
// `crate.o` will be handled by the config::OutputTypeObject case.
|
||||||
// Otherwise, we need to create the temporary object so we
|
// Otherwise, we need to create the temporary object so we
|
||||||
// can run the linker.
|
// can run the linker.
|
||||||
if !sess.opts.output_types.contains(&OutputTypeObject) {
|
if !sess.opts.output_types.contains(&config::OutputTypeObject) {
|
||||||
link_obj(&crate_output.temp_path(OutputTypeObject));
|
link_obj(&crate_output.temp_path(config::OutputTypeObject));
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let user_wants_bitcode = user_wants_bitcode;
|
let user_wants_bitcode = user_wants_bitcode;
|
||||||
@ -922,8 +917,8 @@ pub fn run_assembler(sess: &Session, outputs: &OutputFilenames) {
|
|||||||
let pname = get_cc_prog(sess);
|
let pname = get_cc_prog(sess);
|
||||||
let mut cmd = Command::new(pname.as_slice());
|
let mut cmd = Command::new(pname.as_slice());
|
||||||
|
|
||||||
cmd.arg("-c").arg("-o").arg(outputs.path(OutputTypeObject))
|
cmd.arg("-c").arg("-o").arg(outputs.path(config::OutputTypeObject))
|
||||||
.arg(outputs.temp_path(OutputTypeAssembly));
|
.arg(outputs.temp_path(config::OutputTypeAssembly));
|
||||||
debug!("{}", &cmd);
|
debug!("{}", &cmd);
|
||||||
|
|
||||||
match cmd.output() {
|
match cmd.output() {
|
@ -12,18 +12,19 @@ pub use self::Input::*;
|
|||||||
|
|
||||||
use back::link;
|
use back::link;
|
||||||
use back::write;
|
use back::write;
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use driver::config;
|
use session::config;
|
||||||
use lint;
|
use lint;
|
||||||
use llvm::{ContextRef, ModuleRef};
|
use llvm::{ContextRef, ModuleRef};
|
||||||
use metadata::common::LinkMeta;
|
use metadata::common::LinkMeta;
|
||||||
use metadata::creader;
|
use metadata::creader;
|
||||||
use middle::{trans, stability, ty, typeck, reachable};
|
use middle::{stability, ty, typeck, reachable};
|
||||||
use middle::dependency_format;
|
use middle::dependency_format;
|
||||||
use middle;
|
use middle;
|
||||||
use plugin::load::Plugins;
|
use plugin::load::Plugins;
|
||||||
use plugin::registry::Registry;
|
use plugin::registry::Registry;
|
||||||
use plugin;
|
use plugin;
|
||||||
|
use trans;
|
||||||
|
|
||||||
use util::common::time;
|
use util::common::time;
|
||||||
use util::nodemap::{NodeSet};
|
use util::nodemap::{NodeSet};
|
||||||
@ -34,6 +35,7 @@ use std::io;
|
|||||||
use std::io::fs;
|
use std::io::fs;
|
||||||
use std::os;
|
use std::os;
|
||||||
use arena::TypedArena;
|
use arena::TypedArena;
|
||||||
|
use save;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::ast_map;
|
use syntax::ast_map;
|
||||||
use syntax::attr;
|
use syntax::attr;
|
||||||
@ -43,19 +45,6 @@ use syntax::parse;
|
|||||||
use syntax::parse::token;
|
use syntax::parse::token;
|
||||||
use syntax;
|
use syntax;
|
||||||
|
|
||||||
pub fn host_triple() -> &'static str {
|
|
||||||
// Get the host triple out of the build environment. This ensures that our
|
|
||||||
// idea of the host triple is the same as for the set of libraries we've
|
|
||||||
// actually built. We can't just take LLVM's host triple because they
|
|
||||||
// normalize all ix86 architectures to i386.
|
|
||||||
//
|
|
||||||
// Instead of grabbing the host triple (for the current host), we grab (at
|
|
||||||
// compile time) the target triple that this rustc is built with and
|
|
||||||
// calling that (at runtime) the host triple.
|
|
||||||
(option_env!("CFG_COMPILER_HOST_TRIPLE")).
|
|
||||||
expect("CFG_COMPILER_HOST_TRIPLE")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn compile_input(sess: Session,
|
pub fn compile_input(sess: Session,
|
||||||
cfg: ast::CrateConfig,
|
cfg: ast::CrateConfig,
|
||||||
input: &Input,
|
input: &Input,
|
||||||
@ -503,7 +492,7 @@ pub fn phase_save_analysis(sess: &Session,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
time(sess.time_passes(), "save analysis", krate, |krate|
|
time(sess.time_passes(), "save analysis", krate, |krate|
|
||||||
middle::save::process_crate(sess, krate, analysis, odir));
|
save::process_crate(sess, krate, analysis, odir));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ModuleTranslation {
|
pub struct ModuleTranslation {
|
||||||
@ -541,7 +530,7 @@ pub fn phase_5_run_llvm_passes(sess: &Session,
|
|||||||
trans: &CrateTranslation,
|
trans: &CrateTranslation,
|
||||||
outputs: &OutputFilenames) {
|
outputs: &OutputFilenames) {
|
||||||
if sess.opts.cg.no_integrated_as {
|
if sess.opts.cg.no_integrated_as {
|
||||||
let output_type = write::OutputTypeAssembly;
|
let output_type = config::OutputTypeAssembly;
|
||||||
|
|
||||||
time(sess.time_passes(), "LLVM passes", (), |_|
|
time(sess.time_passes(), "LLVM passes", (), |_|
|
||||||
write::run_passes(sess, trans, &[output_type], outputs));
|
write::run_passes(sess, trans, &[output_type], outputs));
|
||||||
@ -550,7 +539,7 @@ pub fn phase_5_run_llvm_passes(sess: &Session,
|
|||||||
|
|
||||||
// Remove assembly source, unless --save-temps was specified
|
// Remove assembly source, unless --save-temps was specified
|
||||||
if !sess.opts.cg.save_temps {
|
if !sess.opts.cg.save_temps {
|
||||||
fs::unlink(&outputs.temp_path(write::OutputTypeAssembly)).unwrap();
|
fs::unlink(&outputs.temp_path(config::OutputTypeAssembly)).unwrap();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
time(sess.time_passes(), "LLVM passes", (), |_|
|
time(sess.time_passes(), "LLVM passes", (), |_|
|
||||||
@ -610,7 +599,7 @@ pub fn stop_after_phase_2(sess: &Session) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 == write::OutputTypeExe) {
|
if !sess.opts.output_types.iter().any(|&i| i == config::OutputTypeExe) {
|
||||||
debug!("not building executable, returning early from compile_input");
|
debug!("not building executable, returning early from compile_input");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -632,7 +621,7 @@ fn write_out_deps(sess: &Session,
|
|||||||
for output_type in sess.opts.output_types.iter() {
|
for output_type in sess.opts.output_types.iter() {
|
||||||
let file = outputs.path(*output_type);
|
let file = outputs.path(*output_type);
|
||||||
match *output_type {
|
match *output_type {
|
||||||
write::OutputTypeExe => {
|
config::OutputTypeExe => {
|
||||||
for output in sess.crate_types.borrow().iter() {
|
for output in sess.crate_types.borrow().iter() {
|
||||||
let p = link::filename_for_input(sess, *output,
|
let p = link::filename_for_input(sess, *output,
|
||||||
id, &file);
|
id, &file);
|
||||||
@ -772,7 +761,7 @@ pub struct OutputFilenames {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl OutputFilenames {
|
impl OutputFilenames {
|
||||||
pub fn path(&self, flavor: write::OutputType) -> Path {
|
pub fn path(&self, flavor: config::OutputType) -> Path {
|
||||||
match self.single_output_file {
|
match self.single_output_file {
|
||||||
Some(ref path) => return path.clone(),
|
Some(ref path) => return path.clone(),
|
||||||
None => {}
|
None => {}
|
||||||
@ -780,14 +769,14 @@ impl OutputFilenames {
|
|||||||
self.temp_path(flavor)
|
self.temp_path(flavor)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn temp_path(&self, flavor: write::OutputType) -> Path {
|
pub fn temp_path(&self, flavor: config::OutputType) -> Path {
|
||||||
let base = self.out_directory.join(self.filestem());
|
let base = self.out_directory.join(self.filestem());
|
||||||
match flavor {
|
match flavor {
|
||||||
write::OutputTypeBitcode => base.with_extension("bc"),
|
config::OutputTypeBitcode => base.with_extension("bc"),
|
||||||
write::OutputTypeAssembly => base.with_extension("s"),
|
config::OutputTypeAssembly => base.with_extension("s"),
|
||||||
write::OutputTypeLlvmAssembly => base.with_extension("ll"),
|
config::OutputTypeLlvmAssembly => base.with_extension("ll"),
|
||||||
write::OutputTypeObject => base.with_extension("o"),
|
config::OutputTypeObject => base.with_extension("o"),
|
||||||
write::OutputTypeExe => base,
|
config::OutputTypeExe => base,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -12,16 +12,20 @@ pub use syntax::diagnostic;
|
|||||||
|
|
||||||
use back::link;
|
use back::link;
|
||||||
use driver::driver::{Input, FileInput, StrInput};
|
use driver::driver::{Input, FileInput, StrInput};
|
||||||
use driver::session::{Session, build_session};
|
use session::{config, Session, build_session};
|
||||||
use lint::Lint;
|
use lint::Lint;
|
||||||
use lint;
|
use lint;
|
||||||
use metadata;
|
use metadata;
|
||||||
|
|
||||||
|
use rustc::DIAGNOSTICS;
|
||||||
|
|
||||||
use std::any::AnyRefExt;
|
use std::any::AnyRefExt;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::os;
|
use std::os;
|
||||||
use std::task::TaskBuilder;
|
use std::task::TaskBuilder;
|
||||||
|
|
||||||
|
use session::early_error;
|
||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::parse;
|
use syntax::parse;
|
||||||
use syntax::diagnostic::Emitter;
|
use syntax::diagnostic::Emitter;
|
||||||
@ -30,8 +34,6 @@ use syntax::diagnostics;
|
|||||||
use getopts;
|
use getopts;
|
||||||
|
|
||||||
pub mod driver;
|
pub mod driver;
|
||||||
pub mod session;
|
|
||||||
pub mod config;
|
|
||||||
pub mod pretty;
|
pub mod pretty;
|
||||||
|
|
||||||
pub fn run(args: Vec<String>) -> int {
|
pub fn run(args: Vec<String>) -> int {
|
||||||
@ -48,7 +50,7 @@ fn run_compiler(args: &[String]) {
|
|||||||
None => return
|
None => return
|
||||||
};
|
};
|
||||||
|
|
||||||
let descriptions = diagnostics::registry::Registry::new(&super::DIAGNOSTICS);
|
let descriptions = diagnostics::registry::Registry::new(&DIAGNOSTICS);
|
||||||
match matches.opt_str("explain") {
|
match matches.opt_str("explain") {
|
||||||
Some(ref code) => {
|
Some(ref code) => {
|
||||||
match descriptions.find_description(code.as_slice()) {
|
match descriptions.find_description(code.as_slice()) {
|
||||||
@ -155,7 +157,7 @@ pub fn version(binary: &str, matches: &getopts::Matches) -> Option<String> {
|
|||||||
println!("binary: {}", binary);
|
println!("binary: {}", binary);
|
||||||
println!("commit-hash: {}", unw(commit_hash_str()));
|
println!("commit-hash: {}", unw(commit_hash_str()));
|
||||||
println!("commit-date: {}", unw(commit_date_str()));
|
println!("commit-date: {}", unw(commit_date_str()));
|
||||||
println!("host: {}", driver::host_triple());
|
println!("host: {}", config::host_triple());
|
||||||
println!("release: {}", unw(release_str()));
|
println!("release: {}", unw(release_str()));
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
@ -418,17 +420,6 @@ fn parse_crate_attrs(sess: &Session, input: &Input) ->
|
|||||||
result.into_iter().collect()
|
result.into_iter().collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn early_error(msg: &str) -> ! {
|
|
||||||
let mut emitter = diagnostic::EmitterWriter::stderr(diagnostic::Auto, None);
|
|
||||||
emitter.emit(None, msg, None, diagnostic::Fatal);
|
|
||||||
panic!(diagnostic::FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn early_warn(msg: &str) {
|
|
||||||
let mut emitter = diagnostic::EmitterWriter::stderr(diagnostic::Auto, None);
|
|
||||||
emitter.emit(None, msg, None, diagnostic::Warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn list_metadata(sess: &Session, path: &Path,
|
pub fn list_metadata(sess: &Session, path: &Path,
|
||||||
out: &mut io::Writer) -> io::IoResult<()> {
|
out: &mut io::Writer) -> io::IoResult<()> {
|
||||||
metadata::loader::list_file_metadata(sess.target.target.options.is_like_osx, path, out)
|
metadata::loader::list_file_metadata(sess.target.target.options.is_like_osx, path, out)
|
||||||
@ -508,3 +499,4 @@ pub fn monitor(f: proc():Send) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -17,9 +17,8 @@ use self::NodesMatchingUII::*;
|
|||||||
|
|
||||||
use back::link;
|
use back::link;
|
||||||
|
|
||||||
use driver::config;
|
use session::{config, Session};
|
||||||
use driver::driver::{mod, CrateAnalysis};
|
use driver::driver::{mod, CrateAnalysis};
|
||||||
use driver::session::Session;
|
|
||||||
|
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::borrowck::{mod, FnPartsWithCFG};
|
use middle::borrowck::{mod, FnPartsWithCFG};
|
87
src/librustc_trans/lib.rs
Normal file
87
src/librustc_trans/lib.rs
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
/*!
|
||||||
|
|
||||||
|
The Rust compiler.
|
||||||
|
|
||||||
|
# Note
|
||||||
|
|
||||||
|
This API is completely unstable and subject to change.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#![crate_name = "rustc_trans"]
|
||||||
|
#![experimental]
|
||||||
|
#![comment = "The Rust compiler back end and driver"]
|
||||||
|
#![license = "MIT/ASL2"]
|
||||||
|
#![crate_type = "dylib"]
|
||||||
|
#![crate_type = "rlib"]
|
||||||
|
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
||||||
|
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
|
||||||
|
html_root_url = "http://doc.rust-lang.org/nightly/")]
|
||||||
|
|
||||||
|
#![feature(default_type_params, globs, if_let, import_shadowing, macro_rules, phase, quote)]
|
||||||
|
#![feature(slicing_syntax, struct_variant, unsafe_destructor)]
|
||||||
|
#![feature(rustc_diagnostic_macros)]
|
||||||
|
|
||||||
|
extern crate arena;
|
||||||
|
extern crate flate;
|
||||||
|
extern crate getopts;
|
||||||
|
extern crate graphviz;
|
||||||
|
extern crate libc;
|
||||||
|
extern crate rustc;
|
||||||
|
extern crate rustc_back;
|
||||||
|
#[phase(plugin, link)] extern crate log;
|
||||||
|
#[phase(plugin, link)] extern crate syntax;
|
||||||
|
extern crate serialize;
|
||||||
|
extern crate "rustc_llvm" as llvm;
|
||||||
|
|
||||||
|
pub use rustc::session;
|
||||||
|
pub use rustc::metadata;
|
||||||
|
pub use rustc::middle;
|
||||||
|
pub use rustc::lint;
|
||||||
|
pub use rustc::plugin;
|
||||||
|
pub use rustc::util;
|
||||||
|
|
||||||
|
pub mod back {
|
||||||
|
pub use rustc_back::abi;
|
||||||
|
pub use rustc_back::archive;
|
||||||
|
pub use rustc_back::arm;
|
||||||
|
pub use rustc_back::mips;
|
||||||
|
pub use rustc_back::mipsel;
|
||||||
|
pub use rustc_back::rpath;
|
||||||
|
pub use rustc_back::svh;
|
||||||
|
pub use rustc_back::target_strs;
|
||||||
|
pub use rustc_back::x86;
|
||||||
|
pub use rustc_back::x86_64;
|
||||||
|
|
||||||
|
pub mod link;
|
||||||
|
pub mod lto;
|
||||||
|
pub mod write;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod trans;
|
||||||
|
pub mod save;
|
||||||
|
pub mod driver;
|
||||||
|
|
||||||
|
pub mod lib {
|
||||||
|
pub use llvm;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
let args = std::os::args();
|
||||||
|
let result = driver::run(args);
|
||||||
|
std::os::set_exit_status(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
pub mod test;
|
@ -28,7 +28,7 @@
|
|||||||
//! DxrVisitor walks the AST and processes it.
|
//! DxrVisitor walks the AST and processes it.
|
||||||
|
|
||||||
use driver::driver::CrateAnalysis;
|
use driver::driver::CrateAnalysis;
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
|
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
@ -55,9 +55,9 @@ use syntax::visit::Visitor;
|
|||||||
use syntax::print::pprust::{path_to_string,ty_to_string};
|
use syntax::print::pprust::{path_to_string,ty_to_string};
|
||||||
use syntax::ptr::P;
|
use syntax::ptr::P;
|
||||||
|
|
||||||
use middle::save::span_utils::SpanUtils;
|
use self::span_utils::SpanUtils;
|
||||||
use middle::save::recorder::Recorder;
|
use self::recorder::Recorder;
|
||||||
use middle::save::recorder::FmtStrs;
|
use self::recorder::FmtStrs;
|
||||||
|
|
||||||
use util::ppaux;
|
use util::ppaux;
|
||||||
|
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
pub use self::Row::*;
|
pub use self::Row::*;
|
||||||
|
|
||||||
use middle::save::escape;
|
use super::escape;
|
||||||
use middle::save::span_utils::SpanUtils;
|
use super::span_utils::SpanUtils;
|
||||||
|
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
|
|
@ -8,9 +8,9 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use driver::session::Session;
|
use rustc::session::Session;
|
||||||
|
|
||||||
use middle::save::generated_code;
|
use save::generated_code;
|
||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
@ -17,11 +17,9 @@
|
|||||||
// This is only used by tests, hence allow dead code.
|
// This is only used by tests, hence allow dead code.
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use driver::config;
|
|
||||||
use driver::diagnostic;
|
use driver::diagnostic;
|
||||||
use driver::diagnostic::Emitter;
|
use driver::diagnostic::Emitter;
|
||||||
use driver::driver;
|
use driver::driver;
|
||||||
use driver::session;
|
|
||||||
use middle::lang_items;
|
use middle::lang_items;
|
||||||
use middle::region;
|
use middle::region;
|
||||||
use middle::resolve;
|
use middle::resolve;
|
||||||
@ -32,6 +30,7 @@ use middle::typeck::infer::combine::Combine;
|
|||||||
use middle::typeck::infer;
|
use middle::typeck::infer;
|
||||||
use middle::typeck::infer::lub::Lub;
|
use middle::typeck::infer::lub::Lub;
|
||||||
use middle::typeck::infer::glb::Glb;
|
use middle::typeck::infer::glb::Glb;
|
||||||
|
use session::{mod, config};
|
||||||
use syntax::codemap;
|
use syntax::codemap;
|
||||||
use syntax::codemap::{Span, CodeMap, DUMMY_SP};
|
use syntax::codemap::{Span, CodeMap, DUMMY_SP};
|
||||||
use syntax::diagnostic::{Level, RenderSpan, Bug, Fatal, Error, Warning, Note, Help};
|
use syntax::diagnostic::{Level, RenderSpan, Bug, Fatal, Error, Warning, Note, Help};
|
||||||
@ -289,13 +288,7 @@ impl<'a, 'tcx> Env<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn dummy_type_trace(&self) -> infer::TypeTrace {
|
pub fn dummy_type_trace(&self) -> infer::TypeTrace {
|
||||||
infer::TypeTrace {
|
infer::TypeTrace::dummy()
|
||||||
origin: infer::Misc(DUMMY_SP),
|
|
||||||
values: infer::Types(ty::expected_found {
|
|
||||||
expected: ty::mk_err(),
|
|
||||||
found: ty::mk_err(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn lub(&self) -> Lub<'a, 'tcx> {
|
pub fn lub(&self) -> Lub<'a, 'tcx> {
|
@ -193,7 +193,6 @@ use self::Opt::*;
|
|||||||
use self::FailureHandler::*;
|
use self::FailureHandler::*;
|
||||||
|
|
||||||
use back::abi;
|
use back::abi;
|
||||||
use driver::config::FullDebugInfo;
|
|
||||||
use llvm::{ValueRef, BasicBlockRef};
|
use llvm::{ValueRef, BasicBlockRef};
|
||||||
use middle::check_match::StaticInliner;
|
use middle::check_match::StaticInliner;
|
||||||
use middle::check_match;
|
use middle::check_match;
|
||||||
@ -204,21 +203,22 @@ use middle::lang_items::StrEqFnLangItem;
|
|||||||
use middle::mem_categorization as mc;
|
use middle::mem_categorization as mc;
|
||||||
use middle::pat_util::*;
|
use middle::pat_util::*;
|
||||||
use middle::resolve::DefMap;
|
use middle::resolve::DefMap;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::{AddCase, And, BitCast, Br, CondBr, GEPi, InBoundsGEP, Load};
|
use trans::build::{AddCase, And, BitCast, Br, CondBr, GEPi, InBoundsGEP, Load};
|
||||||
use middle::trans::build::{Mul, Not, Store, Sub, add_comment};
|
use trans::build::{Mul, Not, Store, Sub, add_comment};
|
||||||
use middle::trans::build;
|
use trans::build;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup::{mod, CleanupMethods};
|
use trans::cleanup::{mod, CleanupMethods};
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::consts;
|
use trans::consts;
|
||||||
use middle::trans::datum::*;
|
use trans::datum::*;
|
||||||
use middle::trans::expr::{mod, Dest};
|
use trans::expr::{mod, Dest};
|
||||||
use middle::trans::tvec;
|
use trans::tvec;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
use session::config::FullDebugInfo;
|
||||||
use util::common::indenter;
|
use util::common::indenter;
|
||||||
use util::nodemap::FnvHashMap;
|
use util::nodemap::FnvHashMap;
|
||||||
use util::ppaux::{Repr, vec_map_to_string};
|
use util::ppaux::{Repr, vec_map_to_string};
|
@ -55,15 +55,15 @@ use llvm::{ValueRef, True, IntEQ, IntNE};
|
|||||||
use back::abi::slice_elt_base;
|
use back::abi::slice_elt_base;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
||||||
use middle::trans::_match;
|
use trans::_match;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum;
|
use trans::datum;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::ty::Disr;
|
use middle::ty::Disr;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
@ -13,14 +13,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
use std::c_str::ToCStr;
|
use std::c_str::ToCStr;
|
||||||
use std::string::String;
|
use std::string::String;
|
@ -31,10 +31,7 @@ pub use self::scalar_type::*;
|
|||||||
|
|
||||||
use back::link::{mangle_exported_name};
|
use back::link::{mangle_exported_name};
|
||||||
use back::{link, abi};
|
use back::{link, abi};
|
||||||
use driver::config;
|
|
||||||
use driver::config::{NoDebugInfo, FullDebugInfo};
|
|
||||||
use driver::driver::{CrateAnalysis, CrateTranslation, ModuleTranslation};
|
use driver::driver::{CrateAnalysis, CrateTranslation, ModuleTranslation};
|
||||||
use driver::session::Session;
|
|
||||||
use lint;
|
use lint;
|
||||||
use llvm::{BasicBlockRef, Linkage, ValueRef, Vector, get_param};
|
use llvm::{BasicBlockRef, Linkage, ValueRef, Vector, get_param};
|
||||||
use llvm;
|
use llvm;
|
||||||
@ -44,41 +41,43 @@ use middle::lang_items::{LangItem, ExchangeMallocFnLangItem, StartFnLangItem};
|
|||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::weak_lang_items;
|
use middle::weak_lang_items;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
||||||
use middle::trans::_match;
|
|
||||||
use middle::trans::adt;
|
|
||||||
use middle::trans::build::*;
|
|
||||||
use middle::trans::builder::{Builder, noname};
|
|
||||||
use middle::trans::callee;
|
|
||||||
use middle::trans::cleanup::{CleanupMethods, ScopeId};
|
|
||||||
use middle::trans::cleanup;
|
|
||||||
use middle::trans::common::{Block, C_bool, C_bytes_in_context, C_i32, C_integral};
|
|
||||||
use middle::trans::common::{C_null, C_struct_in_context, C_u64, C_u8, C_uint, C_undef};
|
|
||||||
use middle::trans::common::{CrateContext, ExternMap, FunctionContext};
|
|
||||||
use middle::trans::common::{NodeInfo, Result, SubstP};
|
|
||||||
use middle::trans::common::{node_id_type, param_substs, return_type_is_void};
|
|
||||||
use middle::trans::common::{tydesc_info, type_is_immediate};
|
|
||||||
use middle::trans::common::{type_is_zero_size, val_ty};
|
|
||||||
use middle::trans::common;
|
|
||||||
use middle::trans::consts;
|
|
||||||
use middle::trans::context::SharedCrateContext;
|
|
||||||
use middle::trans::controlflow;
|
|
||||||
use middle::trans::datum;
|
|
||||||
use middle::trans::debuginfo;
|
|
||||||
use middle::trans::expr;
|
|
||||||
use middle::trans::foreign;
|
|
||||||
use middle::trans::glue;
|
|
||||||
use middle::trans::inline;
|
|
||||||
use middle::trans::intrinsic;
|
|
||||||
use middle::trans::machine;
|
|
||||||
use middle::trans::machine::{llsize_of, llsize_of_real, llalign_of_min};
|
|
||||||
use middle::trans::meth;
|
|
||||||
use middle::trans::monomorphize;
|
|
||||||
use middle::trans::tvec;
|
|
||||||
use middle::trans::type_::Type;
|
|
||||||
use middle::trans::type_of;
|
|
||||||
use middle::trans::type_of::*;
|
|
||||||
use middle::trans::value::Value;
|
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
use session::config::{mod, NoDebugInfo, FullDebugInfo};
|
||||||
|
use session::Session;
|
||||||
|
use trans::_match;
|
||||||
|
use trans::adt;
|
||||||
|
use trans::build::*;
|
||||||
|
use trans::builder::{Builder, noname};
|
||||||
|
use trans::callee;
|
||||||
|
use trans::cleanup::{CleanupMethods, ScopeId};
|
||||||
|
use trans::cleanup;
|
||||||
|
use trans::common::{Block, C_bool, C_bytes_in_context, C_i32, C_integral};
|
||||||
|
use trans::common::{C_null, C_struct_in_context, C_u64, C_u8, C_uint, C_undef};
|
||||||
|
use trans::common::{CrateContext, ExternMap, FunctionContext};
|
||||||
|
use trans::common::{NodeInfo, Result, SubstP};
|
||||||
|
use trans::common::{node_id_type, param_substs, return_type_is_void};
|
||||||
|
use trans::common::{tydesc_info, type_is_immediate};
|
||||||
|
use trans::common::{type_is_zero_size, val_ty};
|
||||||
|
use trans::common;
|
||||||
|
use trans::consts;
|
||||||
|
use trans::context::SharedCrateContext;
|
||||||
|
use trans::controlflow;
|
||||||
|
use trans::datum;
|
||||||
|
use trans::debuginfo;
|
||||||
|
use trans::expr;
|
||||||
|
use trans::foreign;
|
||||||
|
use trans::glue;
|
||||||
|
use trans::inline;
|
||||||
|
use trans::intrinsic;
|
||||||
|
use trans::machine;
|
||||||
|
use trans::machine::{llsize_of, llsize_of_real, llalign_of_min};
|
||||||
|
use trans::meth;
|
||||||
|
use trans::monomorphize;
|
||||||
|
use trans::tvec;
|
||||||
|
use trans::type_::Type;
|
||||||
|
use trans::type_of;
|
||||||
|
use trans::type_of::*;
|
||||||
|
use trans::value::Value;
|
||||||
use util::common::indenter;
|
use util::common::indenter;
|
||||||
use util::ppaux::{Repr, ty_to_string};
|
use util::ppaux::{Repr, ty_to_string};
|
||||||
use util::sha2::Sha256;
|
use util::sha2::Sha256;
|
||||||
@ -1500,7 +1499,7 @@ pub fn init_function<'a, 'tcx>(fcx: &'a FunctionContext<'a, 'tcx>,
|
|||||||
// - trans_args
|
// - trans_args
|
||||||
|
|
||||||
pub fn arg_kind(cx: &FunctionContext, t: ty::t) -> datum::Rvalue {
|
pub fn arg_kind(cx: &FunctionContext, t: ty::t) -> datum::Rvalue {
|
||||||
use middle::trans::datum::{ByRef, ByValue};
|
use trans::datum::{ByRef, ByValue};
|
||||||
|
|
||||||
datum::Rvalue {
|
datum::Rvalue {
|
||||||
mode: if arg_is_indirect(cx.ccx, t) { ByRef } else { ByValue }
|
mode: if arg_is_indirect(cx.ccx, t) { ByRef } else { ByValue }
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{BasicBlockRef};
|
use llvm::{BasicBlockRef};
|
||||||
use middle::trans::value::{Users, Value};
|
use trans::value::{Users, Value};
|
||||||
use std::iter::{Filter, Map};
|
use std::iter::{Filter, Map};
|
||||||
|
|
||||||
pub struct BasicBlock(pub BasicBlockRef);
|
pub struct BasicBlock(pub BasicBlockRef);
|
@ -15,11 +15,11 @@ use llvm;
|
|||||||
use llvm::{CallConv, AtomicBinOp, AtomicOrdering, AsmDialect, AttrBuilder};
|
use llvm::{CallConv, AtomicBinOp, AtomicOrdering, AsmDialect, AttrBuilder};
|
||||||
use llvm::{Opcode, IntPredicate, RealPredicate};
|
use llvm::{Opcode, IntPredicate, RealPredicate};
|
||||||
use llvm::{ValueRef, BasicBlockRef};
|
use llvm::{ValueRef, BasicBlockRef};
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use syntax::codemap::Span;
|
use syntax::codemap::Span;
|
||||||
|
|
||||||
use middle::trans::builder::Builder;
|
use trans::builder::Builder;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
use libc::{c_uint, c_char};
|
use libc::{c_uint, c_char};
|
||||||
|
|
@ -14,10 +14,10 @@ use llvm;
|
|||||||
use llvm::{CallConv, AtomicBinOp, AtomicOrdering, AsmDialect, AttrBuilder};
|
use llvm::{CallConv, AtomicBinOp, AtomicOrdering, AsmDialect, AttrBuilder};
|
||||||
use llvm::{Opcode, IntPredicate, RealPredicate, False};
|
use llvm::{Opcode, IntPredicate, RealPredicate, False};
|
||||||
use llvm::{ValueRef, BasicBlockRef, BuilderRef, ModuleRef};
|
use llvm::{ValueRef, BasicBlockRef, BuilderRef, ModuleRef};
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::machine::llalign_of_pref;
|
use trans::machine::llalign_of_pref;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use util::nodemap::FnvHashMap;
|
use util::nodemap::FnvHashMap;
|
||||||
use libc::{c_uint, c_char};
|
use libc::{c_uint, c_char};
|
||||||
use std::string::String;
|
use std::string::String;
|
@ -12,13 +12,13 @@ pub use self::ArgKind::*;
|
|||||||
|
|
||||||
use llvm::Attribute;
|
use llvm::Attribute;
|
||||||
use std::option;
|
use std::option;
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use middle::trans::cabi_x86;
|
use trans::cabi_x86;
|
||||||
use middle::trans::cabi_x86_64;
|
use trans::cabi_x86_64;
|
||||||
use middle::trans::cabi_x86_win64;
|
use trans::cabi_x86_win64;
|
||||||
use middle::trans::cabi_arm;
|
use trans::cabi_arm;
|
||||||
use middle::trans::cabi_mips;
|
use trans::cabi_mips;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
#[deriving(Clone, PartialEq)]
|
#[deriving(Clone, PartialEq)]
|
||||||
pub enum ArgKind {
|
pub enum ArgKind {
|
@ -13,9 +13,9 @@
|
|||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{Integer, Pointer, Float, Double, Struct, Array};
|
use llvm::{Integer, Pointer, Float, Double, Struct, Array};
|
||||||
use llvm::{StructRetAttribute, ZExtAttribute};
|
use llvm::{StructRetAttribute, ZExtAttribute};
|
||||||
use middle::trans::cabi::{FnType, ArgType};
|
use trans::cabi::{FnType, ArgType};
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
|
|
@ -15,9 +15,9 @@ use std::cmp;
|
|||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{Integer, Pointer, Float, Double, Struct, Array};
|
use llvm::{Integer, Pointer, Float, Double, Struct, Array};
|
||||||
use llvm::{StructRetAttribute, ZExtAttribute};
|
use llvm::{StructRetAttribute, ZExtAttribute};
|
||||||
use middle::trans::cabi::{ArgType, FnType};
|
use trans::cabi::{ArgType, FnType};
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
fn align_up_to(off: uint, a: uint) -> uint {
|
fn align_up_to(off: uint, a: uint) -> uint {
|
||||||
return (off + a - 1u) / a * a;
|
return (off + a - 1u) / a * a;
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
use self::Strategy::*;
|
use self::Strategy::*;
|
||||||
use llvm::*;
|
use llvm::*;
|
||||||
use middle::trans::cabi::{ArgType, FnType};
|
use trans::cabi::{ArgType, FnType};
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use super::common::*;
|
use super::common::*;
|
||||||
use super::machine::*;
|
use super::machine::*;
|
||||||
|
|
@ -18,9 +18,9 @@ use llvm;
|
|||||||
use llvm::{Integer, Pointer, Float, Double};
|
use llvm::{Integer, Pointer, Float, Double};
|
||||||
use llvm::{Struct, Array, Attribute};
|
use llvm::{Struct, Array, Attribute};
|
||||||
use llvm::{StructRetAttribute, ByValAttribute, ZExtAttribute};
|
use llvm::{StructRetAttribute, ByValAttribute, ZExtAttribute};
|
||||||
use middle::trans::cabi::{ArgType, FnType};
|
use trans::cabi::{ArgType, FnType};
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
|
|
@ -11,8 +11,8 @@
|
|||||||
use llvm::*;
|
use llvm::*;
|
||||||
use super::common::*;
|
use super::common::*;
|
||||||
use super::machine::*;
|
use super::machine::*;
|
||||||
use middle::trans::cabi::{ArgType, FnType};
|
use trans::cabi::{ArgType, FnType};
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
// Win64 ABI: http://msdn.microsoft.com/en-us/library/zthk2dkh.aspx
|
// Win64 ABI: http://msdn.microsoft.com/en-us/library/zthk2dkh.aspx
|
||||||
|
|
@ -23,33 +23,33 @@ pub use self::CallArgs::*;
|
|||||||
use arena::TypedArena;
|
use arena::TypedArena;
|
||||||
use back::abi;
|
use back::abi;
|
||||||
use back::link;
|
use back::link;
|
||||||
use driver::session;
|
use session;
|
||||||
use llvm::{ValueRef, get_param};
|
use llvm::{ValueRef, get_param};
|
||||||
use llvm;
|
use llvm;
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::{Subst};
|
use middle::subst::{Subst};
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::closure;
|
use trans::closure;
|
||||||
use middle::trans::common;
|
use trans::common;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum::*;
|
use trans::datum::*;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::glue;
|
use trans::glue;
|
||||||
use middle::trans::inline;
|
use trans::inline;
|
||||||
use middle::trans::foreign;
|
use trans::foreign;
|
||||||
use middle::trans::intrinsic;
|
use trans::intrinsic;
|
||||||
use middle::trans::meth;
|
use trans::meth;
|
||||||
use middle::trans::monomorphize;
|
use trans::monomorphize;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::typeck::coherence::make_substs_for_receiver_types;
|
use middle::typeck::coherence::make_substs_for_receiver_types;
|
||||||
use middle::typeck::MethodCall;
|
use middle::typeck::MethodCall;
|
@ -19,14 +19,14 @@ pub use self::EarlyExitLabel::*;
|
|||||||
pub use self::Heap::*;
|
pub use self::Heap::*;
|
||||||
|
|
||||||
use llvm::{BasicBlockRef, ValueRef};
|
use llvm::{BasicBlockRef, ValueRef};
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::build;
|
use trans::build;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::common;
|
use trans::common;
|
||||||
use middle::trans::common::{Block, FunctionContext, ExprId, NodeInfo};
|
use trans::common::{Block, FunctionContext, ExprId, NodeInfo};
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::glue;
|
use trans::glue;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
@ -11,23 +11,23 @@
|
|||||||
|
|
||||||
use back::abi;
|
use back::abi;
|
||||||
use back::link::mangle_internal_name_by_path_and_seq;
|
use back::link::mangle_internal_name_by_path_and_seq;
|
||||||
use driver::config::FullDebugInfo;
|
|
||||||
use llvm::ValueRef;
|
use llvm::ValueRef;
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::mem_categorization::Typer;
|
use middle::mem_categorization::Typer;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::cleanup::{CleanupMethods, ScopeId};
|
use trans::cleanup::{CleanupMethods, ScopeId};
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum::{Datum, DatumBlock, Expr, Lvalue, rvalue_scratch_datum};
|
use trans::datum::{Datum, DatumBlock, Expr, Lvalue, rvalue_scratch_datum};
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::monomorphize::MonoId;
|
use trans::monomorphize::MonoId;
|
||||||
use middle::trans::type_of::*;
|
use trans::type_of::*;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::subst::{Subst, Substs};
|
use middle::subst::{Subst, Substs};
|
||||||
|
use session::config::FullDebugInfo;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
use util::ppaux::ty_to_string;
|
use util::ppaux::ty_to_string;
|
||||||
|
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
pub use self::ExprOrMethodCall::*;
|
pub use self::ExprOrMethodCall::*;
|
||||||
|
|
||||||
use driver::session::Session;
|
use session::Session;
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{ValueRef, BasicBlockRef, BuilderRef, ContextRef};
|
use llvm::{ValueRef, BasicBlockRef, BuilderRef, ContextRef};
|
||||||
use llvm::{True, False, Bool};
|
use llvm::{True, False, Bool};
|
||||||
@ -23,14 +23,14 @@ use middle::lang_items::LangItem;
|
|||||||
use middle::mem_categorization as mc;
|
use middle::mem_categorization as mc;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::build;
|
use trans::build;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::datum;
|
use trans::datum;
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::traits;
|
use middle::traits;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::ty_fold;
|
use middle::ty_fold;
|
||||||
@ -53,7 +53,7 @@ use syntax::codemap::Span;
|
|||||||
use syntax::parse::token::InternedString;
|
use syntax::parse::token::InternedString;
|
||||||
use syntax::parse::token;
|
use syntax::parse::token;
|
||||||
|
|
||||||
pub use middle::trans::context::CrateContext;
|
pub use trans::context::CrateContext;
|
||||||
|
|
||||||
fn type_is_newtype_immediate(ccx: &CrateContext, ty: ty::t) -> bool {
|
fn type_is_newtype_immediate(ccx: &CrateContext, ty: ty::t) -> bool {
|
||||||
match ty::get(ty).sty {
|
match ty::get(ty).sty {
|
||||||
@ -69,8 +69,8 @@ fn type_is_newtype_immediate(ccx: &CrateContext, ty: ty::t) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn type_is_immediate(ccx: &CrateContext, ty: ty::t) -> bool {
|
pub fn type_is_immediate(ccx: &CrateContext, ty: ty::t) -> bool {
|
||||||
use middle::trans::machine::llsize_of_alloc;
|
use trans::machine::llsize_of_alloc;
|
||||||
use middle::trans::type_of::sizing_type_of;
|
use trans::type_of::sizing_type_of;
|
||||||
|
|
||||||
let tcx = ccx.tcx();
|
let tcx = ccx.tcx();
|
||||||
let simple = ty::type_is_scalar(ty) ||
|
let simple = ty::type_is_scalar(ty) ||
|
||||||
@ -98,8 +98,8 @@ pub fn type_is_zero_size(ccx: &CrateContext, ty: ty::t) -> bool {
|
|||||||
* Identify types which have size zero at runtime.
|
* Identify types which have size zero at runtime.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use middle::trans::machine::llsize_of_alloc;
|
use trans::machine::llsize_of_alloc;
|
||||||
use middle::trans::type_of::sizing_type_of;
|
use trans::type_of::sizing_type_of;
|
||||||
let llty = sizing_type_of(ccx, ty);
|
let llty = sizing_type_of(ccx, ty);
|
||||||
llsize_of_alloc(ccx, llty) == 0
|
llsize_of_alloc(ccx, llty) == 0
|
||||||
}
|
}
|
@ -17,18 +17,18 @@ use llvm::{IntEQ, IntNE, IntUGT, IntUGE, IntULT, IntULE, IntSGT, IntSGE, IntSLT,
|
|||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::const_eval;
|
use middle::const_eval;
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::base::push_ctxt;
|
use trans::base::push_ctxt;
|
||||||
use middle::trans::closure;
|
use trans::closure;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::consts;
|
use trans::consts;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::inline;
|
use trans::inline;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::ppaux::{Repr, ty_to_string};
|
use util::ppaux::{Repr, ty_to_string};
|
||||||
|
|
@ -8,8 +8,6 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use driver::config::NoDebugInfo;
|
|
||||||
use driver::session::Session;
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{ContextRef, ModuleRef, ValueRef, BuilderRef};
|
use llvm::{ContextRef, ModuleRef, ValueRef, BuilderRef};
|
||||||
use llvm::{TargetData};
|
use llvm::{TargetData};
|
||||||
@ -17,14 +15,16 @@ use llvm::mk_target_data;
|
|||||||
use metadata::common::LinkMeta;
|
use metadata::common::LinkMeta;
|
||||||
use middle::resolve;
|
use middle::resolve;
|
||||||
use middle::traits;
|
use middle::traits;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::builder::Builder;
|
use trans::builder::Builder;
|
||||||
use middle::trans::common::{ExternMap,tydesc_info,BuilderRef_res};
|
use trans::common::{ExternMap,tydesc_info,BuilderRef_res};
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::monomorphize::MonoId;
|
use trans::monomorphize::MonoId;
|
||||||
use middle::trans::type_::{Type, TypeNames};
|
use trans::type_::{Type, TypeNames};
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
use session::config::NoDebugInfo;
|
||||||
|
use session::Session;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
use util::sha2::Sha256;
|
use util::sha2::Sha256;
|
||||||
use util::nodemap::{NodeMap, NodeSet, DefIdMap, FnvHashMap, FnvHashSet};
|
use util::nodemap::{NodeMap, NodeSet, DefIdMap, FnvHashMap, FnvHashSet};
|
@ -9,26 +9,26 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use llvm::*;
|
use llvm::*;
|
||||||
use driver::config::FullDebugInfo;
|
|
||||||
use middle::def;
|
use middle::def;
|
||||||
use middle::lang_items::{PanicFnLangItem, PanicBoundsCheckFnLangItem};
|
use middle::lang_items::{PanicFnLangItem, PanicBoundsCheckFnLangItem};
|
||||||
use middle::trans::_match;
|
use trans::_match;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::consts;
|
use trans::consts;
|
||||||
use middle::trans::datum;
|
use trans::datum;
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::meth;
|
use trans::meth;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans;
|
use trans;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::typeck::MethodCall;
|
use middle::typeck::MethodCall;
|
||||||
|
use session::config::FullDebugInfo;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
use util::ppaux;
|
use util::ppaux;
|
||||||
|
|
@ -17,14 +17,14 @@ pub use self::Expr::*;
|
|||||||
pub use self::RvalueMode::*;
|
pub use self::RvalueMode::*;
|
||||||
|
|
||||||
use llvm::ValueRef;
|
use llvm::ValueRef;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::Load;
|
use trans::build::Load;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::tvec;
|
use trans::tvec;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::ppaux::{ty_to_string};
|
use util::ppaux::{ty_to_string};
|
||||||
|
|
@ -192,22 +192,21 @@ use self::RecursiveTypeDescription::*;
|
|||||||
use self::EnumDiscriminantInfo::*;
|
use self::EnumDiscriminantInfo::*;
|
||||||
use self::DebugLocation::*;
|
use self::DebugLocation::*;
|
||||||
|
|
||||||
use driver::config;
|
|
||||||
use driver::config::{FullDebugInfo, LimitedDebugInfo, NoDebugInfo};
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{ModuleRef, ContextRef, ValueRef};
|
use llvm::{ModuleRef, ContextRef, ValueRef};
|
||||||
use llvm::debuginfo::*;
|
use llvm::debuginfo::*;
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::subst::{mod, Subst};
|
use middle::subst::{mod, Subst};
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::_match::{BindingInfo, TrByCopy, TrByMove, TrByRef};
|
use trans::_match::{BindingInfo, TrByCopy, TrByMove, TrByRef};
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans;
|
use trans;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::pat_util;
|
use middle::pat_util;
|
||||||
|
use session::config::{mod, FullDebugInfo, LimitedDebugInfo, NoDebugInfo};
|
||||||
use util::nodemap::{DefIdMap, NodeMap, FnvHashMap, FnvHashSet};
|
use util::nodemap::{DefIdMap, NodeMap, FnvHashMap, FnvHashSet};
|
||||||
use util::ppaux;
|
use util::ppaux;
|
||||||
|
|
@ -44,27 +44,27 @@ use middle::def;
|
|||||||
use middle::mem_categorization::Typer;
|
use middle::mem_categorization::Typer;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
||||||
use middle::trans::_match;
|
use trans::_match;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::asm;
|
use trans::asm;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::closure;
|
use trans::closure;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::consts;
|
use trans::consts;
|
||||||
use middle::trans::controlflow;
|
use trans::controlflow;
|
||||||
use middle::trans::datum::*;
|
use trans::datum::*;
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::glue;
|
use trans::glue;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::meth;
|
use trans::meth;
|
||||||
use middle::trans::inline;
|
use trans::inline;
|
||||||
use middle::trans::tvec;
|
use trans::tvec;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::ty::{struct_fields, tup_fields};
|
use middle::ty::{struct_fields, tup_fields};
|
||||||
use middle::ty::{AdjustDerefRef, AdjustAddEnv, AutoUnsafe};
|
use middle::ty::{AdjustDerefRef, AdjustAddEnv, AutoUnsafe};
|
||||||
use middle::ty::{AutoPtr};
|
use middle::ty::{AutoPtr};
|
||||||
@ -73,8 +73,8 @@ use middle::typeck;
|
|||||||
use middle::typeck::MethodCall;
|
use middle::typeck::MethodCall;
|
||||||
use util::common::indenter;
|
use util::common::indenter;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
use middle::trans::machine::{llsize_of, llsize_of_alloc};
|
use trans::machine::{llsize_of, llsize_of_alloc};
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::codemap;
|
use syntax::codemap;
|
@ -13,15 +13,15 @@ use back::{link};
|
|||||||
use llvm::{ValueRef, CallConv, get_param};
|
use llvm::{ValueRef, CallConv, get_param};
|
||||||
use llvm;
|
use llvm;
|
||||||
use middle::weak_lang_items;
|
use middle::weak_lang_items;
|
||||||
use middle::trans::base::{llvm_linkage_by_name, push_ctxt};
|
use trans::base::{llvm_linkage_by_name, push_ctxt};
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::cabi;
|
use trans::cabi;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of::*;
|
use trans::type_of::*;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::ty::FnSig;
|
use middle::ty::FnSig;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
@ -20,20 +20,20 @@ use llvm;
|
|||||||
use middle::lang_items::ExchangeFreeFnLangItem;
|
use middle::lang_items::ExchangeFreeFnLangItem;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum;
|
use trans::datum;
|
||||||
use middle::trans::debuginfo;
|
use trans::debuginfo;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::machine::*;
|
use trans::machine::*;
|
||||||
use middle::trans::tvec;
|
use trans::tvec;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of::{type_of, sizing_type_of, align_of};
|
use trans::type_of::{type_of, sizing_type_of, align_of};
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::ppaux::{ty_to_short_str, Repr};
|
use util::ppaux::{ty_to_short_str, Repr};
|
||||||
use util::ppaux;
|
use util::ppaux;
|
@ -11,8 +11,8 @@
|
|||||||
use llvm::{AvailableExternallyLinkage, InternalLinkage, SetLinkage};
|
use llvm::{AvailableExternallyLinkage, InternalLinkage, SetLinkage};
|
||||||
use metadata::csearch;
|
use metadata::csearch;
|
||||||
use middle::astencode;
|
use middle::astencode;
|
||||||
use middle::trans::base::{push_ctxt, trans_item, get_item_val, trans_fn};
|
use trans::base::{push_ctxt, trans_item, get_item_val, trans_fn};
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
@ -14,20 +14,20 @@ use llvm;
|
|||||||
use llvm::{SequentiallyConsistent, Acquire, Release, AtomicXchg, ValueRef};
|
use llvm::{SequentiallyConsistent, Acquire, Release, AtomicXchg, ValueRef};
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::FnSpace;
|
use middle::subst::FnSpace;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum::*;
|
use trans::datum::*;
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::glue;
|
use trans::glue;
|
||||||
use middle::trans::type_of::*;
|
use trans::type_of::*;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::machine::llsize_of;
|
use trans::machine::llsize_of;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use syntax::abi::RustIntrinsic;
|
use syntax::abi::RustIntrinsic;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
@ -8,8 +8,8 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use llvm::ValueRef;
|
use llvm::ValueRef;
|
||||||
|
|
||||||
pub trait LlvmRepr for Sized? {
|
pub trait LlvmRepr for Sized? {
|
@ -15,9 +15,9 @@
|
|||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{ValueRef};
|
use llvm::{ValueRef};
|
||||||
use llvm::False;
|
use llvm::False;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
|
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
pub type llbits = u64;
|
pub type llbits = u64;
|
||||||
pub type llsize = u64;
|
pub type llsize = u64;
|
@ -17,19 +17,19 @@ use middle::subst::{Subst,Substs};
|
|||||||
use middle::subst::VecPerParamSpace;
|
use middle::subst::VecPerParamSpace;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::traits;
|
use middle::traits;
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::callee::*;
|
use trans::callee::*;
|
||||||
use middle::trans::callee;
|
use trans::callee;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum::*;
|
use trans::datum::*;
|
||||||
use middle::trans::expr::{SaveIn, Ignore};
|
use trans::expr::{SaveIn, Ignore};
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::glue;
|
use trans::glue;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of::*;
|
use trans::type_of::*;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::typeck;
|
use middle::typeck;
|
||||||
use middle::typeck::MethodCall;
|
use middle::typeck::MethodCall;
|
@ -9,17 +9,17 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use back::link::exported_name;
|
use back::link::exported_name;
|
||||||
use driver::session;
|
use session;
|
||||||
use llvm::ValueRef;
|
use llvm::ValueRef;
|
||||||
use llvm;
|
use llvm;
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::subst::Subst;
|
use middle::subst::Subst;
|
||||||
use middle::trans::base::{set_llvm_fn_attrs, set_inline_hint};
|
use trans::base::{set_llvm_fn_attrs, set_inline_hint};
|
||||||
use middle::trans::base::{trans_enum_variant, push_ctxt, get_item_val};
|
use trans::base::{trans_enum_variant, push_ctxt, get_item_val};
|
||||||
use middle::trans::base::{trans_fn, decl_internal_rust_fn};
|
use trans::base::{trans_fn, decl_internal_rust_fn};
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::foreign;
|
use trans::foreign;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
|
|
@ -13,20 +13,20 @@
|
|||||||
use back::abi;
|
use back::abi;
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{ValueRef};
|
use llvm::{ValueRef};
|
||||||
use middle::trans::base::*;
|
use trans::base::*;
|
||||||
use middle::trans::base;
|
use trans::base;
|
||||||
use middle::trans::build::*;
|
use trans::build::*;
|
||||||
use middle::trans::cleanup;
|
use trans::cleanup;
|
||||||
use middle::trans::cleanup::CleanupMethods;
|
use trans::cleanup::CleanupMethods;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::datum::*;
|
use trans::datum::*;
|
||||||
use middle::trans::expr::{Dest, Ignore, SaveIn};
|
use trans::expr::{Dest, Ignore, SaveIn};
|
||||||
use middle::trans::expr;
|
use trans::expr;
|
||||||
use middle::trans::glue;
|
use trans::glue;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::trans::machine::{nonzero_llsize_of, llsize_of_alloc};
|
use trans::machine::{nonzero_llsize_of, llsize_of_alloc};
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
use middle::trans::type_of;
|
use trans::type_of;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::ppaux::ty_to_string;
|
use util::ppaux::ty_to_string;
|
||||||
|
|
@ -14,7 +14,7 @@ use llvm;
|
|||||||
use llvm::{TypeRef, Bool, False, True, TypeKind, ValueRef};
|
use llvm::{TypeRef, Bool, False, True, TypeKind, ValueRef};
|
||||||
use llvm::{Float, Double, X86_FP80, PPC_FP128, FP128};
|
use llvm::{Float, Double, X86_FP80, PPC_FP128, FP128};
|
||||||
|
|
||||||
use middle::trans::context::CrateContext;
|
use trans::context::CrateContext;
|
||||||
use util::nodemap::FnvHashMap;
|
use util::nodemap::FnvHashMap;
|
||||||
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
@ -13,15 +13,15 @@
|
|||||||
pub use self::named_ty::*;
|
pub use self::named_ty::*;
|
||||||
|
|
||||||
use middle::subst;
|
use middle::subst;
|
||||||
use middle::trans::adt;
|
use trans::adt;
|
||||||
use middle::trans::common::*;
|
use trans::common::*;
|
||||||
use middle::trans::foreign;
|
use trans::foreign;
|
||||||
use middle::trans::machine;
|
use trans::machine;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use util::ppaux;
|
use util::ppaux;
|
||||||
use util::ppaux::Repr;
|
use util::ppaux::Repr;
|
||||||
|
|
||||||
use middle::trans::type_::Type;
|
use trans::type_::Type;
|
||||||
|
|
||||||
use std::num::Int;
|
use std::num::Int;
|
||||||
use syntax::abi;
|
use syntax::abi;
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
use llvm;
|
use llvm;
|
||||||
use llvm::{UseRef, ValueRef};
|
use llvm::{UseRef, ValueRef};
|
||||||
use middle::trans::basic_block::BasicBlock;
|
use trans::basic_block::BasicBlock;
|
||||||
use middle::trans::common::Block;
|
use trans::common::Block;
|
||||||
use libc::c_uint;
|
use libc::c_uint;
|
||||||
|
|
||||||
pub struct Value(pub ValueRef);
|
pub struct Value(pub ValueRef);
|
@ -38,8 +38,8 @@ use syntax::parse::token::InternedString;
|
|||||||
use syntax::parse::token;
|
use syntax::parse::token;
|
||||||
use syntax::ptr::P;
|
use syntax::ptr::P;
|
||||||
|
|
||||||
use rustc::back::link;
|
use rustc_trans::back::link;
|
||||||
use rustc::driver::driver;
|
use rustc_trans::driver::driver;
|
||||||
use rustc::metadata::cstore;
|
use rustc::metadata::cstore;
|
||||||
use rustc::metadata::csearch;
|
use rustc::metadata::csearch;
|
||||||
use rustc::metadata::decoder;
|
use rustc::metadata::decoder;
|
||||||
|
@ -9,10 +9,11 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
pub use self::MaybeTyped::*;
|
pub use self::MaybeTyped::*;
|
||||||
|
|
||||||
use rustc::driver::{config, driver, session};
|
use rustc_trans::driver::driver;
|
||||||
|
use rustc::session::{mod, config};
|
||||||
use rustc::middle::{privacy, ty};
|
use rustc::middle::{privacy, ty};
|
||||||
use rustc::lint;
|
use rustc::lint;
|
||||||
use rustc::back::link;
|
use rustc_trans::back::link;
|
||||||
|
|
||||||
use syntax::{ast, ast_map, codemap, diagnostic};
|
use syntax::{ast, ast_map, codemap, diagnostic};
|
||||||
|
|
||||||
@ -93,7 +94,7 @@ pub fn run_core(libs: Vec<Path>, cfgs: Vec<String>, externs: Externs,
|
|||||||
crate_types: vec!(config::CrateTypeRlib),
|
crate_types: vec!(config::CrateTypeRlib),
|
||||||
lint_opts: vec!((warning_lint, lint::Allow)),
|
lint_opts: vec!((warning_lint, lint::Allow)),
|
||||||
externs: externs,
|
externs: externs,
|
||||||
target_triple: triple.unwrap_or(driver::host_triple().to_string()),
|
target_triple: triple.unwrap_or(config::host_triple().to_string()),
|
||||||
cfg: config::parse_cfgspecs(cfgs),
|
cfg: config::parse_cfgspecs(cfgs),
|
||||||
..config::basic_options().clone()
|
..config::basic_options().clone()
|
||||||
};
|
};
|
||||||
|
@ -22,6 +22,7 @@ extern crate arena;
|
|||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
extern crate rustc;
|
extern crate rustc;
|
||||||
|
extern crate rustc_trans;
|
||||||
extern crate serialize;
|
extern crate serialize;
|
||||||
extern crate syntax;
|
extern crate syntax;
|
||||||
extern crate "test" as testing;
|
extern crate "test" as testing;
|
||||||
@ -155,7 +156,7 @@ pub fn main_args(args: &[String]) -> int {
|
|||||||
usage(args[0].as_slice());
|
usage(args[0].as_slice());
|
||||||
return 0;
|
return 0;
|
||||||
} else if matches.opt_present("version") {
|
} else if matches.opt_present("version") {
|
||||||
match rustc::driver::version("rustdoc", &matches) {
|
match rustc_trans::driver::version("rustdoc", &matches) {
|
||||||
Some(err) => {
|
Some(err) => {
|
||||||
println!("{}", err);
|
println!("{}", err);
|
||||||
return 1
|
return 1
|
||||||
|
@ -19,10 +19,8 @@ use std::string::String;
|
|||||||
|
|
||||||
use std::collections::{HashSet, HashMap};
|
use std::collections::{HashSet, HashMap};
|
||||||
use testing;
|
use testing;
|
||||||
use rustc::back::write;
|
use rustc::session::{mod, config};
|
||||||
use rustc::driver::config;
|
use rustc_trans::driver::driver;
|
||||||
use rustc::driver::driver;
|
|
||||||
use rustc::driver::session;
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::codemap::{CodeMap, dummy_spanned};
|
use syntax::codemap::{CodeMap, dummy_spanned};
|
||||||
use syntax::diagnostic;
|
use syntax::diagnostic;
|
||||||
@ -119,7 +117,7 @@ fn runtest(test: &str, cratename: &str, libs: Vec<Path>, externs: core::Externs,
|
|||||||
maybe_sysroot: Some(os::self_exe_path().unwrap().dir_path()),
|
maybe_sysroot: Some(os::self_exe_path().unwrap().dir_path()),
|
||||||
addl_lib_search_paths: RefCell::new(libs),
|
addl_lib_search_paths: RefCell::new(libs),
|
||||||
crate_types: vec!(config::CrateTypeExecutable),
|
crate_types: vec!(config::CrateTypeExecutable),
|
||||||
output_types: vec!(write::OutputTypeExe),
|
output_types: vec!(config::OutputTypeExe),
|
||||||
no_trans: no_run,
|
no_trans: no_run,
|
||||||
externs: externs,
|
externs: externs,
|
||||||
cg: config::CodegenOptions {
|
cg: config::CodegenOptions {
|
||||||
|
Loading…
Reference in New Issue
Block a user