[pypy-commit] lang-smalltalk storage: Removed obsolete source file.

anton_gulenko noreply at buildbot.pypy.org
Wed May 7 21:16:10 CEST 2014


Author: Anton Gulenko <anton.gulenko at googlemail.com>
Branch: storage
Changeset: r798:8496143eb9ae
Date: 2014-05-05 14:25 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/8496143eb9ae/

Log:	Removed obsolete source file.

diff --git a/spyvm/strategies.py b/spyvm/strategies.py
deleted file mode 100644
--- a/spyvm/strategies.py
+++ /dev/null
@@ -1,259 +0,0 @@
-
-import sys, math
-from spyvm import model, shadow, constants
-from rpython.rlib import longlong2float, rarithmetic
-from rpython.rlib.rstruct.runpack import runpack
-from rpython.rtyper.lltypesystem import rffi, lltype
-from rpython.rlib.objectmodel import import_from_mixin
-from rpython.rlib.rfloat import string_to_float
-
-class AbstractStorageStrategy(shadow.AbstractShadow):
-    _immutable_fields_ = []
-    _attrs_ = []
-    _settled_ = True
-    strategy_tag = 'abstract'
-    needs_objspace = False
-    
-    def set_initial_storage(self, space, w_obj, size):
-        raise NotImplementedError("Abstract base class")
-    def set_storage_for_list(self, space, w_obj, collection):
-        raise NotImplementedError("Abstract base class")
-    def set_storage_copied_from(self, space, w_obj, w_source_obj, reuse_storage=False):
-        raise NotImplementedError("Abstract base class")
-    
-    def store(self, space, w_obj, n0, w_val):
-        if self.can_contain(space, w_val):
-            return self.do_store(space, w_obj, n0, w_val)
-        new_strategy = self.generelized_strategy_for(space, w_val)
-        return w_obj.store_with_new_strategy(space, new_strategy, n0, w_val)
-    
-    def generelized_strategy_for(self, space, w_val):
-        raise NotImplementedError("Abstract base class")
-    def can_contain(self, space, w_val):
-        raise NotImplementedError("Abstract base class")
-    def fetch(self, space, w_obj, n0):
-        raise NotImplementedError("Abstract base class")
-    def do_store(self, space, w_obj, n0, w_val):
-        raise NotImplementedError("Abstract base class")
-
-class AbstractListStorageStrategy(AbstractStorageStrategy):
-    strategy_tag = 'abstract-list'
-    
-    def storage(self, w_obj):
-        return w_obj.list_storage
-    def set_initial_storage(self, space, w_obj, size):
-        w_obj.list_storage = self.initial_storage(space, size)
-    def set_storage_for_list(self, space, w_obj, collection):
-        w_obj.list_storage = self.storage_for_list(space, collection)
-    def set_storage_copied_from(self, space, w_obj, w_source_obj, reuse_storage=False):
-        w_obj.list_storage = self.copy_storage_from(space, w_source_obj, reuse_storage)
-    
-    def initial_storage(self, space, size):
-        raise NotImplementedError("Abstract base class")
-    def storage_for_list(self, space, collection):
-        raise NotImplementedError("Abstract base class")
-    def copy_storage_from(self, space, w_obj, reuse_storage):
-        old_strategy = w_obj.strategy
-        if old_strategy == self and reuse_storage:
-            return self.storage(w_obj)
-        else:
-            # This can be overridden and optimized (reuse_storage flag, less temporary storage)
-            return self.storage_for_list(space, w_obj.fetch_all(space))
-        
-class AbstractIntStorageStrategy(AbstractStorageStrategy):
-    strategy_tag = 'abstract-int'
-    
-    def storage(self, w_obj):
-        return w_obj.int_storage
-    def set_initial_storage(self, space, w_obj, size):
-        w_obj.int_storage = self.initial_storage(space, size)
-    def set_storage_for_list(self, space, w_obj, collection):
-        w_obj.int_storage = self.storage_for_list(space, collection)
-    def set_storage_copied_from(self, space, w_obj, w_source_obj, reuse_storage=False):
-        w_obj.int_storage = self.copy_storage_from(space, w_source_obj, reuse_storage)
-    
-    def generelized_strategy_for(self, space, w_val):
-        return ListStorageStrategy.singleton
-    def initial_storage(self, space, size):
-        raise NotImplementedError("Abstract base class")
-    def storage_for_list(self, space, collection):
-        raise NotImplementedError("Abstract base class")
-    def copy_storage_from(self, space, w_obj, reuse_storage):
-        old_strategy = w_obj.strategy
-        if old_strategy == self and reuse_storage:
-            return self.storage(w_obj)
-        else:
-            # This can be overridden and optimized (reuse_storage flag, less temporary storage)
-            return self.storage_for_list(space, w_obj.fetch_all(space))
-
-class SingletonMeta(type):
-    def __new__(cls, name, bases, dct):
-        result = type.__new__(cls, name, bases, dct)
-        result.singleton = result()
-        return result
-
-# this is the typical "initial" storage strategy, for when every slot
-# in an object is still nil. No storage is allocated.
-class AllNilStorageStrategy(AbstractStorageStrategy):
-    __metaclass__ = SingletonMeta
-    strategy_tag = 'allnil'
-    
-    def can_contain(self, space, w_obj):
-        return w_obj == space.w_nil
-    def fetch(self, space, w_obj, n0):
-        return space.w_nil
-    def do_store(self, space, w_obj, n0, w_val):
-        pass
-        
-    def generelized_strategy_for(self, space, w_val):
-        return find_strategy_for_objects(space, [w_val])
-    def set_initial_storage(self, space, w_obj, size):
-        pass
-    def set_storage_for_list(self, space, w_obj, collection):
-        pass
-    def set_storage_copied_from(self, space, w_obj, w_source_obj, reuse_storage=False):
-        pass
-
-# This is the regular storage strategy that does not result in any
-# optimizations but can handle every case. Applicable for both
-# fixed-sized and var-sized objects.
-class ListStorageStrategy(AbstractListStorageStrategy):
-    __metaclass__ = SingletonMeta
-    strategy_tag = 'list'
-    
-    def can_contain(self, space, w_val):
-        return True
-    def fetch(self, space, w_obj, n0):
-        return self.storage(w_obj)[n0]
-    def do_store(self, space, w_obj, n0, w_val):
-        # TODO enable generalization by maintaining a counter of elements that are nil.
-        self.storage(w_obj)[n0] = w_val
-    def initial_storage(self, space, size):
-        return [space.w_nil] * size
-    def storage_for_list(self, space, collection):
-        return [x for x in collection]
-    def copy_storage_from(self, space, w_obj, reuse_storage=False):
-        length = w_obj.basic_size()
-        return [w_obj.strategy.fetch(space, w_obj, i) for i in range(length)]
-
-class AbstractValueOrNilStorageStrategy(AbstractIntStorageStrategy):
-    needs_objspace = True
-    strategy_tag = 'abstract-valueOrNil'
-    # TODO -- use another value... something like max_float?
-    nil_value = runpack("d", "\x10\x00\x00\x00\x00\x00\xf8\x7f")
-    nil_value_longlong = longlong2float.float2longlong(nil_value)
-    
-    def is_nil_value(self, val):
-        return longlong2float.float2longlong(val) == self.nil_value_longlong
-    
-    def can_contain(self, space, w_val):
-        return w_val == space.w_nil or \
-                (isinstance(w_val, self.wrapper_class) \
-                and not self.is_nil_value(self.unwrap(space, w_val)))
-    
-    def fetch(self, space, w_obj, n0):
-        val = self.storage(w_obj)[n0]
-        if self.is_nil_value(val):
-            return space.w_nil
-        else:
-            return self.wrap(space, val)
-        
-    def do_store(self, space, w_obj, n0, w_val):
-        store = self.storage(w_obj)
-        if w_val == space.w_nil:
-            store[n0] = self.nil_value
-        else:
-            store[n0] = self.unwrap(space, w_val)
-    
-    def initial_storage(self, space, size):
-        return [self.nil_value] * size
-        
-    def storage_for_list(self, space, collection):
-        length = len(collection)
-        store = self.initial_storage(space, length)
-        for i in range(length):
-            if collection[i] != space.w_nil:
-                store[i] = self.unwrap(space, collection[i])
-        return store
-
-def _int_to_float(int_val):
-    return longlong2float.longlong2float(rffi.cast(lltype.SignedLongLong, int_val))
-
-class SmallIntegerOrNilStorageStrategy(AbstractValueOrNilStorageStrategy):
-    __metaclass__ = SingletonMeta
-    strategy_tag = 'smallint-orNil'
-    wrapper_class = model.W_SmallInteger
-    
-    def wrap(self, space, val):
-        int_val = rarithmetic.intmask(longlong2float.float2longlong(val))
-        return space.wrap_int(int_val)
-    def unwrap(self, space, w_val):
-        assert isinstance(w_val, model.W_SmallInteger)
-        int_val = space.unwrap_int(w_val)
-        return _int_to_float(int_val)
-
-class FloatOrNilStorageStrategy(AbstractValueOrNilStorageStrategy):
-    __metaclass__ = SingletonMeta
-    strategy_tag = 'float-orNil'
-    wrapper_class = model.W_Float
-    
-    def wrap(self, space, val):
-        return space.wrap_float(val)
-    def unwrap(self, space, w_val):
-        assert isinstance(w_val, model.W_Float)
-        return space.unwrap_float(w_val)
-
-def find_strategy_for_objects(space, vars):
-    specialized_strategies = 3
-    all_nil_can_handle = True
-    small_int_can_handle = True
-    float_can_handle = True
-    for w_obj in vars:
-        if all_nil_can_handle and not AllNilStorageStrategy.singleton.can_contain(space, w_obj):
-            all_nil_can_handle = False
-            specialized_strategies = specialized_strategies - 1
-        if small_int_can_handle and not SmallIntegerOrNilStorageStrategy.singleton.can_contain(space, w_obj):
-            small_int_can_handle = False
-            specialized_strategies = specialized_strategies - 1
-        if float_can_handle and not FloatOrNilStorageStrategy.singleton.can_contain(space, w_obj):
-            float_can_handle = False
-            specialized_strategies = specialized_strategies - 1
-        
-        if specialized_strategies <= 0:
-            return ListStorageStrategy.singleton
-    
-    if all_nil_can_handle:
-        return AllNilStorageStrategy.singleton
-    if small_int_can_handle:
-        return SmallIntegerOrNilStorageStrategy.singleton
-    if float_can_handle:
-        return FloatOrNilStorageStrategy.singleton
-    
-    # If this happens, please look for a bug in the code above.
-    assert False, "No strategy could be found for list..."
-
-def empty_strategy(s_containing_class):
-    if s_containing_class is None:
-        # This is a weird and rare special case for w_nil
-        return ListStorageStrategy.singleton
-    if not s_containing_class.isvariable():
-        return ListStorageStrategy.singleton
-    
-    # A newly allocated object contains only nils.
-    return AllNilStorageStrategy.singleton
-
-def strategy_for_list(s_containing_class, vars):
-    if s_containing_class is None:
-        # This is a weird and rare special case for w_nil
-        return ListStorageStrategy.singleton
-    try:
-        is_variable = s_containing_class.isvariable()
-    except AttributeError:
-        # TODO - This happens during bootstrapping phase, when filling in generic objects.
-        # Ths class object shadows are not yet synchronized.
-        return ListStorageStrategy.singleton
-    
-    if is_variable:
-        return find_strategy_for_objects(s_containing_class.space, vars)
-    else:
-        return ListStorageStrategy.singleton


More information about the pypy-commit mailing list