PRIMITIVE(bignum_log2);
PRIMITIVE(byte_array_to_bignum);
-inline static cell allot_integer(fixnum x)
+inline cell factorvm::allot_integer(fixnum x)
{
if(x < fixnum_min || x > fixnum_max)
return tag<bignum>(fixnum_to_bignum(x));
return tag_fixnum(x);
}
-inline static cell allot_cell(cell x)
+inline cell allot_integer(fixnum x)
+{
+ return vm->allot_integer(x);
+}
+
+inline cell factorvm::allot_cell(cell x)
{
if(x > (cell)fixnum_max)
return tag<bignum>(cell_to_bignum(x));
return tag_fixnum(x);
}
+inline cell allot_cell(cell x)
+{
+ return vm->allot_cell(x);
+}
+
cell unbox_array_size();
inline static double untag_float(cell tagged)
return untag_check<boxed_float>(tagged)->n;
}
-inline static cell allot_float(double n)
+inline cell factorvm::allot_float(double n)
{
boxed_float *flo = allot<boxed_float>(sizeof(boxed_float));
flo->n = n;
return tag(flo);
}
+inline cell allot_float(double n)
+{
+ return vm->allot_float(n);
+}
+
inline static fixnum float_to_fixnum(cell tagged)
{
return (fixnum)untag_float(tagged);
}
-inline static bignum *float_to_bignum(cell tagged)
+inline bignum *factorvm::float_to_bignum(cell tagged)
{
return double_to_bignum(untag_float(tagged));
}
-inline static double fixnum_to_float(cell tagged)
+inline bignum *float_to_bignum(cell tagged)
+{
+ return vm->float_to_bignum(tagged);
+}
+
+inline double fixnum_to_float(cell tagged)
{
return (double)untag_fixnum(tagged);
}
-inline static double bignum_to_float(cell tagged)
+inline double factorvm::bignum_to_float(cell tagged)
{
return bignum_to_double(untag<bignum>(tagged));
}
+inline double bignum_to_float(cell tagged)
+{
+ return vm->bignum_to_float(tagged);
+}
+
PRIMITIVE(fixnum_to_float);
PRIMITIVE(bignum_to_float);
PRIMITIVE(str_to_float);
cell allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_);
inline void vmprim_resize_array();
inline void set_array_nth(array *array, cell slot, cell value);
- // next method here:
//strings
cell string_nth(string* str, cell index);
void overflow_fixnum_add(fixnum x, fixnum y);
void overflow_fixnum_subtract(fixnum x, fixnum y);
void overflow_fixnum_multiply(fixnum x, fixnum y);
+ inline cell allot_integer(fixnum x);
+ inline cell allot_cell(cell x);
+ inline cell allot_float(double n);
+ inline bignum *float_to_bignum(cell tagged);
+ inline double bignum_to_float(cell tagged);
+ // next method here:
//io
void init_c_io();