@@ -106,20 +106,6 @@ impl Scope {
106106 }
107107 }
108108
109- pub fn get ( & self , name : & str ) -> Option < PyObjectRef > {
110- for dict in self . locals . iter ( ) {
111- if let Some ( value) = dict. get_item ( name) {
112- return Some ( value) ;
113- }
114- }
115-
116- if let Some ( value) = self . globals . get_item ( name) {
117- return Some ( value) ;
118- }
119-
120- None
121- }
122-
123109 pub fn get_only_locals ( & self ) -> Option < PyObjectRef > {
124110 self . locals . iter ( ) . next ( ) . cloned ( )
125111 }
@@ -140,15 +126,31 @@ pub trait NameProtocol {
140126 fn load_name ( & self , vm : & VirtualMachine , name : & str ) -> Option < PyObjectRef > ;
141127 fn store_name ( & self , vm : & VirtualMachine , name : & str , value : PyObjectRef ) ;
142128 fn delete_name ( & self , vm : & VirtualMachine , name : & str ) ;
129+ fn load_cell ( & self , vm : & VirtualMachine , name : & str ) -> Option < PyObjectRef > ;
143130}
144131
145132impl NameProtocol for Scope {
146133 fn load_name ( & self , vm : & VirtualMachine , name : & str ) -> Option < PyObjectRef > {
147- if let Some ( value) = self . get ( name) {
148- Some ( value)
149- } else {
150- vm. builtins . get_item ( name)
134+ for dict in self . locals . iter ( ) {
135+ if let Some ( value) = dict. get_item ( name) {
136+ return Some ( value) ;
137+ }
138+ }
139+
140+ if let Some ( value) = self . globals . get_item ( name) {
141+ return Some ( value) ;
151142 }
143+
144+ vm. builtins . get_item ( name)
145+ }
146+
147+ fn load_cell ( & self , _vm : & VirtualMachine , name : & str ) -> Option < PyObjectRef > {
148+ for dict in self . locals . iter ( ) . skip ( 1 ) {
149+ if let Some ( value) = dict. get_item ( name) {
150+ return Some ( value) ;
151+ }
152+ }
153+ None
152154 }
153155
154156 fn store_name ( & self , vm : & VirtualMachine , key : & str , value : PyObjectRef ) {
0 commit comments