= parse_repr_options (attrs, struct_decl.get_locus ());
auto *type = new TyTy::ADTType (
+ struct_decl.get_mappings ().get_defid (),
struct_decl.get_mappings ().get_hirid (),
struct_decl.get_mappings ().get_hirid (),
struct_decl.get_identifier ().as_string (), ident,
= parse_repr_options (attrs, struct_decl.get_locus ());
auto *type = new TyTy::ADTType (
+ struct_decl.get_mappings ().get_defid (),
struct_decl.get_mappings ().get_hirid (),
struct_decl.get_mappings ().get_hirid (),
struct_decl.get_identifier ().as_string (), ident,
// multi variant ADT
auto *type
- = new TyTy::ADTType (enum_decl.get_mappings ().get_hirid (),
+ = new TyTy::ADTType (enum_decl.get_mappings ().get_defid (),
+ enum_decl.get_mappings ().get_hirid (),
enum_decl.get_mappings ().get_hirid (),
enum_decl.get_identifier ().as_string (), ident,
TyTy::ADTType::ADTKind::ENUM, std::move (variants),
std::move (fields)));
auto *type
- = new TyTy::ADTType (union_decl.get_mappings ().get_hirid (),
+ = new TyTy::ADTType (union_decl.get_mappings ().get_defid (),
+ union_decl.get_mappings ().get_hirid (),
union_decl.get_mappings ().get_hirid (),
union_decl.get_identifier ().as_string (), ident,
TyTy::ADTType::ADTKind::UNION, std::move (variants),
for (auto &variant : adt->get_variants ())
cloned_variants.push_back (variant->monomorphized_clone ());
- return new ADTType (adt->get_ref (), adt->get_ty_ref (),
+ return new ADTType (adt->get_id (), 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 (),
// ADTType
+ADTType::ADTType (DefId id, HirId ref, std::string identifier, RustIdent ident,
+ ADTKind adt_kind, std::vector<VariantDef *> variants,
+ std::vector<SubstitutionParamMapping> subst_refs,
+ SubstitutionArgumentMappings generic_arguments,
+ RegionConstraints region_constraints, std::set<HirId> refs)
+ : BaseType (ref, ref, TypeKind::ADT, ident, refs),
+ SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
+ region_constraints),
+ id (id), identifier (identifier), variants (variants), adt_kind (adt_kind)
+{}
+
+ADTType::ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+ RustIdent ident, ADTKind adt_kind,
+ std::vector<VariantDef *> variants,
+ std::vector<SubstitutionParamMapping> subst_refs,
+ SubstitutionArgumentMappings generic_arguments,
+ RegionConstraints region_constraints, std::set<HirId> refs)
+ : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
+ SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
+ region_constraints),
+ id (id), identifier (identifier), variants (variants), adt_kind (adt_kind)
+{}
+
+ADTType::ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+ RustIdent ident, ADTKind adt_kind,
+ std::vector<VariantDef *> variants,
+ std::vector<SubstitutionParamMapping> subst_refs,
+ ReprOptions repr,
+ SubstitutionArgumentMappings generic_arguments,
+ RegionConstraints region_constraints, std::set<HirId> refs)
+ : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
+ SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
+ region_constraints),
+ id (id), identifier (identifier), variants (variants), adt_kind (adt_kind),
+ repr (repr)
+{}
+
void
ADTType::accept_vis (TyVisitor &vis)
{
return true;
}
+DefId
+ADTType::get_id () const
+{
+ return id;
+}
+
BaseType *
ADTType::clone () const
{
for (auto &variant : variants)
cloned_variants.push_back (variant->clone ());
- return new ADTType (get_ref (), get_ty_ref (), identifier, ident,
+ return new ADTType (get_id (), get_ref (), get_ty_ref (), identifier, ident,
get_adt_kind (), cloned_variants, clone_substs (),
get_repr_options (), used_arguments,
get_region_constraints (), get_combined_refs ());
BaseType *repr = nullptr;
};
- ADTType (HirId ref, std::string identifier, RustIdent ident, ADTKind adt_kind,
- std::vector<VariantDef *> variants,
+ ADTType (DefId id, HirId ref, std::string identifier, RustIdent ident,
+ ADTKind adt_kind, std::vector<VariantDef *> variants,
std::vector<SubstitutionParamMapping> subst_refs,
SubstitutionArgumentMappings generic_arguments
= SubstitutionArgumentMappings::error (),
RegionConstraints region_constraints = RegionConstraints{},
- std::set<HirId> refs = std::set<HirId> ())
- : BaseType (ref, ref, TypeKind::ADT, ident, refs),
- SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
- region_constraints),
- identifier (identifier), variants (variants), adt_kind (adt_kind)
- {}
+ std::set<HirId> refs = std::set<HirId> ());
- ADTType (HirId ref, HirId ty_ref, std::string identifier, RustIdent ident,
- ADTKind adt_kind, std::vector<VariantDef *> variants,
+ ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+ RustIdent ident, ADTKind adt_kind,
+ std::vector<VariantDef *> variants,
std::vector<SubstitutionParamMapping> subst_refs,
SubstitutionArgumentMappings generic_arguments
= SubstitutionArgumentMappings::error (),
RegionConstraints region_constraints = RegionConstraints{},
- std::set<HirId> refs = std::set<HirId> ())
- : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
- SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
- region_constraints),
- identifier (identifier), variants (variants), adt_kind (adt_kind)
- {}
+ std::set<HirId> refs = std::set<HirId> ());
- ADTType (HirId ref, HirId ty_ref, std::string identifier, RustIdent ident,
- ADTKind adt_kind, std::vector<VariantDef *> variants,
+ ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+ RustIdent ident, ADTKind adt_kind,
+ std::vector<VariantDef *> variants,
std::vector<SubstitutionParamMapping> subst_refs, ReprOptions repr,
SubstitutionArgumentMappings generic_arguments
= SubstitutionArgumentMappings::error (),
RegionConstraints region_constraints = RegionConstraints{},
- std::set<HirId> refs = std::set<HirId> ())
- : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
- SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
- region_constraints),
- identifier (identifier), variants (variants), adt_kind (adt_kind),
- repr (repr)
- {}
+ std::set<HirId> refs = std::set<HirId> ());
ADTKind get_adt_kind () const { return adt_kind; }
return identifier + subst_as_string ();
}
+ DefId get_id () const;
+
BaseType *clone () const final override;
size_t number_of_variants () const { return variants.size (); }
handle_substitions (SubstitutionArgumentMappings &mappings) override final;
private:
+ DefId id;
std::string identifier;
std::vector<VariantDef *> variants;
ADTType::ADTKind adt_kind;