aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/ty.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 59de7768..96479c40 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -2362,9 +2362,15 @@ mod Unify {
auto ures = unify_step(cx, expected, actual);
alt (ures) {
- case (ures_ok(?t)) {
+ case (ures_ok(?typ)) {
+ // Fast path: if there are no local variables, don't perform
+ // substitutions.
+ if (_vec.len[mutable UFind.node](cx.sets.nodes) == 0u) {
+ ret ures_ok(typ);
+ }
+
auto set_types = unify_sets(cx);
- auto t2 = substitute(cx, set_types, t);
+ auto t2 = substitute(cx, set_types, typ);
ret ures_ok(t2);
}
case (_) { ret ures; }