-
Notifications
You must be signed in to change notification settings - Fork 12.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
auto merge of #19362 : nikomatsakis/rust/crateification, r=nikomatsakis
This has the goal of further reducing peak memory usage and enabling more parallelism. This patch should allow trans/typeck to build in parallel. The plan is to proceed by moving as many additional passes as possible into distinct crates that lay alongside typeck/trans. Basically, the idea is that there is the `rustc` crate which defines the common data structures shared between passes. Individual passes then go into their own crates. Finally, the `rustc_driver` crate knits it all together. cc @jakub-: One wrinkle is the diagnostics plugin. Currently, it assumes all diagnostics are defined and used within one crate in order to track what is used and what is duplicated. I had to disable this. We'll have to find an alternate strategy, but I wasn't sure what was best so decided to just disable the duplicate checking for now.
- Loading branch information
Showing
97 changed files
with
1,160 additions
and
1,101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// Copyright 2012-2014 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. | ||
|
||
/*! | ||
* This module contains a simple utility routine | ||
* used by both `typeck` and `const_eval`. | ||
* Almost certainly this could (and should) be refactored out of existence. | ||
*/ | ||
|
||
use middle::def; | ||
use middle::ty::{mod, Ty}; | ||
use syntax::ast; | ||
use util::ppaux::Repr; | ||
|
||
pub const NO_REGIONS: uint = 1; | ||
pub const NO_TPS: uint = 2; | ||
|
||
pub fn check_path_args(tcx: &ty::ctxt, | ||
path: &ast::Path, | ||
flags: uint) { | ||
if (flags & NO_TPS) != 0u { | ||
if path.segments.iter().any(|s| s.parameters.has_types()) { | ||
span_err!(tcx.sess, path.span, E0109, | ||
"type parameters are not allowed on this type"); | ||
} | ||
} | ||
|
||
if (flags & NO_REGIONS) != 0u { | ||
if path.segments.iter().any(|s| s.parameters.has_lifetimes()) { | ||
span_err!(tcx.sess, path.span, E0110, | ||
"region parameters are not allowed on this type"); | ||
} | ||
} | ||
} | ||
|
||
pub fn ast_ty_to_prim_ty<'tcx>(tcx: &ty::ctxt<'tcx>, ast_ty: &ast::Ty) | ||
-> Option<Ty<'tcx>> { | ||
match ast_ty.node { | ||
ast::TyPath(ref path, id) => { | ||
let a_def = match tcx.def_map.borrow().get(&id) { | ||
None => { | ||
tcx.sess.span_bug(ast_ty.span, | ||
format!("unbound path {}", | ||
path.repr(tcx)).as_slice()) | ||
} | ||
Some(&d) => d | ||
}; | ||
match a_def { | ||
def::DefPrimTy(nty) => { | ||
match nty { | ||
ast::TyBool => { | ||
check_path_args(tcx, path, NO_TPS | NO_REGIONS); | ||
Some(ty::mk_bool()) | ||
} | ||
ast::TyChar => { | ||
check_path_args(tcx, path, NO_TPS | NO_REGIONS); | ||
Some(ty::mk_char()) | ||
} | ||
ast::TyInt(it) => { | ||
check_path_args(tcx, path, NO_TPS | NO_REGIONS); | ||
Some(ty::mk_mach_int(it)) | ||
} | ||
ast::TyUint(uit) => { | ||
check_path_args(tcx, path, NO_TPS | NO_REGIONS); | ||
Some(ty::mk_mach_uint(uit)) | ||
} | ||
ast::TyFloat(ft) => { | ||
check_path_args(tcx, path, NO_TPS | NO_REGIONS); | ||
Some(ty::mk_mach_float(ft)) | ||
} | ||
ast::TyStr => { | ||
Some(ty::mk_str(tcx)) | ||
} | ||
} | ||
} | ||
_ => None | ||
} | ||
} | ||
_ => None | ||
} | ||
} | ||
|
Oops, something went wrong.