@@ -419,10 +419,7 @@ fn T_opaque_obj_ptr(type_names tn) -> TypeRef {
419
419
420
420
421
421
fn type_of ( @crate_ctxt cx , @ty. t t ) -> TypeRef {
422
- let TypeRef llty = type_of_inner ( cx, t) ;
423
- check ( llty as int != 0 ) ;
424
- llvm. LLVMAddTypeName ( cx. llmod , _str. buf ( ty. ty_to_str ( t) ) , llty) ;
425
- ret llty;
422
+ ret type_of_inner ( cx, t) ;
426
423
}
427
424
428
425
fn type_of_explicit_args ( @crate_ctxt cx ,
@@ -433,7 +430,7 @@ fn type_of_explicit_args(@crate_ctxt cx,
433
430
check ( arg. mode == ast. alias ) ;
434
431
atys += T_typaram_ptr ( cx. tn ) ;
435
432
} else {
436
- let TypeRef t = type_of ( cx, arg. ty ) ;
433
+ let TypeRef t = type_of_inner ( cx, arg. ty ) ;
437
434
alt ( arg. mode ) {
438
435
case ( ast. alias ) {
439
436
t = T_ptr ( t) ;
@@ -464,7 +461,7 @@ fn type_of_fn_full(@crate_ctxt cx,
464
461
if ( ty. type_has_dynamic_size ( output) ) {
465
462
atys += T_typaram_ptr ( cx. tn ) ;
466
463
} else {
467
- atys += T_ptr ( type_of ( cx, output) ) ;
464
+ atys += T_ptr ( type_of_inner ( cx, output) ) ;
468
465
}
469
466
470
467
// Arg 1: Task pointer.
@@ -520,60 +517,62 @@ fn type_of_native_fn(@crate_ctxt cx, ast.native_abi abi,
520
517
vec[ ty. arg] inputs ,
521
518
@ty. t output ) -> TypeRef {
522
519
let vec[ TypeRef ] atys = type_of_explicit_args ( cx, inputs) ;
523
- ret T_fn ( atys, type_of ( cx, output) ) ;
520
+ ret T_fn ( atys, type_of_inner ( cx, output) ) ;
524
521
}
525
522
526
523
fn type_of_inner ( @crate_ctxt cx , @ty. t t ) -> TypeRef {
524
+ let TypeRef llty = 0 as TypeRef ;
525
+
527
526
alt ( t. struct ) {
528
- case ( ty. ty_native ) { ret T_ptr ( T_i8 ( ) ) ; }
529
- case ( ty. ty_nil ) { ret T_nil ( ) ; }
530
- case ( ty. ty_bool ) { ret T_bool ( ) ; }
531
- case ( ty. ty_int ) { ret T_int ( ) ; }
532
- case ( ty. ty_uint ) { ret T_int ( ) ; }
527
+ case ( ty. ty_native ) { llty = T_ptr ( T_i8 ( ) ) ; }
528
+ case ( ty. ty_nil ) { llty = T_nil ( ) ; }
529
+ case ( ty. ty_bool ) { llty = T_bool ( ) ; }
530
+ case ( ty. ty_int ) { llty = T_int ( ) ; }
531
+ case ( ty. ty_uint ) { llty = T_int ( ) ; }
533
532
case ( ty. ty_machine ( ?tm) ) {
534
533
alt ( tm) {
535
- case ( common. ty_i8 ) { ret T_i8 ( ) ; }
536
- case ( common. ty_u8 ) { ret T_i8 ( ) ; }
537
- case ( common. ty_i16 ) { ret T_i16 ( ) ; }
538
- case ( common. ty_u16 ) { ret T_i16 ( ) ; }
539
- case ( common. ty_i32 ) { ret T_i32 ( ) ; }
540
- case ( common. ty_u32 ) { ret T_i32 ( ) ; }
541
- case ( common. ty_i64 ) { ret T_i64 ( ) ; }
542
- case ( common. ty_u64 ) { ret T_i64 ( ) ; }
543
- case ( common. ty_f32 ) { ret T_f32 ( ) ; }
544
- case ( common. ty_f64 ) { ret T_f64 ( ) ; }
534
+ case ( common. ty_i8 ) { llty = T_i8 ( ) ; }
535
+ case ( common. ty_u8 ) { llty = T_i8 ( ) ; }
536
+ case ( common. ty_i16 ) { llty = T_i16 ( ) ; }
537
+ case ( common. ty_u16 ) { llty = T_i16 ( ) ; }
538
+ case ( common. ty_i32 ) { llty = T_i32 ( ) ; }
539
+ case ( common. ty_u32 ) { llty = T_i32 ( ) ; }
540
+ case ( common. ty_i64 ) { llty = T_i64 ( ) ; }
541
+ case ( common. ty_u64 ) { llty = T_i64 ( ) ; }
542
+ case ( common. ty_f32 ) { llty = T_f32 ( ) ; }
543
+ case ( common. ty_f64 ) { llty = T_f64 ( ) ; }
545
544
}
546
545
}
547
- case ( ty. ty_char ) { ret T_char ( ) ; }
548
- case ( ty. ty_str ) { ret T_ptr ( T_str ( ) ) ; }
546
+ case ( ty. ty_char ) { llty = T_char ( ) ; }
547
+ case ( ty. ty_str ) { llty = T_ptr ( T_str ( ) ) ; }
549
548
case ( ty. ty_tag ( ?tag_id, _) ) {
550
- ret llvm. LLVMResolveTypeHandle ( cx. tags . get ( tag_id) . th . llth ) ;
549
+ llty = llvm. LLVMResolveTypeHandle ( cx. tags . get ( tag_id) . th . llth ) ;
551
550
}
552
551
case ( ty. ty_box ( ?t) ) {
553
- ret T_ptr ( T_box ( type_of ( cx, t) ) ) ;
552
+ llty = T_ptr ( T_box ( type_of_inner ( cx, t) ) ) ;
554
553
}
555
554
case ( ty. ty_vec ( ?t) ) {
556
- ret T_ptr ( T_vec ( type_of ( cx, t) ) ) ;
555
+ llty = T_ptr ( T_vec ( type_of_inner ( cx, t) ) ) ;
557
556
}
558
557
case ( ty. ty_tup ( ?elts) ) {
559
558
let vec[ TypeRef ] tys = vec ( ) ;
560
559
for ( @ty. t elt in elts) {
561
- tys += type_of ( cx, elt) ;
560
+ tys += type_of_inner ( cx, elt) ;
562
561
}
563
- ret T_struct ( tys) ;
562
+ llty = T_struct ( tys) ;
564
563
}
565
564
case ( ty. ty_rec ( ?fields) ) {
566
565
let vec[ TypeRef ] tys = vec ( ) ;
567
566
for ( ty. field f in fields) {
568
- tys += type_of ( cx, f. ty ) ;
567
+ tys += type_of_inner ( cx, f. ty ) ;
569
568
}
570
- ret T_struct ( tys) ;
569
+ llty = T_struct ( tys) ;
571
570
}
572
571
case ( ty. ty_fn ( ?proto, ?args, ?out) ) {
573
- ret T_fn_pair ( cx. tn , type_of_fn ( cx, proto, args, out) ) ;
572
+ llty = T_fn_pair ( cx. tn , type_of_fn ( cx, proto, args, out) ) ;
574
573
}
575
574
case ( ty. ty_native_fn ( ?abi, ?args, ?out) ) {
576
- ret T_fn_pair ( cx. tn , type_of_native_fn ( cx, abi, args, out) ) ;
575
+ llty = T_fn_pair ( cx. tn , type_of_native_fn ( cx, abi, args, out) ) ;
577
576
}
578
577
case ( ty. ty_obj ( ?meths) ) {
579
578
auto th = mk_type_handle ( ) ;
@@ -594,22 +593,25 @@ fn type_of_inner(@crate_ctxt cx, @ty.t t) -> TypeRef {
594
593
auto abs_pair = llvm. LLVMResolveTypeHandle ( th. llth ) ;
595
594
llvm. LLVMRefineType ( abs_pair, pair) ;
596
595
abs_pair = llvm. LLVMResolveTypeHandle ( th. llth ) ;
597
- ret abs_pair;
596
+ llty = abs_pair;
598
597
}
599
598
case ( ty. ty_var ( _) ) {
600
599
log "ty_var in trans.type_of" ;
601
600
fail;
602
601
}
603
602
case ( ty. ty_param ( _) ) {
604
- ret T_typaram_ptr ( cx. tn ) ;
603
+ llty = T_typaram_ptr ( cx. tn ) ;
605
604
}
606
- case ( ty. ty_type ) { ret T_ptr ( T_tydesc ( cx. tn ) ) ; }
605
+ case ( ty. ty_type ) { llty = T_ptr ( T_tydesc ( cx. tn ) ) ; }
607
606
}
608
- fail;
607
+
608
+ check ( llty as int != 0 ) ;
609
+ llvm. LLVMAddTypeName ( cx. llmod , _str. buf ( ty. ty_to_str ( t) ) , llty) ;
610
+ ret llty;
609
611
}
610
612
611
613
fn type_of_arg ( @crate_ctxt cx , & ty. arg arg ) -> TypeRef {
612
- auto ty = type_of ( cx, arg. ty ) ;
614
+ auto ty = type_of_inner ( cx, arg. ty ) ;
613
615
if ( arg. mode == ast. alias ) {
614
616
ty = T_ptr ( ty) ;
615
617
}
0 commit comments