Skip to content

Commit 64b27e9

Browse files
committed
rollup merge of rust-lang#17259 : eddyb/def-no-gc
2 parents 0e5cb75 + 74b8868 commit 64b27e9

28 files changed

+374
-668
lines changed

src/librustc/driver/driver.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use lint;
1717
use llvm::{ContextRef, ModuleRef};
1818
use metadata::common::LinkMeta;
1919
use metadata::creader;
20-
use middle::{trans, freevars, stability, kind, ty, typeck, reachable};
20+
use middle::{trans, stability, kind, ty, typeck, reachable};
2121
use middle::dependency_format;
2222
use middle;
2323
use plugin::load::Plugins;
@@ -378,11 +378,13 @@ pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
378378
middle::lang_items::collect_language_items(krate, &sess));
379379

380380
let middle::resolve::CrateMap {
381-
def_map: def_map,
382-
exp_map2: exp_map2,
383-
trait_map: trait_map,
384-
external_exports: external_exports,
385-
last_private_map: last_private_map
381+
def_map,
382+
freevars,
383+
capture_mode_map,
384+
exp_map2,
385+
trait_map,
386+
external_exports,
387+
last_private_map
386388
} =
387389
time(time_passes, "resolution", (), |_|
388390
middle::resolve::resolve_crate(&sess, &lang_items, krate));
@@ -401,10 +403,6 @@ pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
401403
plugin::build::find_plugin_registrar(
402404
sess.diagnostic(), krate)));
403405

404-
let (freevars, capture_modes) =
405-
time(time_passes, "freevar finding", (), |_|
406-
freevars::annotate_freevars(&def_map, krate));
407-
408406
let region_map = time(time_passes, "region resolution", (), |_|
409407
middle::region::resolve_crate(&sess, krate));
410408

@@ -423,7 +421,7 @@ pub fn phase_3_run_analysis_passes<'tcx>(sess: Session,
423421
named_region_map,
424422
ast_map,
425423
freevars,
426-
capture_modes,
424+
capture_mode_map,
427425
region_map,
428426
lang_items,
429427
stability_index);

src/librustc/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ This API is completely unstable and subject to change.
2929
html_root_url = "http://doc.rust-lang.org/master/")]
3030

3131
#![allow(deprecated)]
32-
#![feature(macro_rules, globs, struct_variant, managed_boxes, quote)]
32+
#![feature(macro_rules, globs, struct_variant, quote)]
3333
#![feature(default_type_params, phase, unsafe_destructor)]
3434

3535
#![allow(unknown_features)] // NOTE: Remove after next snapshot
@@ -93,7 +93,6 @@ pub mod middle {
9393
pub mod effect;
9494
pub mod entry;
9595
pub mod expr_use_visitor;
96-
pub mod freevars;
9796
pub mod graph;
9897
pub mod intrinsicck;
9998
pub mod kind;

src/librustc/lint/builtin.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -954,8 +954,7 @@ impl LintPass for NonSnakeCase {
954954
match &p.node {
955955
&ast::PatIdent(_, ref path1, _) => {
956956
match cx.tcx.def_map.borrow().find(&p.id) {
957-
Some(&def::DefLocal(_, _)) | Some(&def::DefBinding(_, _)) |
958-
Some(&def::DefArg(_, _)) => {
957+
Some(&def::DefLocal(_)) => {
959958
self.check_snake_case(cx, "variable", path1.node, p.span);
960959
}
961960
_ => {}

src/librustc/middle/astencode.rs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@ use driver::session::Session;
1818
use metadata::decoder;
1919
use middle::def;
2020
use metadata::encoder as e;
21-
use middle::freevars::{CaptureMode, freevar_entry};
22-
use middle::freevars;
2321
use middle::region;
2422
use metadata::tydecode;
2523
use metadata::tydecode::{DefIdSource, NominalType, TypeWithId, TypeParameter};
2624
use metadata::tydecode::{RegionParameter};
2725
use metadata::tyencode;
26+
use middle::mem_categorization::Typer;
2827
use middle::subst;
2928
use middle::subst::VecPerParamSpace;
3029
use middle::typeck::{MethodCall, MethodCallee, MethodOrigin};
@@ -42,7 +41,6 @@ use syntax;
4241
use libc;
4342
use std::io::Seek;
4443
use std::mem;
45-
use std::gc::GC;
4644
use std::rc::Rc;
4745

4846
use rbml::io::SeekableMemWriter;
@@ -462,8 +460,7 @@ impl tr for def::Def {
462460
def::DefMod(did) => { def::DefMod(did.tr(dcx)) }
463461
def::DefForeignMod(did) => { def::DefForeignMod(did.tr(dcx)) }
464462
def::DefStatic(did, m) => { def::DefStatic(did.tr(dcx), m) }
465-
def::DefArg(nid, b) => { def::DefArg(dcx.tr_id(nid), b) }
466-
def::DefLocal(nid, b) => { def::DefLocal(dcx.tr_id(nid), b) }
463+
def::DefLocal(nid) => { def::DefLocal(dcx.tr_id(nid)) }
467464
def::DefVariant(e_did, v_did, is_s) => {
468465
def::DefVariant(e_did.tr(dcx), v_did.tr(dcx), is_s)
469466
},
@@ -472,11 +469,9 @@ impl tr for def::Def {
472469
def::DefAssociatedTy(did) => def::DefAssociatedTy(did.tr(dcx)),
473470
def::DefPrimTy(p) => def::DefPrimTy(p),
474471
def::DefTyParam(s, did, v) => def::DefTyParam(s, did.tr(dcx), v),
475-
def::DefBinding(nid, bm) => def::DefBinding(dcx.tr_id(nid), bm),
476472
def::DefUse(did) => def::DefUse(did.tr(dcx)),
477-
def::DefUpvar(nid1, def, nid2, nid3) => {
473+
def::DefUpvar(nid1, nid2, nid3) => {
478474
def::DefUpvar(dcx.tr_id(nid1),
479-
box(GC) (*def).tr(dcx),
480475
dcx.tr_id(nid2),
481476
dcx.tr_id(nid3))
482477
}
@@ -541,36 +536,36 @@ impl tr for ty::TraitStore {
541536
// ______________________________________________________________________
542537
// Encoding and decoding of freevar information
543538

544-
fn encode_freevar_entry(rbml_w: &mut Encoder, fv: &freevar_entry) {
539+
fn encode_freevar_entry(rbml_w: &mut Encoder, fv: &ty::Freevar) {
545540
(*fv).encode(rbml_w).unwrap();
546541
}
547542

548-
fn encode_capture_mode(rbml_w: &mut Encoder, cm: CaptureMode) {
543+
fn encode_capture_mode(rbml_w: &mut Encoder, cm: ast::CaptureClause) {
549544
cm.encode(rbml_w).unwrap();
550545
}
551546

552547
trait rbml_decoder_helper {
553548
fn read_freevar_entry(&mut self, dcx: &DecodeContext)
554-
-> freevar_entry;
555-
fn read_capture_mode(&mut self) -> CaptureMode;
549+
-> ty::Freevar;
550+
fn read_capture_mode(&mut self) -> ast::CaptureClause;
556551
}
557552

558553
impl<'a> rbml_decoder_helper for reader::Decoder<'a> {
559554
fn read_freevar_entry(&mut self, dcx: &DecodeContext)
560-
-> freevar_entry {
561-
let fv: freevar_entry = Decodable::decode(self).unwrap();
555+
-> ty::Freevar {
556+
let fv: ty::Freevar = Decodable::decode(self).unwrap();
562557
fv.tr(dcx)
563558
}
564559

565-
fn read_capture_mode(&mut self) -> CaptureMode {
566-
let cm: CaptureMode = Decodable::decode(self).unwrap();
560+
fn read_capture_mode(&mut self) -> ast::CaptureClause {
561+
let cm: ast::CaptureClause = Decodable::decode(self).unwrap();
567562
cm
568563
}
569564
}
570565

571-
impl tr for freevar_entry {
572-
fn tr(&self, dcx: &DecodeContext) -> freevar_entry {
573-
freevar_entry {
566+
impl tr for ty::Freevar {
567+
fn tr(&self, dcx: &DecodeContext) -> ty::Freevar {
568+
ty::Freevar {
574569
def: self.def.tr(dcx),
575570
span: self.span.tr(dcx),
576571
}
@@ -1292,8 +1287,8 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
12921287
});
12931288

12941289
for freevar in fv.iter() {
1295-
match freevars::get_capture_mode(tcx, id) {
1296-
freevars::CaptureByRef => {
1290+
match tcx.capture_mode(id) {
1291+
ast::CaptureByRef => {
12971292
rbml_w.tag(c::tag_table_upvar_borrow_map, |rbml_w| {
12981293
rbml_w.id(id);
12991294
rbml_w.tag(c::tag_table_val, |rbml_w| {

src/librustc/middle/borrowck/check_loans.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,9 +514,9 @@ impl<'a, 'tcx> CheckLoanCtxt<'a, 'tcx> {
514514
true
515515
}
516516

517-
pub fn is_local_variable_or_arg(&self, cmt: mc::cmt) -> bool {
517+
fn is_local_variable_or_arg(&self, cmt: mc::cmt) -> bool {
518518
match cmt.cat {
519-
mc::cat_local(_) | mc::cat_arg(_) => true,
519+
mc::cat_local(_) => true,
520520
_ => false
521521
}
522522
}
@@ -775,7 +775,7 @@ impl<'a, 'tcx> CheckLoanCtxt<'a, 'tcx> {
775775
debug!("mark_variable_as_used_mut(cmt={})", cmt.repr(this.tcx()));
776776
match cmt.cat.clone() {
777777
mc::cat_copied_upvar(mc::CopiedUpvar { upvar_id: id, .. }) |
778-
mc::cat_local(id) | mc::cat_arg(id) => {
778+
mc::cat_local(id) => {
779779
this.tcx().used_mut_nodes.borrow_mut().insert(id);
780780
return;
781781
}

src/librustc/middle/borrowck/gather_loans/gather_moves.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,7 @@ fn check_and_get_illegal_move_origin(bccx: &BorrowckCtxt,
147147
}
148148

149149
mc::cat_rvalue(..) |
150-
mc::cat_local(..) |
151-
mc::cat_arg(..) => {
150+
mc::cat_local(..) => {
152151
None
153152
}
154153

src/librustc/middle/borrowck/gather_loans/lifetime.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ impl<'a, 'tcx> GuaranteeLifetimeContext<'a, 'tcx> {
6969
mc::cat_rvalue(..) |
7070
mc::cat_copied_upvar(..) | // L-Local
7171
mc::cat_local(..) | // L-Local
72-
mc::cat_arg(..) | // L-Local
7372
mc::cat_upvar(..) |
7473
mc::cat_deref(_, _, mc::BorrowedPtr(..)) | // L-Deref-Borrowed
7574
mc::cat_deref(_, _, mc::Implicit(..)) |
@@ -174,8 +173,7 @@ impl<'a, 'tcx> GuaranteeLifetimeContext<'a, 'tcx> {
174173
mc::cat_static_item => {
175174
ty::ReStatic
176175
}
177-
mc::cat_local(local_id) |
178-
mc::cat_arg(local_id) => {
176+
mc::cat_local(local_id) => {
179177
ty::ReScope(self.bccx.tcx.region_maps.var_scope(local_id))
180178
}
181179
mc::cat_deref(_, _, mc::UnsafePtr(..)) => {

src/librustc/middle/borrowck/gather_loans/restrictions.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ impl<'a, 'tcx> RestrictionsContext<'a, 'tcx> {
6666
Safe
6767
}
6868

69-
mc::cat_local(local_id) |
70-
mc::cat_arg(local_id) => {
69+
mc::cat_local(local_id) => {
7170
// R-Variable, locally declared
7271
let lp = Rc::new(LpVar(local_id));
7372
SafeIf(lp.clone(), vec![lp])

src/librustc/middle/borrowck/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,7 @@ pub fn opt_loan_path(cmt: &mc::cmt) -> Option<Rc<LoanPath>> {
321321
None
322322
}
323323

324-
mc::cat_local(id) |
325-
mc::cat_arg(id) => {
324+
mc::cat_local(id) => {
326325
Some(Rc::new(LpVar(id)))
327326
}
328327

src/librustc/middle/def.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ use middle::subst::ParamSpace;
1212
use syntax::ast;
1313
use syntax::ast_util::local_def;
1414

15-
use std::gc::Gc;
16-
1715
#[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)]
1816
pub enum Def {
1917
DefFn(ast::DefId, ast::FnStyle),
@@ -22,20 +20,18 @@ pub enum Def {
2220
DefMod(ast::DefId),
2321
DefForeignMod(ast::DefId),
2422
DefStatic(ast::DefId, bool /* is_mutbl */),
25-
DefArg(ast::NodeId, ast::BindingMode),
26-
DefLocal(ast::NodeId, ast::BindingMode),
23+
DefLocal(ast::NodeId),
2724
DefVariant(ast::DefId /* enum */, ast::DefId /* variant */, bool /* is_structure */),
2825
DefTy(ast::DefId, bool /* is_enum */),
2926
DefAssociatedTy(ast::DefId),
3027
DefTrait(ast::DefId),
3128
DefPrimTy(ast::PrimTy),
3229
DefTyParam(ParamSpace, ast::DefId, uint),
33-
DefBinding(ast::NodeId, ast::BindingMode),
3430
DefUse(ast::DefId),
35-
DefUpvar(ast::NodeId, // id of closed over var
36-
Gc<Def>, // closed over def
31+
DefUpvar(ast::NodeId, // id of closed over local
3732
ast::NodeId, // expr node that creates the closure
38-
ast::NodeId), // id for the block/body of the closure expr
33+
ast::NodeId), // block node for the closest enclosing proc
34+
// or unboxed closure, DUMMY_NODE_ID otherwise
3935

4036
/// Note that if it's a tuple struct's definition, the node id of the ast::DefId
4137
/// may either refer to the item definition's id or the StructDef.ctor_id.
@@ -68,11 +64,9 @@ impl Def {
6864
DefMethod(id, _) => {
6965
id
7066
}
71-
DefArg(id, _) |
72-
DefLocal(id, _) |
67+
DefLocal(id) |
7368
DefSelfTy(id) |
74-
DefUpvar(id, _, _, _) |
75-
DefBinding(id, _) |
69+
DefUpvar(id, _, _) |
7670
DefRegion(id) |
7771
DefTyParamBinder(id) |
7872
DefLabel(id) => {

src/librustc/middle/expr_use_visitor.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
use middle::mem_categorization as mc;
1818
use middle::def;
19-
use middle::freevars;
19+
use middle::mem_categorization::Typer;
2020
use middle::pat_util;
2121
use middle::ty;
2222
use middle::typeck::{MethodCall, MethodObject, MethodOrigin, MethodParam};
@@ -911,12 +911,12 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,TYPER> {
911911
debug!("walk_captures({})", closure_expr.repr(self.tcx()));
912912

913913
let tcx = self.typer.tcx();
914-
freevars::with_freevars(tcx, closure_expr.id, |freevars| {
915-
match freevars::get_capture_mode(self.tcx(), closure_expr.id) {
916-
freevars::CaptureByRef => {
914+
ty::with_freevars(tcx, closure_expr.id, |freevars| {
915+
match self.tcx().capture_mode(closure_expr.id) {
916+
ast::CaptureByRef => {
917917
self.walk_by_ref_captures(closure_expr, freevars);
918918
}
919-
freevars::CaptureByValue => {
919+
ast::CaptureByValue => {
920920
self.walk_by_value_captures(closure_expr, freevars);
921921
}
922922
}
@@ -925,7 +925,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,TYPER> {
925925

926926
fn walk_by_ref_captures(&mut self,
927927
closure_expr: &ast::Expr,
928-
freevars: &[freevars::freevar_entry]) {
928+
freevars: &[ty::Freevar]) {
929929
for freevar in freevars.iter() {
930930
let id_var = freevar.def.def_id().node;
931931
let cmt_var = return_if_err!(self.cat_captured_var(closure_expr.id,
@@ -950,7 +950,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,TYPER> {
950950

951951
fn walk_by_value_captures(&mut self,
952952
closure_expr: &ast::Expr,
953-
freevars: &[freevars::freevar_entry]) {
953+
freevars: &[ty::Freevar]) {
954954
for freevar in freevars.iter() {
955955
let cmt_var = return_if_err!(self.cat_captured_var(closure_expr.id,
956956
closure_expr.span,

0 commit comments

Comments
 (0)