@@ -234,6 +234,7 @@ def __init__(self, *args, **kwargs) -> None:
234234 self .binop_arg_nodes_to_skip : set [int ] = set ()
235235 self .binop_nodes_to_eval : set [int ] = set ()
236236 self .lexical_chain_stack : pyc .TraceStack = self .make_stack ()
237+ self ._overridden_builtins : list [str ] = []
237238 with self .register_additional_ast_bookkeeping ():
238239 self .placeholder_arg_position_cache : dict [int , list [str ]] = {}
239240 self .exc_to_propagate : Exception | None = None
@@ -245,9 +246,17 @@ def __init__(self, *args, **kwargs) -> None:
245246 extra_builtin_name = extra_builtin .__name__
246247 if hasattr (builtins , extra_builtin_name ):
247248 continue
249+ self ._overridden_builtins .append (extra_builtin_name )
248250 setattr (builtins , extra_builtin_name , extra_builtin )
249- if user_ns is not None :
250- user_ns [extra_builtin_name ] = extra_builtin
251+ if user_ns is not None and extra_builtin_name :
252+ user_ns .setdefault (extra_builtin_name , extra_builtin )
253+
254+ def reset (self ) -> None :
255+ for extra_builtin_name in self ._overridden_builtins :
256+ if hasattr (builtins , extra_builtin_name ):
257+ delattr (builtins , extra_builtin_name )
258+ self ._overridden_builtins .clear ()
259+ super ().reset ()
251260
252261 @pyc .register_handler (pyc .before_call , when = is_partial_call , reentrant = True )
253262 def curry_partial_calls (self , ret , node : ast .Call , * _ , ** __ ):
@@ -350,9 +359,8 @@ def should_propagate_handler_exception(
350359 def maybe_skip_binop_arg (self , ret : object , node_id : int , * _ , ** __ ):
351360 if node_id in self .binop_arg_nodes_to_skip :
352361 self .binop_arg_nodes_to_skip .remove (node_id )
353- return _skip_binop_args_lambda
354- else :
355- return ret
362+ ret = _skip_binop_args_lambda
363+ return ret
356364
357365 def reorder_placeholder_names_for_prior_positions (
358366 self , node : ast .expr , placeholder_names : list [str ]
0 commit comments