]> git.proxmox.com Git - rustc.git/blobdiff - src/librustc_trans/lib.rs
New upstream version 1.16.0+dfsg1
[rustc.git] / src / librustc_trans / lib.rs
index af894b218eff8e87e76c7103da155d91e5a9df27..659dbb441ee35000095a2bd69d8290b081d038bf 100644 (file)
 //!
 //! This API is completely unstable and subject to change.
 
-// Do not remove on snapshot creation. Needed for bootstrap. (Issue #22364)
-#![cfg_attr(stage0, feature(custom_attribute))]
 #![crate_name = "rustc_trans"]
-#![unstable(feature = "rustc_private")]
-#![staged_api]
+#![unstable(feature = "rustc_private", issue = "27812")]
 #![crate_type = "dylib"]
 #![crate_type = "rlib"]
-#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
+#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
       html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
-      html_root_url = "http://doc.rust-lang.org/nightly/")]
+      html_root_url = "https://doc.rust-lang.org/nightly/")]
+#![deny(warnings)]
 
+#![feature(associated_consts)]
 #![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(const_fn)]
-#![feature(iter_cmp)]
-#![feature(iter_arith)]
+#![feature(custom_attribute)]
+#![allow(unused_attributes)]
 #![feature(libc)]
-#![feature(path_ext)]
-#![feature(path_ext)]
-#![feature(path_relative_from)]
-#![feature(path_relative_from)]
 #![feature(quote)]
-#![feature(rc_weak)]
 #![feature(rustc_diagnostic_macros)]
 #![feature(rustc_private)]
+#![feature(slice_patterns)]
 #![feature(staged_api)]
 #![feature(unicode)]
-#![feature(unicode)]
-#![feature(vec_push_all)]
+#![feature(conservative_impl_trait)]
 
-#![allow(trivial_casts)]
+use rustc::dep_graph::WorkProduct;
 
-extern crate arena;
 extern crate flate;
-extern crate getopts;
-extern crate graphviz;
 extern crate libc;
-extern crate rustc;
+#[macro_use] extern crate rustc;
 extern crate rustc_back;
-extern crate rustc_llvm as llvm;
-extern crate serialize;
+extern crate rustc_data_structures;
+extern crate rustc_incremental;
+pub extern crate rustc_llvm as llvm;
+extern crate rustc_platform_intrinsics as intrinsics;
+extern crate rustc_const_math;
+extern crate rustc_const_eval;
+#[macro_use]
+#[no_link]
+extern crate rustc_bitflags;
+extern crate rustc_i128;
 
 #[macro_use] extern crate log;
 #[macro_use] extern crate syntax;
+extern crate syntax_pos;
+extern crate rustc_errors as errors;
 
 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 use base::trans_crate;
+pub use disr::Disr;
+
 pub mod back {
-    pub use rustc_back::abi;
-    pub use rustc_back::rpath;
-    pub use rustc_back::svh;
+    pub use rustc::hir::svh;
 
     pub mod archive;
     pub mod linker;
     pub mod link;
     pub mod lto;
+    pub mod symbol_export;
+    pub mod symbol_names;
     pub mod write;
     pub mod msvc;
+    pub mod rpath;
+}
+
+pub mod diagnostics;
+
+#[macro_use]
+mod macros;
+
+mod abi;
+mod adt;
+mod asm;
+mod assert_module_sources;
+mod attributes;
+mod base;
+mod builder;
+mod cabi_aarch64;
+mod cabi_arm;
+mod cabi_asmjs;
+mod cabi_mips;
+mod cabi_mips64;
+mod cabi_msp430;
+mod cabi_nvptx;
+mod cabi_nvptx64;
+mod cabi_powerpc;
+mod cabi_powerpc64;
+mod cabi_s390x;
+mod cabi_sparc;
+mod cabi_sparc64;
+mod cabi_x86;
+mod cabi_x86_64;
+mod cabi_x86_win64;
+mod callee;
+mod cleanup;
+mod collector;
+mod common;
+mod consts;
+mod context;
+mod debuginfo;
+mod declare;
+mod disr;
+mod glue;
+mod intrinsic;
+mod machine;
+mod meth;
+mod mir;
+mod monomorphize;
+mod partitioning;
+mod symbol_map;
+mod symbol_names_test;
+mod trans_item;
+mod tvec;
+mod type_;
+mod type_of;
+mod value;
+
+#[derive(Clone)]
+pub struct ModuleTranslation {
+    /// The name of the module. When the crate may be saved between
+    /// compilations, incremental compilation requires that name be
+    /// unique amongst **all** crates.  Therefore, it should contain
+    /// something unique to this crate (e.g., a module path) as well
+    /// as the crate name and disambiguator.
+    pub name: String,
+    pub symbol_name_hash: u64,
+    pub source: ModuleSource,
 }
 
-pub mod trans;
-pub mod save;
+#[derive(Clone)]
+pub enum ModuleSource {
+    /// Copy the `.o` files or whatever from the incr. comp. directory.
+    Preexisting(WorkProduct),
 
-pub mod lib {
-    pub use llvm;
+    /// Rebuild from this LLVM module.
+    Translated(ModuleLlvm),
 }
+
+#[derive(Copy, Clone)]
+pub struct ModuleLlvm {
+    pub llcx: llvm::ContextRef,
+    pub llmod: llvm::ModuleRef,
+}
+
+unsafe impl Send for ModuleTranslation { }
+unsafe impl Sync for ModuleTranslation { }
+
+pub struct CrateTranslation {
+    pub modules: Vec<ModuleTranslation>,
+    pub metadata_module: ModuleTranslation,
+    pub link: middle::cstore::LinkMeta,
+    pub metadata: Vec<u8>,
+    pub exported_symbols: back::symbol_export::ExportedSymbols,
+    pub no_builtins: bool,
+    pub windows_subsystem: Option<String>,
+    pub linker_info: back::linker::LinkerInfo
+}
+
+__build_diagnostic_array! { librustc_trans, DIAGNOSTICS }