]> git.lizzy.rs Git - rust.git/commitdiff
Also store MIR of closures in crate metadata.
authorMichael Woerister <michaelwoerister@posteo.net>
Fri, 8 Jan 2016 14:45:26 +0000 (09:45 -0500)
committerMichael Woerister <michaelwoerister@posteo.net>
Fri, 8 Jan 2016 14:45:26 +0000 (09:45 -0500)
src/librustc_metadata/encoder.rs

index 26f32e207647fd0d4c948e285fb32fedbea49357..22da853dfedb5325902a4b0d629f56a3940fc7d1 100644 (file)
@@ -806,18 +806,18 @@ fn encode_inlined_item(ecx: &EncodeContext,
     let eii: &mut EncodeInlinedItem = &mut *eii;
     eii(ecx, rbml_w, ii);
 
-    encode_mir(ecx, rbml_w, ii);
-}
-
-fn encode_mir(ecx: &EncodeContext, rbml_w: &mut Encoder, ii: InlinedItemRef) {
-    let id = match ii {
+    let node_id = match ii {
         InlinedItemRef::Item(item) => item.id,
         InlinedItemRef::TraitItem(_, trait_item) => trait_item.id,
         InlinedItemRef::ImplItem(_, impl_item) => impl_item.id,
         InlinedItemRef::Foreign(foreign_item) => foreign_item.id
     };
 
-    if let Some(mir) = ecx.mir_map.get(&id) {
+    encode_mir(ecx, rbml_w, node_id);
+}
+
+fn encode_mir(ecx: &EncodeContext, rbml_w: &mut Encoder, node_id: NodeId) {
+    if let Some(mir) = ecx.mir_map.get(&node_id) {
         rbml_w.start_tag(tag_mir as usize);
         rbml_w.emit_opaque(|opaque_encoder| {
             tls::enter_encoding_context(ecx, opaque_encoder, |_, opaque_encoder| {
@@ -1436,6 +1436,9 @@ fn my_visit_expr(expr: &hir::Expr,
 
             ecx.tcx.map.with_path(expr.id, |path| encode_path(rbml_w, path));
 
+            assert!(ecx.mir_map.contains_key(&expr.id));
+            encode_mir(ecx, rbml_w, expr.id);
+
             rbml_w.end_tag();
         }
         _ => { }