Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# Does not work: if `self.i` is used in the code, `i` will appear here
# if func_code is not None:
# for name in func_code.co_names:
# try:
# eval(name, _evaldict)
# except NameError:
# raise UndefinedSymbolError("Symbol `%s` does not seem to be defined yet. Make sure you apply "
# "`compile_fun` *after* all required symbols have been defined." % name)
if recurse and func_closure is not None:
# recurse-compile
for name, cell in zip(func_code.co_freevars, func_closure):
if name in except_names:
continue
if name not in _evaldict:
raise UndefinedSymbolError("Symbol %s does not seem to be defined yet. Make sure you apply "
"`compile_fun` *after* all required symbols have been defined." % name)
try:
value = cell.cell_contents
except ValueError:
# empty cell
continue
else:
# non-empty cell
try:
# note : not sure the compilation will be made in the appropriate order of dependencies...
# if not, users will have to do it manually
_evaldict[name] = compile_fun_manually(value,
recurse=recurse, except_names=except_names,
_evaldict=_evaldict)
except (UnsupportedForCompilation, SourceUnavailable):
pass