diff options
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve-item.h')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.h | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index fbb8fd4..86c9934 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -58,7 +58,8 @@ public: resolver->get_type_scope ().append_reference_for_def (type.get_node_id (), type.get_node_id ()); - // TODO resolve the type-bounds + for (auto &bound : type.get_type_param_bounds ()) + ResolveTypeBound::go (bound.get (), type.get_node_id ()); } void visit (AST::TraitItemFunc &func) override @@ -95,6 +96,9 @@ public: param.get_node_id ()); } + if (function.has_where_clause ()) + ResolveWhereClause::Resolve (function.get_where_clause ()); + // trait items have an optional body if (func.has_definition ()) ResolveExpr::go (func.get_definition ().get (), func.get_node_id ()); @@ -158,6 +162,9 @@ public: param.get_node_id ()); } + if (function.has_where_clause ()) + ResolveWhereClause::Resolve (function.get_where_clause ()); + // trait items have an optional body if (func.has_definition ()) ResolveExpr::go (func.get_definition ().get (), func.get_node_id ()); @@ -211,6 +218,9 @@ public: ResolveGenericParam::go (generic.get (), alias.get_node_id ()); } + if (alias.has_where_clause ()) + ResolveWhereClause::Resolve (alias.get_where_clause ()); + ResolveType::go (alias.get_type_aliased ().get (), alias.get_node_id ()); resolver->get_type_scope ().pop (); @@ -251,6 +261,9 @@ public: } } + if (struct_decl.has_where_clause ()) + ResolveWhereClause::Resolve (struct_decl.get_where_clause ()); + struct_decl.iterate ([&] (AST::TupleField &field) mutable -> bool { ResolveType::go (field.get_field_type ().get (), struct_decl.get_node_id ()); @@ -273,6 +286,9 @@ public: } } + if (enum_decl.has_where_clause ()) + ResolveWhereClause::Resolve (enum_decl.get_where_clause ()); + /* The actual fields are inside the variants. */ for (auto &variant : enum_decl.get_variants ()) ResolveItem::go (variant.get ()); @@ -310,6 +326,9 @@ public: } } + if (struct_decl.has_where_clause ()) + ResolveWhereClause::Resolve (struct_decl.get_where_clause ()); + struct_decl.iterate ([&] (AST::StructField &field) mutable -> bool { ResolveType::go (field.get_field_type ().get (), struct_decl.get_node_id ()); @@ -332,6 +351,9 @@ public: } } + if (union_decl.has_where_clause ()) + ResolveWhereClause::Resolve (union_decl.get_where_clause ()); + union_decl.iterate ([&] (AST::StructField &field) mutable -> bool { ResolveType::go (field.get_field_type ().get (), union_decl.get_node_id ()); @@ -379,6 +401,10 @@ public: ResolveGenericParam::go (generic.get (), function.get_node_id ()); } + // resolve any where clause items + if (function.has_where_clause ()) + ResolveWhereClause::Resolve (function.get_where_clause ()); + if (function.has_return_type ()) ResolveType::go (function.get_return_type ().get (), function.get_node_id ()); @@ -422,6 +448,10 @@ public: } } + // resolve any where clause items + if (impl_block.has_where_clause ()) + ResolveWhereClause::Resolve (impl_block.get_where_clause ()); + bool canonicalize_type_with_generics = false; NodeId resolved_node = ResolveType::go (impl_block.get_type ().get (), impl_block.get_node_id (), @@ -468,6 +498,10 @@ public: ResolveGenericParam::go (generic.get (), method.get_node_id ()); } + // resolve any where clause items + if (method.has_where_clause ()) + ResolveWhereClause::Resolve (method.get_where_clause ()); + if (method.has_return_type ()) ResolveType::go (method.get_return_type ().get (), method.get_node_id ()); @@ -505,6 +539,10 @@ public: param.get_node_id ()); } + // resolve any where clause items + if (method.has_where_clause ()) + ResolveWhereClause::Resolve (method.get_where_clause ()); + // resolve the function body ResolveExpr::go (method.get_definition ().get (), method.get_node_id ()); @@ -529,6 +567,10 @@ public: } } + // resolve any where clause items + if (impl_block.has_where_clause ()) + ResolveWhereClause::Resolve (impl_block.get_where_clause ()); + bool canonicalize_type_with_generics = false; NodeId trait_resolved_node = ResolveType::go (&impl_block.get_trait_path (), @@ -601,6 +643,10 @@ public: } } + // resolve any where clause items + if (trait.has_where_clause ()) + ResolveWhereClause::Resolve (trait.get_where_clause ()); + for (auto &item : trait.get_trait_items ()) { ResolveTraitItems::go (item.get (), Self); |