aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-04-22 10:51:32 -0700
committerPatrick Walton <[email protected]>2011-04-22 10:51:32 -0700
commit106f783b33f64cfc364b7aa2e5f57bcd07e9bfb8 (patch)
tree7876306d353746e0c25be7f27fd99d3d9f71930e
parentrustc: Add a fast path if there are no type substitutions to be made (diff)
downloadrust-106f783b33f64cfc364b7aa2e5f57bcd07e9bfb8.tar.xz
rust-106f783b33f64cfc364b7aa2e5f57bcd07e9bfb8.zip
rustc: Add a fast path when the types to be unified are exactly equal
-rw-r--r--src/comp/middle/ty.rs3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 96479c40..d57b8071 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -1877,6 +1877,9 @@ mod Unify {
// TODO: occurs check, to make sure we don't loop forever when
// unifying e.g. 'a and option['a]
+ // Fast path.
+ if (eq_ty(expected, actual)) { ret ures_ok(expected); }
+
alt (actual.struct) {
// If the RHS is a variable type, then just do the appropriate
// binding.