{
cell value_;
- cell value() const { return value_; }
- Type *untagged() const { return (Type *)(UNTAG(value_)); }
-
cell type() const {
cell tag = TAG(value_);
if(tag == OBJECT_TYPE)
- return untagged()->h.hi_tag();
+ return ((object *)UNTAG(value_))->h.hi_tag();
else
return tag;
}
return type_p(Type::type_number);
}
- Type *untag_check(factor_vm *parent) const {
- if(!type_p())
- parent->type_error(Type::type_number,value_);
- return untagged();
- }
-
- explicit tagged(cell tagged) : value_(tagged) {
+ cell value() const {
#ifdef FACTOR_DEBUG
assert(type_p());
#endif
+ return value_;
}
-
- explicit tagged(Type *untagged) : value_(factor::tag(untagged)) {
+ Type *untagged() const {
#ifdef FACTOR_DEBUG
assert(type_p());
#endif
+ return (Type *)(UNTAG(value_));
}
+ Type *untag_check(factor_vm *parent) const {
+ if(!type_p())
+ parent->type_error(Type::type_number,value_);
+ return untagged();
+ }
+
+ explicit tagged(cell tagged) : value_(tagged) {}
+ explicit tagged(Type *untagged) : value_(factor::tag(untagged)) {}
+
Type *operator->() const { return untagged(); }
cell *operator&() const { return &value_; }