term_t heap_float(heap_t *hp, double value) { float_value_t *f; int gap = sizeof(*f); f = (float_value_t *)heap_alloc(hp, gap); f->value = value; return tag_float(f); }
value& value::operator=(float val) { if(!tag_) set(tag_float(val)); else switch(tag_->get_type()) { case tag_type::Float: static_cast<tag_float&>(*tag_).set(val); break; case tag_type::Double: static_cast<tag_double&>(*tag_).set(val); break; default: throw std::bad_cast(); } return *this; }
value_initializer::value_initializer(float val) : value(tag_float(val)) {}
tag_value& tag_value::operator=(float x) { *this = tag_float(x); return *this; }