Skip to content

Commit

Permalink
Fix ForeverStack::find_starting_point output parameter
Browse files Browse the repository at this point in the history
gcc/rust/ChangeLog:

	* resolve/rust-forever-stack.h
	(ForeverStack::find_starting_point): Use type
	'std::reference_wrapper<Node> &' instead of 'Node &' for
	parameter starting_point.
	* resolve/rust-forever-stack.hxx
	(ForeverStack::find_starting_point): Likewise.
	(ForeverStack::resolve_path): Handle change to
	ForeverStack::find_starting_point.

Signed-off-by: Owen Avery <[email protected]>
  • Loading branch information
powerboat9 committed Nov 21, 2024
1 parent 90454a9 commit fdc6aea
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 7 deletions.
3 changes: 2 additions & 1 deletion gcc/rust/resolve/rust-forever-stack.h
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,8 @@ template <Namespace N> class ForeverStack

template <typename S>
tl::optional<SegIterator<S>>
find_starting_point (const std::vector<S> &segments, Node &starting_point);
find_starting_point (const std::vector<S> &segments,
std::reference_wrapper<Node> &starting_point);

template <typename S>
tl::optional<Node &> resolve_segments (Node &starting_point,
Expand Down
13 changes: 7 additions & 6 deletions gcc/rust/resolve/rust-forever-stack.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -374,8 +374,8 @@ check_leading_kw_at_start (const S &segment, bool condition)
template <Namespace N>
template <typename S>
tl::optional<typename std::vector<S>::const_iterator>
ForeverStack<N>::find_starting_point (const std::vector<S> &segments,
Node &starting_point)
ForeverStack<N>::find_starting_point (
const std::vector<S> &segments, std::reference_wrapper<Node> &starting_point)
{
auto iterator = segments.begin ();

Expand Down Expand Up @@ -412,14 +412,15 @@ ForeverStack<N>::find_starting_point (const std::vector<S> &segments,
}
if (seg.is_super_path_seg ())
{
if (starting_point.is_root ())
if (starting_point.get ().is_root ())
{
rust_error_at (seg.get_locus (), ErrorCode::E0433,
"too many leading %<super%> keywords");
return tl::nullopt;
}

starting_point = find_closest_module (starting_point.parent.value ());
starting_point
= find_closest_module (starting_point.get ().parent.value ());
continue;
}

Expand Down Expand Up @@ -494,12 +495,12 @@ ForeverStack<N>::resolve_path (const std::vector<S> &segments)
if (segments.size () == 1)
return get (segments.back ().as_string ());

auto starting_point = cursor ();
std::reference_wrapper<Node> starting_point = cursor ();

return find_starting_point (segments, starting_point)
.and_then ([this, &segments, &starting_point] (
typename std::vector<S>::const_iterator iterator) {
return resolve_segments (starting_point, segments, iterator);
return resolve_segments (starting_point.get (), segments, iterator);
})
.and_then ([&segments] (Node final_node) {
return final_node.rib.get (segments.back ().as_string ());
Expand Down

0 comments on commit fdc6aea

Please sign in to comment.