@@ -500,7 +500,8 @@ fn test_repr2() {
500
500
enum EnumVisitState {
501
501
PreVariant , // We're before the variant we're interested in.
502
502
InVariant , // We're inside the variant we're interested in.
503
- PostVariant // We're after the variant we're interested in.
503
+ PostVariant , // We're after the variant we're interested in.
504
+ Newtype // This is a newtyped enum.
504
505
}
505
506
506
507
impl EnumVisitState : cmp:: Eq {
@@ -859,13 +860,14 @@ impl ReprPrinterWrapper : TyVisitor {
859
860
860
861
// Enums
861
862
862
- fn visit_enter_enum ( _n_variants : uint , sz : uint , align : uint ) -> bool {
863
+ fn visit_enter_enum ( n_variants : uint , sz : uint , align : uint ) -> bool {
863
864
unsafe {
864
865
self . printer . align ( align) ;
865
866
866
867
// Write in the location of the end of this enum.
867
868
let end_ptr = transmute ( self . printer . ptr as uint + sz) ;
868
- let new_state = EnumState { end_ptr : end_ptr, state : PreVariant } ;
869
+ let state = if n_variants == 1 { Newtype } else { PreVariant } ;
870
+ let new_state = EnumState { end_ptr : end_ptr, state : state } ;
869
871
self . printer . enum_stack . push ( new_state) ;
870
872
871
873
true
@@ -889,21 +891,27 @@ impl ReprPrinterWrapper : TyVisitor {
889
891
stack. set_elt ( stack. len ( ) - 1 , enum_state) ;
890
892
}
891
893
}
894
+ Newtype => {
895
+ self . printer . writer . write_str ( name) ;
896
+ }
892
897
InVariant | PostVariant => { }
893
898
}
894
899
true
895
900
}
896
901
}
897
902
898
903
fn visit_enum_variant_field ( i : uint , inner : * TyDesc ) -> bool {
899
- if self . printer . enum_stack . last ( ) . state == InVariant {
900
- if i == 0 {
901
- self . printer . writer . write_char ( '(' ) ;
902
- } else {
903
- self . printer . writer . write_str ( ", " ) ;
904
- }
904
+ match self . printer . enum_stack . last ( ) . state {
905
+ InVariant | Newtype => {
906
+ if i == 0 {
907
+ self . printer . writer . write_char ( '(' ) ;
908
+ } else {
909
+ self . printer . writer . write_str ( ", " ) ;
910
+ }
905
911
906
- intrinsic:: visit_tydesc ( inner, self as @TyVisitor ) ;
912
+ intrinsic:: visit_tydesc ( inner, self as @TyVisitor ) ;
913
+ }
914
+ PreVariant | PostVariant => { }
907
915
}
908
916
true
909
917
}
@@ -920,6 +928,9 @@ impl ReprPrinterWrapper : TyVisitor {
920
928
enum_state. state = PostVariant ;
921
929
stack. set_elt ( stack. len ( ) - 1 , enum_state) ;
922
930
}
931
+ Newtype => {
932
+ if n_fields >= 1 { self . printer . writer . write_char ( ')' ) ; }
933
+ }
923
934
PreVariant | PostVariant => { }
924
935
}
925
936
true
0 commit comments