about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/middle/region.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs
index 6374eb3ff90..944d03737d3 100644
--- a/src/librustc/middle/region.rs
+++ b/src/librustc/middle/region.rs
@@ -1175,13 +1175,18 @@ struct YieldFinder<'a> {
 
 impl<'a> YieldFinder<'a> {
     fn lookup<F: FnOnce(&mut Self)>(&mut self, id: NodeId, f: F) {
-        if let Some(result) = self.cache.get(&id) {
-            self.result = *result;
+        // Don't traverse further if we found a yield expression
+        if self.result.is_some() {
             return;
         }
-        if self.result.is_some() {
+
+        // See if there's an entry in the cache
+        if let Some(result) = self.cache.get(&id) {
+            self.result = *result;
             return;
         }
+
+        // Otherwise calculate the result and insert it into the cache
         f(self);
         self.cache.insert(id, self.result);
     }