@@ -24,11 +24,14 @@ use std::rc::Rc;
2424use std:: str;
2525use std:: string:: String ;
2626use std:: uint;
27+ use std:: cmp;
2728use syntax:: abi;
2829use syntax:: ast;
2930use syntax:: ast:: * ;
3031use syntax:: parse:: token;
3132
33+ static DATA_TRUNCATE : uint = 32 ;
34+
3235// Compact string representation for ty::t values. API ty_str &
3336// parse_from_str. Extra parameters are for converting to/from def_ids in the
3437// data buffer. Whatever format you choose should not contain pipe characters.
@@ -115,17 +118,26 @@ pub fn parse_state_from_data<'a>(data: &'a [u8], crate_num: ast::CrateNum,
115118 }
116119}
117120
118- fn data_log_string ( data : & [ u8 ] , pos : uint ) -> String {
121+ fn data_log_string ( data : & [ u8 ] , pos : uint , max : uint ) -> String {
119122 let mut buf = String :: new ( ) ;
123+ let end = match max {
124+ 0 u => data. len ( ) ,
125+ x => cmp:: min ( pos + x, data. len ( ) )
126+ } ;
120127 buf. push_str ( "<<" ) ;
121- for i in range ( pos, data . len ( ) ) {
128+ for i in range ( pos, end ) {
122129 let c = data[ i] ;
123130 if c > 0x20 && c <= 0x7F {
124131 buf. push_char ( c as char ) ;
125132 } else {
126133 buf. push_char ( '.' ) ;
127134 }
128135 }
136+ if end < data. len ( ) {
137+ buf. push_str (
138+ format ! ( " ({} more bytes)" , data. len( ) - end ) . as_slice ( )
139+ ) ;
140+ }
129141 buf. push_str ( ">>" ) ;
130142 buf
131143}
@@ -142,35 +154,35 @@ pub fn parse_ty_closure_data(data: &[u8],
142154
143155pub fn parse_ty_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
144156 conv : conv_did ) -> ty:: t {
145- debug ! ( "parse_ty_data {}" , data_log_string( data, pos) ) ;
157+ debug ! ( "parse_ty_data {}" , data_log_string( data, pos, DATA_TRUNCATE ) ) ;
146158 let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
147159 parse_ty ( & mut st, conv)
148160}
149161
150162pub fn parse_region_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
151163 conv : conv_did ) -> ty:: Region {
152- debug ! ( "parse_region_data {}" , data_log_string( data, pos) ) ;
164+ debug ! ( "parse_region_data {}" , data_log_string( data, pos, DATA_TRUNCATE ) ) ;
153165 let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
154166 parse_region ( & mut st, conv)
155167}
156168
157169pub fn parse_bare_fn_ty_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
158170 conv : conv_did ) -> ty:: BareFnTy {
159- debug ! ( "parse_bare_fn_ty_data {}" , data_log_string( data, pos) ) ;
171+ debug ! ( "parse_bare_fn_ty_data {}" , data_log_string( data, pos, DATA_TRUNCATE ) ) ;
160172 let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
161173 parse_bare_fn_ty ( & mut st, conv)
162174}
163175
164176pub fn parse_trait_ref_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
165177 conv : conv_did ) -> ty:: TraitRef {
166- debug ! ( "parse_trait_ref_data {}" , data_log_string( data, pos) ) ;
178+ debug ! ( "parse_trait_ref_data {}" , data_log_string( data, pos, DATA_TRUNCATE ) ) ;
167179 let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
168180 parse_trait_ref ( & mut st, conv)
169181}
170182
171183pub fn parse_substs_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
172184 conv : conv_did ) -> subst:: Substs {
173- debug ! ( "parse_substs_data {}" , data_log_string( data, pos) ) ;
185+ debug ! ( "parse_substs_data {}" , data_log_string( data, pos, DATA_TRUNCATE ) ) ;
174186 let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
175187 parse_substs ( & mut st, conv)
176188}
0 commit comments