/pypy/interpreter/miscutils.py
https://github.com/mesalock-linux/mesapy · Python · 70 lines · 64 code · 3 blank · 3 comment · 0 complexity · 080e817f2b243f095939dfb1ade4e08b MD5 · raw file
- """
- Miscellaneous utilities.
- """
- from rpython.rlib.listsort import make_timsort_class
- from rpython.rlib.objectmodel import not_rpython
- class ThreadLocals:
- """Pseudo thread-local storage, for 'space.threadlocals'.
- This is not really thread-local at all; the intention is that the PyPy
- implementation of the 'thread' module knows how to provide a real
- implementation for this feature, and patches 'space.threadlocals' when
- 'thread' is initialized.
- """
- _immutable_fields_ = ['_value?']
- _value = None
- def get_ec(self):
- return self._value
- def enter_thread(self, space):
- self._value = space.createexecutioncontext()
- def try_enter_thread(self, space):
- return False
- def signals_enabled(self):
- return True
- def enable_signals(self, space):
- pass
- def disable_signals(self, space):
- pass
- def getallvalues(self):
- return {0: self._value}
- def _cleanup_(self):
- # should still be unfilled at this point during translation.
- # but in some corner cases it is not... unsure why
- self._value = None
- @not_rpython
- def make_weak_value_dictionary(space, keytype, valuetype):
- if space.config.translation.rweakref:
- from rpython.rlib.rweakref import RWeakValueDictionary
- return RWeakValueDictionary(keytype, valuetype)
- else:
- class FakeWeakValueDict(object):
- def __init__(self):
- self._dict = {}
- def get(self, key):
- return self._dict.get(key, None)
- def set(self, key, value):
- self._dict[key] = value
- return FakeWeakValueDict()
- _StringBaseTimSort = make_timsort_class()
- class StringSort(_StringBaseTimSort):
- def lt(self, a, b):
- return a < b
- def string_sort(lst):
- """Sort a (resizable) list of strings."""
- sorter = StringSort(lst, len(lst))
- sorter.sort()