@@ -106,20 +106,6 @@ impl Scope {
106
106
}
107
107
}
108
108
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
-
123
109
pub fn get_only_locals ( & self ) -> Option < PyObjectRef > {
124
110
self . locals . iter ( ) . next ( ) . cloned ( )
125
111
}
@@ -140,15 +126,31 @@ pub trait NameProtocol {
140
126
fn load_name ( & self , vm : & VirtualMachine , name : & str ) -> Option < PyObjectRef > ;
141
127
fn store_name ( & self , vm : & VirtualMachine , name : & str , value : PyObjectRef ) ;
142
128
fn delete_name ( & self , vm : & VirtualMachine , name : & str ) ;
129
+ fn load_cell ( & self , vm : & VirtualMachine , name : & str ) -> Option < PyObjectRef > ;
143
130
}
144
131
145
132
impl NameProtocol for Scope {
146
133
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) ;
151
142
}
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
152
154
}
153
155
154
156
fn store_name ( & self , vm : & VirtualMachine , key : & str , value : PyObjectRef ) {
0 commit comments