From e7ffc9db1d2cd8f6be143e0997eff64afe39bc71 Mon Sep 17 00:00:00 2001 From: Adam Kelly Date: Sat, 31 Aug 2019 15:03:44 +0100 Subject: [PATCH] load_global shouldn't load outermost locals. --- tests/snippets/global_nonlocal.py | 3 +++ vm/src/scope.rs | 9 --------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/tests/snippets/global_nonlocal.py b/tests/snippets/global_nonlocal.py index ddf5e1ed2..1996f2e33 100644 --- a/tests/snippets/global_nonlocal.py +++ b/tests/snippets/global_nonlocal.py @@ -15,8 +15,11 @@ assert a == 4 def x(): def y(): + global a nonlocal b + assert a == 4, a b = 3 + a = "no!" # a here shouldn't be seen by the global above. b = 2 y() return b diff --git a/vm/src/scope.rs b/vm/src/scope.rs index 3ba068f6e..eda7ddc09 100644 --- a/vm/src/scope.rs +++ b/vm/src/scope.rs @@ -179,15 +179,6 @@ impl NameProtocol for Scope { #[cfg_attr(feature = "flame-it", flame("Scope"))] /// Load a global name. fn load_global(&self, vm: &VirtualMachine, name: &str) -> Option { - // First, take a look in the outmost local scope (the scope at top level) - let last_local_dict = self.locals.iter().last(); - if let Some(local_dict) = last_local_dict { - if let Some(value) = local_dict.get_item_option(name, vm).unwrap() { - return Some(value); - } - } - - // Now, take a look at the globals or builtins. if let Some(value) = self.globals.get_item_option(name, vm).unwrap() { Some(value) } else {