Merge branch 'development' of https://github.com/Annihilator708/Sebi-Machine into development

This commit is contained in:
annihilator708 2018-05-23 19:35:17 +02:00
commit b7b40fdcbc

View File

@ -3,6 +3,7 @@
""" """
IO stuff. IO stuff.
""" """
import copy
import inspect import inspect
import os import os
@ -42,13 +43,20 @@ def in_here(first_path_bit: str, *path_bits: str, stack_depth: int=0) -> str:
raise RuntimeError('Could not find a stack record. Interpreter has ' raise RuntimeError('Could not find a stack record. Interpreter has '
'been shot.') 'been shot.')
else: else:
module = inspect.getmodule(frame[0]) module = inspect.getmodule(frame[0])
assert hasattr(module, '__file__'), 'No `__file__\' attr, welp.' assert hasattr(module, '__file__'), 'No `__file__\' attr, welp.'
# https://docs.python.org/3/library/inspect.html#the-interpreter-stack
# If Python caches strings rather than copying when we move them
# around or modify them, then this may cause a referential cycle which
# will consume more memory and stop the garbage collection system
# from working correctly. Best thing to do here is deepcopy anything
# we need and prevent this occuring. Del the references to allow them
# to be freed.
file = module.__file__ file = module.__file__
file = copy.deepcopy(file)
del module, frame
dir_name = os.path.dirname(file) dir_name = os.path.dirname(file)
abs_dir_name = os.path.abspath(dir_name) abs_dir_name = os.path.abspath(dir_name)
pathish = os.path.join(abs_dir_name, first_path_bit, *path_bits) pathish = os.path.join(abs_dir_name, first_path_bit, *path_bits)
return pathish return pathish