@@ -543,6 +543,44 @@ fn is_fn_ty(@t fty) -> bool {
543
543
544
544
// Type accessors for AST nodes
545
545
546
+ // Given an item, returns the associated type as well as a list of the IDs of
547
+ // its type parameters.
548
+ fn item_ty( @ast. item it) -> tup( vec[ ast. def_id] , @t) {
549
+ let vec[ ast. ty_param] ty_params;
550
+ auto result_ty;
551
+ alt ( it. node) {
552
+ case ( ast. item_const( _, _, _, _, ?ann) ) {
553
+ ty_params = vec( ) ;
554
+ result_ty = ann_to_type( ann) ;
555
+ }
556
+ case ( ast. item_fn( _, _, ?tps, _, ?ann) ) {
557
+ ty_params = tps;
558
+ result_ty = ann_to_type( ann) ;
559
+ }
560
+ case ( ast. item_mod( _, _, _) ) {
561
+ fail; // modules are typeless
562
+ }
563
+ case ( ast. item_ty( _, _, ?tps, _, ?ann) ) {
564
+ ty_params = tps;
565
+ result_ty = ann_to_type( ann) ;
566
+ }
567
+ case ( ast. item_tag( _, _, ?tps, ?did) ) {
568
+ ty_params = tps;
569
+ result_ty = plain_ty( ty_tag( did) ) ;
570
+ }
571
+ case ( ast. item_obj( _, _, ?tps, _, ?ann) ) {
572
+ ty_params = tps;
573
+ result_ty = ann_to_type( ann) ;
574
+ }
575
+ }
576
+
577
+ let vec[ ast. def_id] ty_param_ids = vec( ) ;
578
+ for ( ast. ty_param tp in ty_params) {
579
+ ty_param_ids += vec( tp. id) ;
580
+ }
581
+ ret tup( ty_param_ids, result_ty) ;
582
+ }
583
+
546
584
fn stmt_ty( @ast. stmt s) -> @t {
547
585
alt ( s. node) {
548
586
case ( ast. stmt_expr( ?e) ) {
0 commit comments