mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-21 19:35:28 -05:00
gccrs: Small improvements to DefaultASTVisitor and nr2.0
gcc/rust/ChangeLog: * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Only visit the path of an instance of Visibility if the instance has a path. * ast/rust-ast.h (SimplePath::SimplePath): Make sure constructors are explicit. * resolve/rust-early-name-resolver-2.0.cc (Early::visit_attributes): Pass entire paths to NameResolutionContext::resolve_path. (Early::visit): Likewise and avoid copying a path. * resolve/rust-forever-stack.hxx (ForeverStack::resolve_path): Assert that at least one path segment has been passed in. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
This commit is contained in:
@@ -762,7 +762,8 @@ DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
|
||||
void
|
||||
DefaultASTVisitor::visit (AST::Visibility &vis)
|
||||
{
|
||||
visit (vis.get_path ());
|
||||
if (vis.has_path ())
|
||||
visit (vis.get_path ());
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -402,15 +402,15 @@ class SimplePath
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
SimplePath (std::vector<SimplePathSegment> path_segments,
|
||||
bool has_opening_scope_resolution = false,
|
||||
location_t locus = UNDEF_LOCATION)
|
||||
explicit SimplePath (std::vector<SimplePathSegment> path_segments,
|
||||
bool has_opening_scope_resolution = false,
|
||||
location_t locus = UNDEF_LOCATION)
|
||||
: opening_scope_resolution (has_opening_scope_resolution),
|
||||
segments (std::move (path_segments)), locus (locus),
|
||||
node_id (Analysis::Mappings::get ().get_next_node_id ())
|
||||
{}
|
||||
|
||||
SimplePath (Identifier ident)
|
||||
explicit SimplePath (Identifier ident)
|
||||
: opening_scope_resolution (false),
|
||||
segments ({SimplePathSegment (ident.as_string (), ident.get_locus ())}),
|
||||
locus (ident.get_locus ()),
|
||||
|
||||
@@ -249,7 +249,7 @@ Early::visit (AST::Module &module)
|
||||
void
|
||||
Early::visit (AST::MacroInvocation &invoc)
|
||||
{
|
||||
auto path = invoc.get_invoc_data ().get_path ();
|
||||
auto &path = invoc.get_invoc_data ().get_path ();
|
||||
|
||||
if (invoc.get_kind () == AST::MacroInvocation::InvocKind::Builtin)
|
||||
for (auto &pending_invoc : invoc.get_pending_eager_invocations ())
|
||||
@@ -272,7 +272,7 @@ Early::visit (AST::MacroInvocation &invoc)
|
||||
// we won't have changed `definition` from `nullopt` if there are more
|
||||
// than one segments in our path
|
||||
if (!definition.has_value ())
|
||||
definition = ctx.resolve_path (path.get_segments (), Namespace::Macros);
|
||||
definition = ctx.resolve_path (path, Namespace::Macros);
|
||||
|
||||
// if the definition still does not have a value, then it's an error
|
||||
if (!definition.has_value ())
|
||||
@@ -314,8 +314,8 @@ Early::visit_attributes (std::vector<AST::Attribute> &attrs)
|
||||
auto traits = attr.get_traits_to_derive ();
|
||||
for (auto &trait : traits)
|
||||
{
|
||||
auto definition = ctx.resolve_path (trait.get ().get_segments (),
|
||||
Namespace::Macros);
|
||||
auto definition
|
||||
= ctx.resolve_path (trait.get (), Namespace::Macros);
|
||||
if (!definition.has_value ())
|
||||
{
|
||||
// FIXME: Change to proper error message
|
||||
@@ -337,8 +337,8 @@ Early::visit_attributes (std::vector<AST::Attribute> &attrs)
|
||||
->lookup_builtin (name)
|
||||
.is_error ()) // Do not resolve builtins
|
||||
{
|
||||
auto definition = ctx.resolve_path (attr.get_path ().get_segments (),
|
||||
Namespace::Macros);
|
||||
auto definition
|
||||
= ctx.resolve_path (attr.get_path (), Namespace::Macros);
|
||||
if (!definition.has_value ())
|
||||
{
|
||||
// FIXME: Change to proper error message
|
||||
|
||||
@@ -629,7 +629,7 @@ ForeverStack<N>::resolve_path (
|
||||
std::function<void (const S &, NodeId)> insert_segment_resolution,
|
||||
std::vector<Error> &collect_errors)
|
||||
{
|
||||
// TODO: What to do if segments.empty() ?
|
||||
rust_assert (!segments.empty ());
|
||||
|
||||
// handle paths with opening scopes
|
||||
std::function<void (void)> cleanup_current = [] () {};
|
||||
|
||||
Reference in New Issue
Block a user