22import rpython .rlib .jit as jit
33from rpython .rlib .rarithmetic import r_uint
44from pixie .vm .code import as_var
5- from pixie .vm .numbers import Integer
5+ from pixie .vm .numbers import Integer , Float
66from pixie .vm .keyword import Keyword
77import 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