Skip to content

Commit

Permalink
TyTy: Collect variance info from types
Browse files Browse the repository at this point in the history
gcc/rust/ChangeLog:

	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit):
	Collect variance info from types.

Signed-off-by: Jakub Dupak <[email protected]>
  • Loading branch information
jdupak authored and CohenArthur committed Mar 21, 2024
1 parent 4a54a8b commit ac45444
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions gcc/rust/typecheck/rust-hir-type-check-item.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "rust-hir-trait-resolve.h"
#include "rust-substitution-mapper.h"
#include "rust-type-util.h"
#include "rust-tyty-variance-analysis.h"

namespace Rust {
namespace Resolver {
Expand Down Expand Up @@ -204,7 +205,7 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl)
TyTy::ADTType::ReprOptions repr
= parse_repr_options (attrs, struct_decl.get_locus ());

TyTy::BaseType *type = new TyTy::ADTType (
auto *type = new TyTy::ADTType (
struct_decl.get_mappings ().get_hirid (), mappings->get_next_hir_id (),
struct_decl.get_identifier ().as_string (), ident,
TyTy::ADTType::ADTKind::TUPLE_STRUCT, std::move (variants),
Expand All @@ -215,6 +216,8 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl)

context->insert_type (struct_decl.get_mappings (), type);
infered = type;

context->get_variance_analysis_ctx ().add_type_constraints (*type);
}

void
Expand Down Expand Up @@ -266,7 +269,7 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl)
TyTy::ADTType::ReprOptions repr
= parse_repr_options (attrs, struct_decl.get_locus ());

TyTy::BaseType *type = new TyTy::ADTType (
auto *type = new TyTy::ADTType (
struct_decl.get_mappings ().get_hirid (), mappings->get_next_hir_id (),
struct_decl.get_identifier ().as_string (), ident,
TyTy::ADTType::ADTKind::STRUCT_STRUCT, std::move (variants),
Expand All @@ -277,6 +280,8 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl)

context->insert_type (struct_decl.get_mappings (), type);
infered = type;

context->get_variance_analysis_ctx ().add_type_constraints (*type);
}

void
Expand Down Expand Up @@ -307,7 +312,7 @@ TypeCheckItem::visit (HIR::Enum &enum_decl)
RustIdent ident{*canonical_path, enum_decl.get_locus ()};

// multi variant ADT
TyTy::BaseType *type
auto *type
= new TyTy::ADTType (enum_decl.get_mappings ().get_hirid (),
mappings->get_next_hir_id (),
enum_decl.get_identifier ().as_string (), ident,
Expand All @@ -316,6 +321,8 @@ TypeCheckItem::visit (HIR::Enum &enum_decl)

context->insert_type (enum_decl.get_mappings (), type);
infered = type;

context->get_variance_analysis_ctx ().add_type_constraints (*type);
}

void
Expand Down Expand Up @@ -363,7 +370,7 @@ TypeCheckItem::visit (HIR::Union &union_decl)
TyTy::VariantDef::VariantType::STRUCT, nullptr,
std::move (fields)));

TyTy::BaseType *type
auto *type
= new TyTy::ADTType (union_decl.get_mappings ().get_hirid (),
mappings->get_next_hir_id (),
union_decl.get_identifier ().as_string (), ident,
Expand All @@ -372,6 +379,8 @@ TypeCheckItem::visit (HIR::Union &union_decl)

context->insert_type (union_decl.get_mappings (), type);
infered = type;

context->get_variance_analysis_ctx ().add_type_constraints (*type);
}

void
Expand Down

0 comments on commit ac45444

Please sign in to comment.