From: Mark Florisson Date: Tue, 18 Jan 2011 19:55:55 +0000 (+0100) Subject: Debugger: fix is_initialized to avoid segfaults with cy exec X-Git-Tag: 0.14.1rc2~10 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=6689e031f65579bde60bb55c7b676c9795ad88c5;p=cython.git Debugger: fix is_initialized to avoid segfaults with cy exec --- diff --git a/Cython/Debugger/libcython.py b/Cython/Debugger/libcython.py index 606fd512..0aa4bcfa 100644 --- a/Cython/Debugger/libcython.py +++ b/Cython/Debugger/libcython.py @@ -389,20 +389,19 @@ class CythonBase(object): value) def is_initialized(self, cython_func, local_name): - islocal = local_name in cython_func.locals - if islocal: - cyvar = cython_func.locals[local_name] - if '->' in cyvar.cname: - # Closed over free variable - if self.get_cython_lineno() >= cython_func.lineno + 1: - if cyvar.type == PythonObject: - return long(gdb.parse_and_eval(cyvar.cname)) - return True - return False - + cyvar = cython_func.locals[local_name] cur_lineno = self.get_cython_lineno() - return (local_name in cython_func.arguments or - (islocal and cur_lineno > cyvar.lineno)) + + if '->' in cyvar.cname: + # Closed over free variable + if cur_lineno > cython_func.lineno: + if cyvar.type == PythonObject: + return long(gdb.parse_and_eval(cyvar.cname)) + return True + return False + + return cur_lineno > cyvar.lineno + class SourceFileDescriptor(object): def __init__(self, filename, lexer, formatter=None):