Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 4 additions & 16 deletions gcc/rust/checks/errors/rust-const-checker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,11 @@
#include "rust-system.h"
#include "rust-immutable-name-resolution-context.h"

// for flag_name_resolution_2_0
#include "options.h"

namespace Rust {
namespace HIR {

ConstChecker::ConstChecker ()
: resolver (*Resolver::Resolver::get ()),
: resolver (Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
mappings (Analysis::Mappings::get ())
{}

Expand Down Expand Up @@ -358,18 +355,9 @@ ConstChecker::visit (CallExpr &expr)
NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
NodeId ref_node_id;

if (flag_name_resolution_2_0)
{
auto &nr_ctx
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();

if (auto id = nr_ctx.lookup (ast_node_id))
ref_node_id = *id;
else
return;
}
// We don't care about types here
else if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
if (auto id = resolver.lookup (ast_node_id))
ref_node_id = *id;
else
return;

if (auto definition_id = mappings.lookup_node_to_hir (ref_node_id))
Expand Down
4 changes: 2 additions & 2 deletions gcc/rust/checks/errors/rust-const-checker.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#include "rust-hir-visitor.h"
#include "rust-hir-type-check.h"
#include "rust-stacked-contexts.h"
#include "rust-name-resolver.h"
#include "rust-name-resolution-context.h"

namespace Rust {
namespace HIR {
Expand Down Expand Up @@ -72,7 +72,7 @@ class ConstChecker : public HIRFullVisitor
std::vector<std::unique_ptr<GenericParam>> &param, ConstGenericCtx context);

StackedContexts<HirId> const_context;
Resolver::Resolver &resolver;
const Resolver2_0::NameResolutionContext &resolver;
Analysis::Mappings &mappings;

virtual void visit (Lifetime &lifetime) override;
Expand Down
46 changes: 7 additions & 39 deletions gcc/rust/checks/errors/rust-unsafe-checker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,12 @@
#include "rust-system.h"
#include "rust-immutable-name-resolution-context.h"

// for flag_name_resolution_2_0
#include "options.h"

namespace Rust {
namespace HIR {

UnsafeChecker::UnsafeChecker ()
: context (*Resolver::TypeCheckContext::get ()),
resolver (*Resolver::Resolver::get ()),
resolver (Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
mappings (Analysis::Mappings::get ())
{}

Expand Down Expand Up @@ -220,23 +217,10 @@ UnsafeChecker::visit (PathInExpression &path)
NodeId ast_node_id = path.get_mappings ().get_nodeid ();
NodeId ref_node_id;

if (flag_name_resolution_2_0)
{
auto &nr_ctx
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();

auto resolved = nr_ctx.lookup (ast_node_id);

if (!resolved.has_value ())
return;

ref_node_id = resolved.value ();
}
if (auto resolved = resolver.lookup (ast_node_id))
ref_node_id = resolved.value ();
else
{
if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
return;
}
return;

if (auto definition_id = mappings.lookup_node_to_hir (ref_node_id))
{
Expand Down Expand Up @@ -434,26 +418,10 @@ UnsafeChecker::visit (CallExpr &expr)
NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
NodeId ref_node_id;

// There are no unsafe types, and functions are defined in the name resolver.
// If we can't find the name, then we're dealing with a type and should return
// early.
if (flag_name_resolution_2_0)
{
auto &nr_ctx
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();

auto resolved = nr_ctx.lookup (ast_node_id);

if (!resolved.has_value ())
return;

ref_node_id = resolved.value ();
}
if (auto resolved = resolver.lookup (ast_node_id))
ref_node_id = resolved.value ();
else
{
if (!resolver.lookup_resolved_name (ast_node_id, &ref_node_id))
return;
}
return;

if (auto definition_id = mappings.lookup_node_to_hir (ref_node_id))
{
Expand Down
4 changes: 2 additions & 2 deletions gcc/rust/checks/errors/rust-unsafe-checker.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#define RUST_UNSAFE_CHECKER_H

#include "rust-hir-visitor.h"
#include "rust-name-resolver.h"
#include "rust-name-resolution-context.h"
#include "rust-hir-type-check.h"
#include "rust-stacked-contexts.h"

Expand Down Expand Up @@ -54,7 +54,7 @@ class UnsafeChecker : public HIRFullVisitor
StackedContexts<HirId> unsafe_context;

Resolver::TypeCheckContext &context;
Resolver::Resolver &resolver;
const Resolver2_0::NameResolutionContext &resolver;
Analysis::Mappings &mappings;

virtual void visit (Lifetime &lifetime) override;
Expand Down
61 changes: 12 additions & 49 deletions gcc/rust/checks/lints/rust-lint-marklive.cc
Original file line number Diff line number Diff line change
Expand Up @@ -163,21 +163,10 @@ MarkLive::visit_path_segment (HIR::PathExprSegment seg)
//
// We should mark them alive all and ignoring other kind of segments.
// If the segment we dont care then just return false is fine
if (flag_name_resolution_2_0)
{
auto &nr_ctx
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();

if (auto id = nr_ctx.lookup (ast_node_id))
ref_node_id = *id;
else
return false;
}
else if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id))
{
if (!resolver->lookup_resolved_type (ast_node_id, &ref_node_id))
return false;
}
if (auto id = resolver.lookup (ast_node_id))
ref_node_id = *id;
else
return false;
if (auto hid = mappings.lookup_node_to_hir (ref_node_id))
{
mark_hir_id (*hid);
Expand Down Expand Up @@ -250,21 +239,13 @@ MarkLive::visit (HIR::TupleIndexExpr &expr)
void
MarkLive::visit (HIR::TypeAlias &alias)
{
NodeId ast_node_id = UNKNOWN_NODEID;
if (flag_name_resolution_2_0)
{
auto &nr_ctx
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
NodeId ast_node_id;

if (auto id = nr_ctx.lookup (
alias.get_type_aliased ().get_mappings ().get_nodeid ()))
ast_node_id = *id;
}
if (auto id = resolver.lookup (
alias.get_type_aliased ().get_mappings ().get_nodeid ()))
ast_node_id = *id;
else
{
resolver->lookup_resolved_type (
alias.get_type_aliased ().get_mappings ().get_nodeid (), &ast_node_id);
}
rust_unreachable ();

if (auto hid = mappings.lookup_node_to_hir (ast_node_id))
mark_hir_id (*hid);
Expand All @@ -285,27 +266,9 @@ MarkLive::mark_hir_id (HirId id)
void
MarkLive::find_ref_node_id (NodeId ast_node_id, NodeId &ref_node_id)
{
if (flag_name_resolution_2_0)
{
auto &nr_ctx
= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();

nr_ctx.lookup (ast_node_id).map ([&ref_node_id] (NodeId resolved) {
ref_node_id = resolved;
});
}
else
{
if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id))
{
if (!resolver->lookup_resolved_type (ast_node_id, &ref_node_id))
{
bool ok
= resolver->lookup_resolved_misc (ast_node_id, &ref_node_id);
rust_assert (ok);
}
}
}
auto resolved = resolver.lookup (ast_node_id);
rust_assert (resolved.has_value ());
ref_node_id = resolved.value ();
}

} // namespace Analysis
Expand Down
6 changes: 4 additions & 2 deletions gcc/rust/checks/lints/rust-lint-marklive.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "rust-hir-map.h"
#include "rust-lint-marklive-base.h"
#include "rust-name-resolver.h"
#include "rust-immutable-name-resolution-context.h"

namespace Rust {
namespace Analysis {
Expand Down Expand Up @@ -277,11 +278,12 @@ class MarkLive : public MarkLiveBase
std::set<HirId> liveSymbols;
std::set<HirId> scannedSymbols;
Analysis::Mappings &mappings;
Resolver::Resolver *resolver;
const Resolver2_0::NameResolutionContext &resolver;
Resolver::TypeCheckContext *tyctx;
MarkLive (std::vector<HirId> worklist)
: worklist (worklist), mappings (Analysis::Mappings::get ()),
resolver (Resolver::Resolver::get ()),
resolver (
Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
tyctx (Resolver::TypeCheckContext::get ()){};

void mark_hir_id (HirId);
Expand Down
Loading