@@ -24,11 +24,14 @@ use std::rc::Rc;
24
24
use std:: str;
25
25
use std:: string:: String ;
26
26
use std:: uint;
27
+ use std:: cmp;
27
28
use syntax:: abi;
28
29
use syntax:: ast;
29
30
use syntax:: ast:: * ;
30
31
use syntax:: parse:: token;
31
32
33
+ static DATA_TRUNCATE : uint = 32 ;
34
+
32
35
// Compact string representation for ty::t values. API ty_str &
33
36
// parse_from_str. Extra parameters are for converting to/from def_ids in the
34
37
// 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,
115
118
}
116
119
}
117
120
118
- fn data_log_string ( data : & [ u8 ] , pos : uint ) -> String {
121
+ fn data_log_string ( data : & [ u8 ] , pos : uint , max : uint ) -> String {
119
122
let mut buf = String :: new ( ) ;
123
+ let end = match max {
124
+ 0 u => data. len ( ) ,
125
+ x => cmp:: min ( pos + x, data. len ( ) )
126
+ } ;
120
127
buf. push_str ( "<<" ) ;
121
- for i in range ( pos, data . len ( ) ) {
128
+ for i in range ( pos, end ) {
122
129
let c = data[ i] ;
123
130
if c > 0x20 && c <= 0x7F {
124
131
buf. push_char ( c as char ) ;
125
132
} else {
126
133
buf. push_char ( '.' ) ;
127
134
}
128
135
}
136
+ if end < data. len ( ) {
137
+ buf. push_str (
138
+ format ! ( " ({} more bytes)" , data. len( ) - end ) . as_slice ( )
139
+ ) ;
140
+ }
129
141
buf. push_str ( ">>" ) ;
130
142
buf
131
143
}
@@ -142,35 +154,35 @@ pub fn parse_ty_closure_data(data: &[u8],
142
154
143
155
pub fn parse_ty_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
144
156
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 ) ) ;
146
158
let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
147
159
parse_ty ( & mut st, conv)
148
160
}
149
161
150
162
pub fn parse_region_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
151
163
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 ) ) ;
153
165
let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
154
166
parse_region ( & mut st, conv)
155
167
}
156
168
157
169
pub fn parse_bare_fn_ty_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
158
170
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 ) ) ;
160
172
let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
161
173
parse_bare_fn_ty ( & mut st, conv)
162
174
}
163
175
164
176
pub fn parse_trait_ref_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
165
177
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 ) ) ;
167
179
let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
168
180
parse_trait_ref ( & mut st, conv)
169
181
}
170
182
171
183
pub fn parse_substs_data ( data : & [ u8 ] , crate_num : ast:: CrateNum , pos : uint , tcx : & ty:: ctxt ,
172
184
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 ) ) ;
174
186
let mut st = parse_state_from_data ( data, crate_num, pos, tcx) ;
175
187
parse_substs ( & mut st, conv)
176
188
}
0 commit comments