@@ -176,30 +176,35 @@ impl DataBase {
176176 }
177177
178178 pub fn unset ( & mut self , name : & str ) -> Result < ( ) , ExecError > {
179- self . unset_var ( name) ?;
180- self . functions . remove ( name) ;
179+ if ! self . unset_var ( name) ? {
180+ self . functions . remove ( name) ;
181+ }
181182 Ok ( ( ) )
182183 }
183184
184- pub fn unset_var ( & mut self , name : & str ) -> Result < ( ) , ExecError > {
185+ pub fn unset_var ( & mut self , name : & str ) -> Result < bool , ExecError > {
186+ let mut removed = false ;
185187 let num = self . params . len ( ) ;
186- for layer in ( 0 ..num) . rev ( ) {
187- self . remove_param ( layer, name) ?;
188+ for layer in 0 ..num {
189+ removed |= self . remove_param ( layer, name) ?;
188190 }
189- Ok ( ( ) )
191+ Ok ( removed )
190192 }
191193
192- fn remove_param ( & mut self , layer : usize , name : & str ) -> Result < ( ) , ExecError > {
194+ fn remove_param ( & mut self , layer : usize , name : & str ) -> Result < bool , ExecError > {
193195 if self . has_flag ( name, 'r' ) {
194196 return Err ( ExecError :: VariableReadOnly ( name. to_string ( ) ) ) ;
195197 }
196198
197199 if layer == 0 {
198200 unsafe { env:: remove_var ( name) } ;
199201 }
202+
203+ let mut removed = false ;
200204 if self . params [ layer] . contains_key ( name) {
201205 self . params [ layer] . remove ( name) ;
206+ removed = true ;
202207 }
203- Ok ( ( ) )
208+ Ok ( removed )
204209 }
205210}
0 commit comments