예제 #1
0
        def read_location(self, obj):
            # assert isinstance(obj, Object)

            if self.is_set(obj):
                return Integer(getattr(obj, "_primField" + str(field_idx)))
            else:
                return nilObject
예제 #2
0
파일: universe.py 프로젝트: QDucasse/PySOM
    def new_integer(self, value):
        # Allocate a new integer and set its class to be the integer class
        result = Integer(self._nilObject, value)
        result.set_class(self._integerClass)

        # Return the freshly allocated integer
        return result
예제 #3
0
    def test_empty_to_int(self):
        arr = Array.from_size(1)
        self.assertIsInstance(arr._strategy, _EmptyStrategy)

        int_obj = Integer(42)

        arr.set_indexable_field(0, int_obj)
        self.assertIsInstance(arr._strategy, _LongStrategy)
        self.assertEqual(42, arr.get_indexable_field(0).get_embedded_integer())
예제 #4
0
    def _transition_to_object_array(self, array, idx, value):
        store = self._unerase(array._storage)
        new_store = [None] * len(store)
        for i, v in enumerate(store):
            new_store[i] = Integer(v)

        new_store[idx] = value
        array._storage = _ObjectStrategy.new_storage_with_values(new_store)
        array._strategy = _obj_strategy
예제 #5
0
    def test_copy_and_extend_partially_empty(self):
        arr = Array.from_size(3)

        int_obj = Integer(42)
        arr.set_indexable_field(0, int_obj)
        self.assertIsInstance(arr._strategy, _PartiallyEmptyStrategy)
        new_arr = arr.copy_and_extend_with(int_obj)

        self.assertIsNot(arr, new_arr)
        self.assertEqual(4, new_arr.get_number_of_indexable_fields())
        self.assertIsInstance(new_arr._strategy, _PartiallyEmptyStrategy)
예제 #6
0
    def do_layout_mate_semantics(self, frame, obj, value):
        assert obj is not None

        environment = frame.get_meta_object_environment(
        ) or obj.get_meta_object_environment()

        # No esta definido o es Nil
        if environment is None or not isinstance(environment, Object):
            return None

        method = self._lookup_node.lookup_meta_invokable(environment)
        if method is None:
            # El mate enviroment no define el methodo correspondiente a este nodo
            return None

        return method.invoke(obj,
                             [Integer(self._som_node.field_idx() + 1), value],
                             True)
예제 #7
0
 def _set_remaining_with_block_as_long(array, block, size, next_i, storage):
     block_method = block.get_method()
     while next_i < size:
         put_all_long_driver.jit_merge_point(block_method = block_method)
         result = block_method.invoke(block, [])
         if isinstance(result, Integer):
             storage[next_i] = result.get_embedded_integer()
         else:
             # something else, so, let's go to the object strategy
             new_storage = [None] * size
             for i in range(0, next_i + 1):
                 new_storage[i] = Integer(storage[i])
             _ArrayStrategy._set_remaining_with_block_as_obj(array, block,
                                                             size,
                                                             next_i + 1,
                                                             new_storage)
             return
         next_i += 1
     array._strategy = _long_strategy
     array._storage  = _long_strategy._erase(storage)
예제 #8
0
 def new_integer(value):
     assert isinstance(value, int)
     return Integer(value)
예제 #9
0
 def get_meta_args(self, frame):
     return [Integer(self._som_node.field_idx() + 1)]
예제 #10
0
 def setUp(self):
     self.big_integer = BigInteger(Object(None), 30000000000)
     self.integer = Integer(Object(None), 3)
예제 #11
0
 def get_meta_args(self, frame):
     return [Integer(self._som_node.frame_idx() + 1), Context(frame)]
예제 #12
0
 def get_meta_args(self, frame):
     value = self._som_node.get_expr().execute(frame)
     return [Integer(self._som_node.frame_idx() + 1), Context(frame), value]
예제 #13
0
 def _erase(self, anInt):
     assert isinstance(anInt, int)
     return self.__erase(Integer(anInt))
예제 #14
0
 def as_arguments_array(self, storage):
     store = self._unerase(storage)
     return [Integer(v) for v in store]
예제 #15
0
 def get_idx(self, storage, idx):
     store = self._unerase(storage)
     assert isinstance(store, list)
     assert isinstance(store[idx], int)
     return Integer(store[idx])
예제 #16
0
 def read_location(self, obj):
     if self.is_set(obj):
         return Integer(obj._primFields[self._ext_idx])
     else:
         return nilObject