]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/tagged.hpp
webapps.wiki: adding search bar
[factor.git] / vm / tagged.hpp
index 04a25486b964330c8cbf4b4e25c6298b344e4500..0af2130fa010732bd600e27ef1057f03b4d0e0c8 100644 (file)
@@ -13,50 +13,36 @@ template <typename Type> struct tagged {
 
   cell type() const { return TAG(value_); }
 
-  bool type_p(cell type_) const { return type() == type_; }
-
   bool type_p() const {
     if (Type::type_number == TYPE_COUNT)
       return true;
-    else
-      return type_p(Type::type_number);
+    return type() == Type::type_number;
   }
 
   cell value() const {
-#ifdef FACTOR_DEBUG
     FACTOR_ASSERT(type_p());
-#endif
     return value_;
   }
 
   Type* untagged() const {
-#ifdef FACTOR_DEBUG
     FACTOR_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_; }
-
-  const tagged<Type>& operator=(const Type* x) {
-    value_ = tag(x);
-    return *this;
+  void set_value(const cell ptr) {
+    value_ = ptr;
   }
-  const tagged<Type>& operator=(const cell& x) {
-    value_ = x;
-    return *this;
+
+  void set_untagged(const Type *untagged) {
+    set_value(tag(untagged));
   }
 
+  Type* operator->() const { return untagged(); }
+  cell* operator&() const { return &value(); }
+
   bool operator==(const tagged<Type>& x) { return value_ == x.value_; }
   bool operator!=(const tagged<Type>& x) { return value_ != x.value_; }
 
@@ -65,10 +51,6 @@ template <typename Type> struct tagged {
   }
 };
 
-template <typename Type> Type* factor_vm::untag_check(cell value) {
-  return tagged<Type>(value).untag_check(this);
-}
-
 template <typename Type> Type* untag(cell value) {
   return tagged<Type>(value).untagged();
 }