1
- import std:: { vec, str, option, unsafe, fs} ;
1
+ import std:: { vec, str, option, unsafe, fs, sys } ;
2
2
import std:: map:: hashmap;
3
3
import lib:: llvm:: llvm;
4
4
import lib:: llvm:: llvm:: ValueRef ;
@@ -221,24 +221,27 @@ fn get_ty_metadata(cx: @crate_ctxt, t: ty::t, ty: @ast::ty) -> @metadata<tydesc_
221
221
option:: some ( md) { ret md; }
222
222
option:: none. { }
223
223
}
224
- let ( name, size, encoding) = alt ty. node {
225
- ast:: ty_bool. { ( "bool" , 1 , DW_ATE_boolean ) }
226
- ast:: ty_int. { ( "int" , 32 , DW_ATE_signed ) } //XXX machine-dependent?
227
- ast:: ty_uint. { ( "uint" , 32 , DW_ATE_unsigned ) } //XXX machine-dependent?
228
- ast:: ty_float. { ( "float" , 32 , DW_ATE_float ) } //XXX machine-dependent?
224
+ fn size_and_align_of < T > ( ) -> ( int , int ) {
225
+ ( sys:: size_of :: < T > ( ) as int , sys:: align_of :: < T > ( ) as int )
226
+ }
227
+ let ( name, ( size, align) , encoding) = alt ty. node {
228
+ ast:: ty_bool. { ( "bool" , size_and_align_of :: < bool > ( ) , DW_ATE_boolean ) }
229
+ ast:: ty_int. { ( "int" , size_and_align_of :: < int > ( ) , DW_ATE_signed ) }
230
+ ast:: ty_uint. { ( "uint" , size_and_align_of :: < uint > ( ) , DW_ATE_unsigned ) }
231
+ ast:: ty_float. { ( "float" , size_and_align_of :: < float > ( ) , DW_ATE_float ) }
229
232
ast:: ty_machine ( m) { alt m {
230
- ast : : ty_i8. { ( "i8" , 1 , DW_ATE_signed_char ) }
231
- ast:: ty_i16. { ( "i16" , 16 , DW_ATE_signed ) }
232
- ast:: ty_i32. { ( "i32" , 32 , DW_ATE_signed ) }
233
- ast:: ty_i64. { ( "i64" , 64 , DW_ATE_signed ) }
234
- ast:: ty_u8. { ( "u8" , 8 , DW_ATE_unsigned_char ) }
235
- ast:: ty_u16. { ( "u16" , 16 , DW_ATE_unsigned ) }
236
- ast:: ty_u32. { ( "u32" , 32 , DW_ATE_unsigned ) }
237
- ast:: ty_u64. { ( "u64" , 64 , DW_ATE_unsigned ) }
238
- ast:: ty_f32. { ( "f32" , 32 , DW_ATE_float ) }
239
- ast:: ty_f64. { ( "f64" , 64 , DW_ATE_float ) }
233
+ ast : : ty_i8. { ( "i8" , size_and_align_of :: < i8 > ( ) , DW_ATE_signed_char ) }
234
+ ast:: ty_i16. { ( "i16" , size_and_align_of :: < i16 > ( ) , DW_ATE_signed ) }
235
+ ast:: ty_i32. { ( "i32" , size_and_align_of :: < i32 > ( ) , DW_ATE_signed ) }
236
+ ast:: ty_i64. { ( "i64" , size_and_align_of :: < i64 > ( ) , DW_ATE_signed ) }
237
+ ast:: ty_u8. { ( "u8" , size_and_align_of :: < u8 > ( ) , DW_ATE_unsigned_char ) }
238
+ ast:: ty_u16. { ( "u16" , size_and_align_of :: < u16 > ( ) , DW_ATE_unsigned ) }
239
+ ast:: ty_u32. { ( "u32" , size_and_align_of :: < u32 > ( ) , DW_ATE_unsigned ) }
240
+ ast:: ty_u64. { ( "u64" , size_and_align_of :: < u64 > ( ) , DW_ATE_unsigned ) }
241
+ ast:: ty_f32. { ( "f32" , size_and_align_of :: < f32 > ( ) , DW_ATE_float ) }
242
+ ast:: ty_f64. { ( "f64" , size_and_align_of :: < f64 > ( ) , DW_ATE_float ) }
240
243
} }
241
- ast:: ty_char. { ( "char" , 32 , DW_ATE_unsigned ) }
244
+ ast:: ty_char. { ( "char" , size_and_align_of :: < char > ( ) , DW_ATE_unsigned ) }
242
245
} ;
243
246
let fname = filename_from_span ( cx, ty. span ) ;
244
247
let file_node = get_file_metadata ( cx, fname) ;
@@ -247,9 +250,9 @@ fn get_ty_metadata(cx: @crate_ctxt, t: ty::t, ty: @ast::ty) -> @metadata<tydesc_
247
250
cu_node. node ,
248
251
llstr ( name) ,
249
252
file_node. node ,
250
- lli32 ( 0 ) , //XXX basic types only
251
- lli64 ( size) ,
252
- lli64 ( 32 ) , //XXX alignment?
253
+ lli32 ( 0 ) , //XXX source line
254
+ lli64 ( size * 8 ) , // size in bits
255
+ lli64 ( align * 8 ) , // alignment in bits
253
256
lli64 ( 0 ) , //XXX offset?
254
257
lli32 ( 0 ) , //XXX flags?
255
258
lli32 ( encoding) ] ;
0 commit comments