Skip to content

Commit 0f2f45d

Browse files
committed
specialize deftypes for ints and floats
1 parent d243537 commit 0f2f45d

1 file changed

Lines changed: 26 additions & 3 deletions

File tree

pixie/vm/custom_types.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import rpython.rlib.jit as jit
33
from rpython.rlib.rarithmetic import r_uint
44
from pixie.vm.code import as_var
5-
from pixie.vm.numbers import Integer
5+
from pixie.vm.numbers import Integer, Float
66
from pixie.vm.keyword import Keyword
77
import pixie.vm.rt as rt
88

@@ -110,6 +110,9 @@ def _new__args(args):
110110
val = args[x + 1]
111111
if isinstance(val, Integer):
112112
val = IntegerMutableCell(val.int_val())
113+
elif isinstance(val, Float):
114+
val = FloatMutableCell(val.float_val())
115+
113116
arr[x] = val
114117
return CustomTypeInstance(tp, arr)
115118

@@ -146,9 +149,29 @@ def __init__(self, int_val):
146149
def set_mutable_cell_value(self, ct, fields, nm, idx, value):
147150
if not isinstance(value, Integer):
148151
ct.set_mutable(nm)
149-
fields[idx] = value
152+
if isinstance(value, Float):
153+
fields[idx] = FloatMutableCell(value.float_val())
154+
else:
155+
fields[idx] = value
150156
else:
151157
self._mutable_integer_val = value.int_val()
152158

153159
def get_mutable_cell_value(self):
154-
return rt.wrap(self._mutable_integer_val)
160+
return rt.wrap(self._mutable_integer_val)
161+
162+
class FloatMutableCell(AbstractMutableCell):
163+
def __init__(self, float_val):
164+
self._mutable_float_val = float_val
165+
166+
def set_mutable_cell_value(self, ct, fields, nm, idx, value):
167+
if not isinstance(value, Float):
168+
ct.set_mutable(nm)
169+
if isinstance(value, Integer):
170+
fields[idx] = IntegerMutableCell(value.int_val())
171+
else:
172+
fields[idx] = value
173+
else:
174+
self._mutable_float_val = value.float_val()
175+
176+
def get_mutable_cell_value(self):
177+
return rt.wrap(self._mutable_float_val)

0 commit comments

Comments
 (0)