From 8a8f68aa7575dd9a052b6cee4fd167e43b1b632f Mon Sep 17 00:00:00 2001
From: Patrick Walton <pcwalton@mimiga.net>
Date: Fri, 13 May 2011 10:53:55 -0700
Subject: [PATCH] rustc: Make typeck::instantiate_path() not return an
 annotation

---
 src/comp/middle/typeck.rs | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 4c21ee53bd2..8fac7fc3f80 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -177,10 +177,12 @@ fn ty_param_count_and_ty_for_def(&@fn_ctxt fcx, &ast::span sp, &ast::def defn)
     }
 }
 
+type ty_param_substs_opt_and_ty = tup(option::t[vec[ty::t]], ty::t);
+
 // Instantiates the given path, which must refer to an item with the given
 // number of type parameters and type.
 fn instantiate_path(&@fn_ctxt fcx, &ast::path pth, &ty_param_count_and_ty tpt,
-                    &span sp, uint ann_tag) -> ast::ann {
+                    &span sp) -> ty_param_substs_opt_and_ty {
     auto ty_param_count = tpt._0;
     auto t = bind_params_in_type(fcx.ccx.tcx, tpt._1);
 
@@ -211,7 +213,7 @@ fn instantiate_path(&@fn_ctxt fcx, &ast::path pth, &ty_param_count_and_ty tpt,
         ty_substs_opt = some[vec[ty::t]](ty_substs);
     }
 
-    ret ast::ann_type(ann_tag, t, ty_substs_opt, none[@ts_ann]);
+    ret tup(ty_substs_opt, t);
 }
 
 fn ast_mode_to_mode(ast::mode mode) -> ty::mode {
@@ -1656,8 +1658,8 @@ fn check_pat(&@fn_ctxt fcx, &@ast::pat pat) -> @ast::pat {
 
             auto tpt = ty::lookup_item_type(fcx.ccx.sess, fcx.ccx.tcx,
                                            fcx.ccx.type_cache, vdef._0);
-            auto ann = instantiate_path(fcx, p, tpt, pat.span,
-                                        ast::ann_tag(old_ann));
+
+            auto path_tpot = instantiate_path(fcx, p, tpt, pat.span);
 
             alt (struct(fcx.ccx.tcx, t)) {
                 // N-ary variants have function types.
@@ -1681,7 +1683,9 @@ fn check_pat(&@fn_ctxt fcx, &@ast::pat pat) -> @ast::pat {
                         new_subpats += vec(check_pat(fcx, subpat));
                     }
 
-                    new_pat = ast::pat_tag(p, new_subpats, ann);
+                    new_pat = ast::pat_tag(p, new_subpats,
+                        ast::ann_type(ast::ann_tag(old_ann), path_tpot._1,
+                                      path_tpot._0, none[@ts_ann]));
                 }
 
                 // Nullary variants have tag types.
@@ -1699,7 +1703,9 @@ fn check_pat(&@fn_ctxt fcx, &@ast::pat pat) -> @ast::pat {
                         fail;   // TODO: recover
                     }
 
-                    new_pat = ast::pat_tag(p, subpats, ann);
+                    new_pat = ast::pat_tag(p, subpats,
+                        ast::ann_type(ast::ann_tag(old_ann), path_tpot._1,
+                                      path_tpot._0, none[@ts_ann]));
                 }
             }
         }
@@ -1946,10 +1952,11 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) -> @ast::expr {
             auto tpt = ty_param_count_and_ty_for_def(fcx, expr.span, defn);
 
             if (ty::def_has_ty_params(defn)) {
-                auto ann = instantiate_path(fcx, pth, tpt, expr.span,
-                                            ast::ann_tag(old_ann));
+                auto path_tpot = instantiate_path(fcx, pth, tpt, expr.span);
                 ret @fold::respan[ast::expr_](expr.span,
-                                            ast::expr_path(pth, ann));
+                    ast::expr_path(pth,
+                        ast::ann_type(ast::ann_tag(old_ann), path_tpot._1,
+                                      path_tpot._0, none[@ts_ann])));
             }
 
             // The definition doesn't take type parameters. If the programmer