]> git.ipfire.org Git - people/ms/gcc.git/commitdiff
gccrs: refactor monomoprhized_clone to not use virtual dispatch
authorPhilip Herron <herron.philip@googlemail.com>
Fri, 10 Mar 2023 16:31:14 +0000 (16:31 +0000)
committerPhilip Herron <philip.herron@embecosm.com>
Fri, 17 Mar 2023 10:34:36 +0000 (10:34 +0000)
gcc/rust/ChangeLog:

* typecheck/rust-tyty.cc (BaseType::monomorphized_clone): new impl
(InferType::monomorphized_clone): remove
(ErrorType::monomorphized_clone): likewise
(ADTType::monomorphized_clone): likewise
(TupleType::monomorphized_clone): likewise
(FnType::monomorphized_clone): likewise
(FnPtr::monomorphized_clone): likewise
(ClosureType::monomorphized_clone): likewise
(ArrayType::clone): likewise
(ArrayType::get_var_element_type): likewise
(ArrayType::monomorphized_clone): likewise
(SliceType::clone): likewise
(SliceType::get_var_element_type): likewise
(SliceType::monomorphized_clone): likewise
(BoolType::monomorphized_clone): likewise
(IntType::monomorphized_clone): likewise
(UintType::monomorphized_clone): likewise
(FloatType::monomorphized_clone): likewise
(USizeType::monomorphized_clone): likewise
(ISizeType::monomorphized_clone): likewise
(CharType::monomorphized_clone): likewise
(ReferenceType::clone): likewise
(ReferenceType::get_var_element_type): likewise
(ReferenceType::monomorphized_clone): likewise
(PointerType::clone): likewise
(PointerType::get_var_element_type): likewise
(PointerType::monomorphized_clone): likewise
(ParamType::monomorphized_clone): likewise
(StrType::monomorphized_clone): likewise
(NeverType::monomorphized_clone): likewise
(PlaceholderType::monomorphized_clone): likewise
(ProjectionType::monomorphized_clone): likewise
(DynamicObjectType::monomorphized_clone): likewise
* typecheck/rust-tyty.h: update header

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
gcc/rust/typecheck/rust-tyty.cc
gcc/rust/typecheck/rust-tyty.h

index dbd4b5c7ae4fcff19fc3010fc945deba43abef3a..90d227c577aba001f582a5182dad840da92c909d 100644 (file)
 
 #include "rust-substitution-mapper.h"
 #include "rust-hir-trait-reference.h"
-#include "rust-hir-type-bounds.h"
 #include "rust-hir-trait-resolve.h"
 #include "rust-tyty-cmp.h"
-#include "rust-type-util.h"
 
 #include "options.h"
 
@@ -572,6 +570,122 @@ BaseType::destructure () const
   return x;
 }
 
+BaseType *
+BaseType::monomorphized_clone () const
+{
+  const TyTy::BaseType *x = destructure ();
+  switch (x->get_kind ())
+    {
+    case PARAM:
+    case PROJECTION:
+    case PLACEHOLDER:
+    case INFER:
+    case BOOL:
+    case CHAR:
+    case INT:
+    case UINT:
+    case FLOAT:
+    case USIZE:
+    case ISIZE:
+    case NEVER:
+    case STR:
+    case DYNAMIC:
+    case CLOSURE:
+    case ERROR:
+      return x->clone ();
+
+      case ARRAY: {
+       const ArrayType &arr = *static_cast<const ArrayType *> (x);
+       TyVar elm = arr.get_var_element_type ().monomorphized_clone ();
+       return new ArrayType (arr.get_ref (), arr.get_ty_ref (), ident.locus,
+                             arr.get_capacity_expr (), elm,
+                             arr.get_combined_refs ());
+      }
+      break;
+
+      case SLICE: {
+       const SliceType &slice = *static_cast<const SliceType *> (x);
+       TyVar elm = slice.get_var_element_type ().monomorphized_clone ();
+       return new SliceType (slice.get_ref (), slice.get_ty_ref (),
+                             ident.locus, elm, slice.get_combined_refs ());
+      }
+      break;
+
+      case POINTER: {
+       const PointerType &ptr = *static_cast<const PointerType *> (x);
+       TyVar elm = ptr.get_var_element_type ().monomorphized_clone ();
+       return new PointerType (ptr.get_ref (), ptr.get_ty_ref (), elm,
+                               ptr.mutability (), ptr.get_combined_refs ());
+      }
+      break;
+
+      case REF: {
+       const ReferenceType &ref = *static_cast<const ReferenceType *> (x);
+       TyVar elm = ref.get_var_element_type ().monomorphized_clone ();
+       return new ReferenceType (ref.get_ref (), ref.get_ty_ref (), elm,
+                                 ref.mutability (), ref.get_combined_refs ());
+      }
+      break;
+
+      case TUPLE: {
+       const TupleType &tuple = *static_cast<const TupleType *> (x);
+       std::vector<TyVar> cloned_fields;
+       for (const auto &f : tuple.get_fields ())
+         cloned_fields.push_back (f.monomorphized_clone ());
+
+       return new TupleType (tuple.get_ref (), tuple.get_ty_ref (),
+                             tuple.get_ident ().locus, cloned_fields,
+                             tuple.get_combined_refs ());
+      }
+      break;
+
+      case FNDEF: {
+       const FnType &fn = *static_cast<const FnType *> (x);
+       std::vector<std::pair<HIR::Pattern *, BaseType *>> cloned_params;
+       for (auto &p : fn.get_params ())
+         cloned_params.push_back ({p.first, p.second->monomorphized_clone ()});
+
+       BaseType *retty = fn.get_return_type ()->monomorphized_clone ();
+       return new FnType (fn.get_ref (), fn.get_ty_ref (), fn.get_id (),
+                          fn.get_identifier (), fn.ident, fn.get_flags (),
+                          fn.get_abi (), std::move (cloned_params), retty,
+                          fn.clone_substs (), fn.get_combined_refs ());
+      }
+      break;
+
+      case FNPTR: {
+       const FnPtr &fn = *static_cast<const FnPtr *> (x);
+       std::vector<TyVar> cloned_params;
+       for (auto &p : fn.get_params ())
+         cloned_params.push_back (p.monomorphized_clone ());
+
+       TyVar retty = fn.get_var_return_type ().monomorphized_clone ();
+       return new FnPtr (fn.get_ref (), fn.get_ty_ref (), fn.ident.locus,
+                         std::move (cloned_params), retty,
+                         fn.get_combined_refs ());
+      }
+      break;
+
+      case ADT: {
+       const ADTType &adt = *static_cast<const ADTType *> (x);
+       std::vector<VariantDef *> cloned_variants;
+       for (auto &variant : adt.get_variants ())
+         cloned_variants.push_back (variant->monomorphized_clone ());
+
+       return new ADTType (adt.get_ref (), adt.get_ty_ref (),
+                           adt.get_identifier (), adt.ident,
+                           adt.get_adt_kind (), cloned_variants,
+                           adt.clone_substs (), adt.get_repr_options (),
+                           adt.get_used_arguments (),
+                           adt.get_combined_refs ());
+      }
+      break;
+    }
+
+  gcc_unreachable ();
+  return nullptr;
+}
+
 std::string
 BaseType::mappings_str () const
 {
@@ -820,12 +934,6 @@ InferType::clone () const
   return clone;
 }
 
-BaseType *
-InferType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 bool
 InferType::default_type (BaseType **type) const
 {
@@ -899,12 +1007,6 @@ ErrorType::clone () const
   return new ErrorType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-ErrorType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 // Struct Field type
 
 StructFieldType::StructFieldType (HirId ref, std::string name, BaseType *ty,
@@ -1314,19 +1416,6 @@ ADTType::clone () const
                      get_combined_refs ());
 }
 
-BaseType *
-ADTType::monomorphized_clone () const
-{
-  std::vector<VariantDef *> cloned_variants;
-  for (auto &variant : variants)
-    cloned_variants.push_back (variant->monomorphized_clone ());
-
-  return new ADTType (get_ref (), get_ty_ref (), identifier, ident,
-                     get_adt_kind (), cloned_variants, clone_substs (),
-                     get_repr_options (), used_arguments,
-                     get_combined_refs ());
-}
-
 static bool
 handle_substitions (SubstitutionArgumentMappings &subst_mappings,
                    StructFieldType *field)
@@ -1528,17 +1617,6 @@ TupleType::clone () const
                        cloned_fields, get_combined_refs ());
 }
 
-BaseType *
-TupleType::monomorphized_clone () const
-{
-  std::vector<TyVar> cloned_fields;
-  for (const auto &f : fields)
-    cloned_fields.push_back (f.monomorphized_clone ());
-
-  return new TupleType (get_ref (), get_ty_ref (), get_ident ().locus,
-                       cloned_fields, get_combined_refs ());
-}
-
 TupleType *
 TupleType::handle_substitions (SubstitutionArgumentMappings &mappings)
 {
@@ -1660,19 +1738,6 @@ FnType::clone () const
                     get_combined_refs ());
 }
 
-BaseType *
-FnType::monomorphized_clone () const
-{
-  std::vector<std::pair<HIR::Pattern *, BaseType *>> cloned_params;
-  for (auto &p : params)
-    cloned_params.push_back ({p.first, p.second->monomorphized_clone ()});
-
-  return new FnType (get_ref (), get_ty_ref (), get_id (), get_identifier (),
-                    ident, flags, abi, std::move (cloned_params),
-                    get_return_type ()->clone (), clone_substs (),
-                    get_combined_refs ());
-}
-
 FnType *
 FnType::handle_substitions (SubstitutionArgumentMappings &subst_mappings)
 {
@@ -1858,18 +1923,6 @@ FnPtr::clone () const
                    get_combined_refs ());
 }
 
-BaseType *
-FnPtr::monomorphized_clone () const
-{
-  std::vector<TyVar> cloned_params;
-  for (auto &p : params)
-    cloned_params.push_back (p.monomorphized_clone ());
-
-  return new FnPtr (get_ref (), get_ty_ref (), ident.locus,
-                   std::move (cloned_params), result_type,
-                   get_combined_refs ());
-}
-
 void
 ClosureType::accept_vis (TyVisitor &vis)
 {
@@ -1921,12 +1974,6 @@ ClosureType::clone () const
                          specified_bounds);
 }
 
-BaseType *
-ClosureType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 ClosureType *
 ClosureType::handle_substitions (SubstitutionArgumentMappings &mappings)
 {
@@ -2025,19 +2072,17 @@ ArrayType::get_element_type () const
   return element_type.get_tyty ();
 }
 
-BaseType *
-ArrayType::clone () const
+const TyVar &
+ArrayType::get_var_element_type () const
 {
-  return new ArrayType (get_ref (), get_ty_ref (), ident.locus, capacity_expr,
-                       element_type, get_combined_refs ());
+  return element_type;
 }
 
 BaseType *
-ArrayType::monomorphized_clone () const
+ArrayType::clone () const
 {
   return new ArrayType (get_ref (), get_ty_ref (), ident.locus, capacity_expr,
-                       element_type.monomorphized_clone (),
-                       get_combined_refs ());
+                       element_type, get_combined_refs ());
 }
 
 ArrayType *
@@ -2101,19 +2146,17 @@ SliceType::get_element_type () const
   return element_type.get_tyty ();
 }
 
-BaseType *
-SliceType::clone () const
+const TyVar &
+SliceType::get_var_element_type () const
 {
-  return new SliceType (get_ref (), get_ty_ref (), ident.locus,
-                       element_type.clone (), get_combined_refs ());
+  return element_type;
 }
 
 BaseType *
-SliceType::monomorphized_clone () const
+SliceType::clone () const
 {
   return new SliceType (get_ref (), get_ty_ref (), ident.locus,
-                       element_type.monomorphized_clone (),
-                       get_combined_refs ());
+                       element_type.clone (), get_combined_refs ());
 }
 
 SliceType *
@@ -2185,12 +2228,6 @@ BoolType::clone () const
   return new BoolType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-BoolType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 // IntType
 
 IntType::IntType (HirId ref, IntKind kind, std::set<HirId> refs)
@@ -2267,12 +2304,6 @@ IntType::clone () const
                      get_combined_refs ());
 }
 
-BaseType *
-IntType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 bool
 IntType::is_equal (const BaseType &other) const
 {
@@ -2360,12 +2391,6 @@ UintType::clone () const
                       get_combined_refs ());
 }
 
-BaseType *
-UintType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 bool
 UintType::is_equal (const BaseType &other) const
 {
@@ -2447,12 +2472,6 @@ FloatType::clone () const
                        get_combined_refs ());
 }
 
-BaseType *
-FloatType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 bool
 FloatType::is_equal (const BaseType &other) const
 {
@@ -2516,12 +2535,6 @@ USizeType::clone () const
   return new USizeType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-USizeType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 // ISizeType
 
 ISizeType::ISizeType (HirId ref, std::set<HirId> refs)
@@ -2575,12 +2588,6 @@ ISizeType::clone () const
   return new ISizeType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-ISizeType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 // Char Type
 
 CharType::CharType (HirId ref, std::set<HirId> refs)
@@ -2634,12 +2641,6 @@ CharType::clone () const
   return new CharType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-CharType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 // Reference Type
 
 ReferenceType::ReferenceType (HirId ref, TyVar base, Mutability mut,
@@ -2756,18 +2757,16 @@ ReferenceType::get_base () const
   return base.get_tyty ();
 }
 
-BaseType *
-ReferenceType::clone () const
+const TyVar &
+ReferenceType::get_var_element_type () const
 {
-  return new ReferenceType (get_ref (), get_ty_ref (), base, mutability (),
-                           get_combined_refs ());
+  return base;
 }
 
 BaseType *
-ReferenceType::monomorphized_clone () const
+ReferenceType::clone () const
 {
-  return new ReferenceType (get_ref (), get_ty_ref (),
-                           base.monomorphized_clone (), mutability (),
+  return new ReferenceType (get_ref (), get_ty_ref (), base, mutability (),
                            get_combined_refs ());
 }
 
@@ -2909,18 +2908,16 @@ PointerType::get_base () const
   return base.get_tyty ();
 }
 
-BaseType *
-PointerType::clone () const
+const TyVar &
+PointerType::get_var_element_type () const
 {
-  return new PointerType (get_ref (), get_ty_ref (), base, mutability (),
-                         get_combined_refs ());
+  return base;
 }
 
 BaseType *
-PointerType::monomorphized_clone () const
+PointerType::clone () const
 {
-  return new PointerType (get_ref (), get_ty_ref (),
-                         base.monomorphized_clone (), mutability (),
+  return new PointerType (get_ref (), get_ty_ref (), base, mutability (),
                          get_combined_refs ());
 }
 
@@ -3024,12 +3021,6 @@ ParamType::clone () const
                        get_combined_refs ());
 }
 
-BaseType *
-ParamType::monomorphized_clone () const
-{
-  return resolve ()->clone ();
-}
-
 std::string
 ParamType::get_symbol () const
 {
@@ -3151,12 +3142,6 @@ StrType::clone () const
   return new StrType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-StrType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 void
 StrType::accept_vis (TyVisitor &vis)
 {
@@ -3241,12 +3226,6 @@ NeverType::clone () const
   return new NeverType (get_ref (), get_ty_ref (), get_combined_refs ());
 }
 
-BaseType *
-NeverType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 // placeholder type
 
 PlaceholderType::PlaceholderType (std::string symbol, HirId ref,
@@ -3312,15 +3291,6 @@ PlaceholderType::clone () const
                              get_combined_refs ());
 }
 
-BaseType *
-PlaceholderType::monomorphized_clone () const
-{
-  if (can_resolve ())
-    return resolve ()->monomorphized_clone ();
-
-  return clone ();
-}
-
 void
 PlaceholderType::set_associated_type (HirId ref)
 {
@@ -3463,12 +3433,6 @@ ProjectionType::clone () const
                             get_combined_refs ());
 }
 
-BaseType *
-ProjectionType::monomorphized_clone () const
-{
-  return get ()->monomorphized_clone ();
-}
-
 ProjectionType *
 ProjectionType::handle_substitions (
   SubstitutionArgumentMappings &subst_mappings)
@@ -3588,12 +3552,6 @@ DynamicObjectType::clone () const
                                specified_bounds, get_combined_refs ());
 }
 
-BaseType *
-DynamicObjectType::monomorphized_clone () const
-{
-  return clone ();
-}
-
 std::string
 DynamicObjectType::get_name () const
 {
index 47f55163277d8ab0dc62f0e6ef52d10ee4c0189d..ce17c18fcabcd455775f6b643af12fd792ebe7df 100644 (file)
@@ -135,8 +135,9 @@ public:
    * releasing the memory of the returned ty. */
   virtual BaseType *clone () const = 0;
 
-  // TODO
-  virtual BaseType *monomorphized_clone () const = 0;
+  // monomorphized clone is a clone which destructures the types to get rid of
+  // generics
+  BaseType *monomorphized_clone () const;
 
   // get_combined_refs returns the chain of node refs involved in unification
   std::set<HirId> get_combined_refs () const;
@@ -212,7 +213,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   InferTypeKind get_infer_kind () const;
 
@@ -240,7 +240,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::string get_name () const override final;
 };
@@ -266,7 +265,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::string get_symbol () const;
 
@@ -346,7 +344,6 @@ public:
   BaseType *get_field (size_t index) const;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   const std::vector<TyVar> &get_fields () const;
 
@@ -574,7 +571,6 @@ public:
   }
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   bool needs_generic_substitutions () const override final
   {
@@ -733,7 +729,6 @@ public:
   BaseType *get_return_type () const { return type; }
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   bool needs_generic_substitutions () const override final
   {
@@ -751,6 +746,7 @@ public:
   handle_substitions (SubstitutionArgumentMappings &mappings) override final;
 
   ABI get_abi () const { return abi; }
+  uint8_t get_flags () const { return flags; }
 
 private:
   std::vector<std::pair<HIR::Pattern *, BaseType *>> params;
@@ -781,6 +777,7 @@ public:
   std::string get_name () const override final { return as_string (); }
 
   BaseType *get_return_type () const { return result_type.get_tyty (); }
+  const TyVar &get_var_return_type () const { return result_type; }
 
   size_t num_params () const { return params.size (); }
 
@@ -796,7 +793,6 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::vector<TyVar> &get_params () { return params; }
   const std::vector<TyVar> &get_params () const { return params; }
@@ -856,7 +852,6 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   bool needs_generic_substitutions () const override final
   {
@@ -918,9 +913,9 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *get_element_type () const;
+  const TyVar &get_var_element_type () const;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   HIR::Expr &get_capacity_expr () const { return capacity_expr; }
 
@@ -960,9 +955,9 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *get_element_type () const;
+  const TyVar &get_var_element_type () const;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   SliceType *handle_substitions (SubstitutionArgumentMappings &mappings);
 
@@ -986,7 +981,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 };
 
 class IntType : public BaseType
@@ -1017,7 +1011,6 @@ public:
   IntKind get_int_kind () const;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   bool is_equal (const BaseType &other) const override;
 
@@ -1054,7 +1047,6 @@ public:
   UintKind get_uint_kind () const;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   bool is_equal (const BaseType &other) const override;
 
@@ -1087,7 +1079,6 @@ public:
   FloatKind get_float_kind () const;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   bool is_equal (const BaseType &other) const override;
 
@@ -1111,7 +1102,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 };
 
 class ISizeType : public BaseType
@@ -1130,7 +1120,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 };
 
 class CharType : public BaseType
@@ -1148,7 +1137,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 };
 
 class StrType : public BaseType
@@ -1169,7 +1157,6 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 };
 
 class ReferenceType : public BaseType
@@ -1181,6 +1168,7 @@ public:
                 std::set<HirId> refs = std::set<HirId> ());
 
   BaseType *get_base () const;
+  const TyVar &get_var_element_type () const;
 
   void accept_vis (TyVisitor &vis) override;
   void accept_vis (TyConstVisitor &vis) const override;
@@ -1194,18 +1182,14 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   ReferenceType *handle_substitions (SubstitutionArgumentMappings &mappings);
 
   Mutability mutability () const;
-
   bool is_mutable () const;
 
   bool is_dyn_object () const;
-
   bool is_dyn_slice_type (const TyTy::SliceType **slice = nullptr) const;
-
   bool is_dyn_str_type (const TyTy::StrType **str = nullptr) const;
 
 private:
@@ -1222,6 +1206,7 @@ public:
               std::set<HirId> refs = std::set<HirId> ());
 
   BaseType *get_base () const;
+  const TyVar &get_var_element_type () const;
 
   void accept_vis (TyVisitor &vis) override;
   void accept_vis (TyConstVisitor &vis) const override;
@@ -1234,7 +1219,6 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   PointerType *handle_substitions (SubstitutionArgumentMappings &mappings);
 
@@ -1242,7 +1226,6 @@ public:
   bool is_mutable () const;
   bool is_const () const;
   bool is_dyn_object () const;
-
   bool is_dyn_slice_type (const TyTy::SliceType **slice = nullptr) const;
   bool is_dyn_str_type (const TyTy::StrType **str = nullptr) const;
 
@@ -1276,7 +1259,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::string get_name () const override final;
 };
@@ -1299,7 +1281,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::string get_name () const override final;
 
@@ -1344,7 +1325,6 @@ public:
   bool can_eq (const BaseType *other, bool emit_errors) const override final;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::string get_name () const override final;
 
@@ -1387,7 +1367,6 @@ public:
   bool is_equal (const BaseType &other) const override;
 
   BaseType *clone () const final override;
-  BaseType *monomorphized_clone () const final override;
 
   std::string get_name () const override final;