Skip to content

Commit c8f9863

Browse files
ilevkivskyigvanrossum
authored andcommitted
Kill __forward_frame__ (#327)
1 parent 98bd328 commit c8f9863

File tree

2 files changed

+4
-18
lines changed

2 files changed

+4
-18
lines changed

python2/typing.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,7 @@ class _ForwardRef(_TypingBase):
190190
"""Wrapper to hold a forward reference."""
191191

192192
__slots__ = ('__forward_arg__', '__forward_code__',
193-
'__forward_evaluated__', '__forward_value__',
194-
'__forward_frame__')
193+
'__forward_evaluated__', '__forward_value__')
195194

196195
def __init__(self, arg):
197196
super(_ForwardRef, self).__init__(arg)
@@ -206,12 +205,6 @@ def __init__(self, arg):
206205
self.__forward_code__ = code
207206
self.__forward_evaluated__ = False
208207
self.__forward_value__ = None
209-
typing_globals = globals()
210-
frame = sys._getframe(1)
211-
while frame is not None and frame.f_globals is typing_globals:
212-
frame = frame.f_back
213-
assert frame is not None
214-
self.__forward_frame__ = frame
215208

216209
def _eval_type(self, globalns, localns):
217210
if not self.__forward_evaluated__:

src/typing.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,7 @@ class _ForwardRef(_TypingBase, _root=True):
201201
"""Wrapper to hold a forward reference."""
202202

203203
__slots__ = ('__forward_arg__', '__forward_code__',
204-
'__forward_evaluated__', '__forward_value__',
205-
'__forward_frame__')
204+
'__forward_evaluated__', '__forward_value__')
206205

207206
def __init__(self, arg):
208207
super().__init__(arg)
@@ -217,12 +216,6 @@ def __init__(self, arg):
217216
self.__forward_code__ = code
218217
self.__forward_evaluated__ = False
219218
self.__forward_value__ = None
220-
typing_globals = globals()
221-
frame = sys._getframe(1)
222-
while frame is not None and frame.f_globals is typing_globals:
223-
frame = frame.f_back
224-
assert frame is not None
225-
self.__forward_frame__ = frame
226219

227220
def _eval_type(self, globalns, localns):
228221
if not self.__forward_evaluated__:
@@ -242,10 +235,10 @@ def __eq__(self, other):
242235
if not isinstance(other, _ForwardRef):
243236
return NotImplemented
244237
return (self.__forward_arg__ == other.__forward_arg__ and
245-
self.__forward_frame__ == other.__forward_frame__)
238+
self.__forward_value__ == other.__forward_value__)
246239

247240
def __hash__(self):
248-
return hash((self.__forward_arg__, self.__forward_frame__))
241+
return hash((self.__forward_arg__, self.__forward_value__))
249242

250243
def __instancecheck__(self, obj):
251244
raise TypeError("Forward references cannot be used with isinstance().")

0 commit comments

Comments
 (0)