@@ -711,6 +711,9 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
711711 return annotate (format )
712712 except NotImplementedError :
713713 pass
714+
715+ annotate_defaults = getattr (annotate , "__defaults__" , None )
716+ annotate_kwdefaults = getattr (annotate , "__kwdefaults__" , None )
714717 if format == Format .STRING :
715718 # STRING is implemented by calling the annotate function in a special
716719 # environment where every name lookup results in an instance of _Stringifier.
@@ -740,8 +743,8 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
740743 annotate .__code__ ,
741744 globals ,
742745 closure = closure ,
743- argdefs = annotate . __defaults__ ,
744- kwdefaults = annotate . __kwdefaults__ ,
746+ argdefs = annotate_defaults ,
747+ kwdefaults = annotate_kwdefaults ,
745748 )
746749 annos = func (Format .VALUE_WITH_FAKE_GLOBALS )
747750 if _is_evaluate :
@@ -768,11 +771,12 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
768771 # reconstruct the source. But in the dictionary that we eventually return, we
769772 # want to return objects with more user-friendly behavior, such as an __eq__
770773 # that returns a bool and an defined set of attributes.
771- namespace = {** annotate .__builtins__ , ** annotate .__globals__ }
774+ annotate_globals = getattr (annotate , "__globals__" , {})
775+ namespace = {** getattr (annotate , "__builtins__" , builtins .__dict__ ), ** annotate_globals }
772776 is_class = isinstance (owner , type )
773777 globals = _StringifierDict (
774778 namespace ,
775- globals = annotate . __globals__ ,
779+ globals = annotate_globals ,
776780 owner = owner ,
777781 is_class = is_class ,
778782 format = format ,
@@ -784,8 +788,8 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
784788 annotate .__code__ ,
785789 globals ,
786790 closure = closure ,
787- argdefs = annotate . __defaults__ ,
788- kwdefaults = annotate . __kwdefaults__ ,
791+ argdefs = annotate_defaults ,
792+ kwdefaults = annotate_kwdefaults ,
789793 )
790794 try :
791795 result = func (Format .VALUE_WITH_FAKE_GLOBALS )
@@ -802,7 +806,7 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
802806 # a value in certain cases where an exception gets raised during evaluation.
803807 globals = _StringifierDict (
804808 {},
805- globals = annotate . __globals__ ,
809+ globals = annotate_globals ,
806810 owner = owner ,
807811 is_class = is_class ,
808812 format = format ,
@@ -814,8 +818,8 @@ def call_annotate_function(annotate, format, *, owner=None, _is_evaluate=False):
814818 annotate .__code__ ,
815819 globals ,
816820 closure = closure ,
817- argdefs = annotate . __defaults__ ,
818- kwdefaults = annotate . __kwdefaults__ ,
821+ argdefs = annotate_defaults ,
822+ kwdefaults = annotate_kwdefaults ,
819823 )
820824 result = func (Format .VALUE_WITH_FAKE_GLOBALS )
821825 globals .transmogrify (cell_dict )
0 commit comments