@@ -689,10 +689,35 @@ pub fn encode_vtable_param_res(ecx: &e::EncodeContext,
689689 } ) . unwrap ( )
690690}
691691
692+ pub fn encode_unboxed_closure_kind ( ebml_w : & mut Encoder ,
693+ kind : ty:: UnboxedClosureKind ) {
694+ ebml_w. emit_enum ( "UnboxedClosureKind" , |ebml_w| {
695+ match kind {
696+ ty:: FnUnboxedClosureKind => {
697+ ebml_w. emit_enum_variant ( "FnUnboxedClosureKind" , 0 , 3 , |_| {
698+ Ok ( ( ) )
699+ } )
700+ }
701+ ty:: FnMutUnboxedClosureKind => {
702+ ebml_w. emit_enum_variant ( "FnMutUnboxedClosureKind" , 1 , 3 , |_| {
703+ Ok ( ( ) )
704+ } )
705+ }
706+ ty:: FnOnceUnboxedClosureKind => {
707+ ebml_w. emit_enum_variant ( "FnOnceUnboxedClosureKind" ,
708+ 2 ,
709+ 3 ,
710+ |_| {
711+ Ok ( ( ) )
712+ } )
713+ }
714+ }
715+ } ) . unwrap ( )
716+ }
692717
693718pub fn encode_vtable_origin ( ecx : & e:: EncodeContext ,
694- rbml_w : & mut Encoder ,
695- vtable_origin : & typeck:: vtable_origin ) {
719+ rbml_w : & mut Encoder ,
720+ vtable_origin : & typeck:: vtable_origin ) {
696721 rbml_w. emit_enum ( "vtable_origin" , |rbml_w| {
697722 match * vtable_origin {
698723 typeck:: vtable_static( def_id, ref substs, ref vtable_res) => {
@@ -1210,14 +1235,15 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
12101235 } )
12111236 }
12121237
1213- for unboxed_closure_type in tcx. unboxed_closure_types
1214- . borrow ( )
1215- . find ( & ast_util:: local_def ( id) )
1216- . iter ( ) {
1217- rbml_w. tag ( c:: tag_table_unboxed_closure_type , |rbml_w| {
1238+ for unboxed_closure in tcx. unboxed_closures
1239+ . borrow ( )
1240+ . find ( & ast_util:: local_def ( id) )
1241+ . iter ( ) {
1242+ rbml_w. tag ( c:: tag_table_unboxed_closures , |rbml_w| {
12181243 rbml_w. id ( id) ;
12191244 rbml_w. tag ( c:: tag_table_val, |rbml_w| {
1220- rbml_w. emit_closure_type ( ecx, * unboxed_closure_type)
1245+ rbml_w. emit_closure_type ( ecx, & unboxed_closure. closure_type ) ;
1246+ encode_unboxed_closure_kind ( rbml_w, unboxed_closure. kind )
12211247 } )
12221248 } )
12231249 }
@@ -1244,8 +1270,8 @@ trait rbml_decoder_decoder_helpers {
12441270 -> ty:: Polytype ;
12451271 fn read_substs ( & mut self , xcx : & ExtendedDecodeContext ) -> subst:: Substs ;
12461272 fn read_auto_adjustment ( & mut self , xcx : & ExtendedDecodeContext ) -> ty:: AutoAdjustment ;
1247- fn read_unboxed_closure_type ( & mut self , xcx : & ExtendedDecodeContext )
1248- -> ty:: ClosureTy ;
1273+ fn read_unboxed_closure ( & mut self , xcx : & ExtendedDecodeContext )
1274+ -> ty:: UnboxedClosure ;
12491275 fn convert_def_id ( & mut self ,
12501276 xcx : & ExtendedDecodeContext ,
12511277 source : DefIdSource ,
@@ -1418,16 +1444,33 @@ impl<'a> rbml_decoder_decoder_helpers for reader::Decoder<'a> {
14181444 } ) . unwrap ( )
14191445 }
14201446
1421- fn read_unboxed_closure_type ( & mut self , xcx : & ExtendedDecodeContext )
1422- -> ty:: ClosureTy {
1423- self . read_opaque ( |this, doc| {
1447+ fn read_unboxed_closure ( & mut self , xcx : & ExtendedDecodeContext )
1448+ -> ty:: UnboxedClosure {
1449+ let closure_type = self . read_opaque ( |this, doc| {
14241450 Ok ( tydecode:: parse_ty_closure_data (
14251451 doc. data ,
14261452 xcx. dcx . cdata . cnum ,
14271453 doc. start ,
14281454 xcx. dcx . tcx ,
14291455 |s, a| this. convert_def_id ( xcx, s, a) ) )
1430- } ) . unwrap ( )
1456+ } ) . unwrap ( ) ;
1457+ let variants = [
1458+ "FnUnboxedClosureKind" ,
1459+ "FnMutUnboxedClosureKind" ,
1460+ "FnOnceUnboxedClosureKind"
1461+ ] ;
1462+ let kind = self . read_enum_variant ( variants, |_, i| {
1463+ Ok ( match i {
1464+ 0 => ty:: FnUnboxedClosureKind ,
1465+ 1 => ty:: FnMutUnboxedClosureKind ,
1466+ 2 => ty:: FnOnceUnboxedClosureKind ,
1467+ _ => fail ! ( "bad enum variant for ty::UnboxedClosureKind" ) ,
1468+ } )
1469+ } ) . unwrap ( ) ;
1470+ ty:: UnboxedClosure {
1471+ closure_type : closure_type,
1472+ kind : kind,
1473+ }
14311474 }
14321475
14331476 fn convert_def_id ( & mut self ,
@@ -1566,14 +1609,14 @@ fn decode_side_tables(xcx: &ExtendedDecodeContext,
15661609 let adj: ty:: AutoAdjustment = val_dsr. read_auto_adjustment ( xcx) ;
15671610 dcx. tcx . adjustments . borrow_mut ( ) . insert ( id, adj) ;
15681611 }
1569- c:: tag_table_unboxed_closure_type => {
1570- let unboxed_closure_type =
1571- val_dsr. read_unboxed_closure_type ( xcx) ;
1612+ c:: tag_table_unboxed_closures => {
1613+ let unboxed_closure =
1614+ val_dsr. read_unboxed_closure ( xcx) ;
15721615 dcx. tcx
1573- . unboxed_closure_types
1616+ . unboxed_closures
15741617 . borrow_mut ( )
15751618 . insert ( ast_util:: local_def ( id) ,
1576- unboxed_closure_type ) ;
1619+ unboxed_closure ) ;
15771620 }
15781621 _ => {
15791622 xcx. dcx . tcx . sess . bug (
0 commit comments