Skip to content

Commit

Permalink
Push ribs by kind rather than by value
Browse files Browse the repository at this point in the history
gcc/rust/ChangeLog:

	* resolve/rust-forever-stack.h
	(ForeverStack::push): Accept argument of type Rib::Kind rather
	than Rib.
	* resolve/rust-forever-stack.hxx
	(ForeverStack::push): Likewise.
	* resolve/rust-name-resolution-context.cc
	(NameResolutionContext::scoped): Likewise.
	* resolve/rust-name-resolution-context.h
	(NameResolutionContext::scoped): Likewise.

Signed-off-by: Owen Avery <[email protected]>
  • Loading branch information
powerboat9 committed Nov 11, 2024
1 parent 977a72c commit 09d554e
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 14 deletions.
2 changes: 1 addition & 1 deletion gcc/rust/resolve/rust-forever-stack.h
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ template <Namespace N> class ForeverStack
* @param path An optional path if the Rib was created due to a "named"
* lexical scope, like a module's.
*/
void push (Rib rib, NodeId id, tl::optional<Identifier> path = {});
void push (Rib::Kind rib_kind, NodeId id, tl::optional<Identifier> path = {});

/**
* Pop the innermost Rib from the stack
Expand Down
5 changes: 3 additions & 2 deletions gcc/rust/resolve/rust-forever-stack.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,10 @@ ForeverStack<N>::Node::insert_child (Link link, Node child)

template <Namespace N>
void
ForeverStack<N>::push (Rib rib, NodeId id, tl::optional<Identifier> path)
ForeverStack<N>::push (Rib::Kind rib_kind, NodeId id,
tl::optional<Identifier> path)
{
push_inner (rib, Link (id, path));
push_inner (rib_kind, Link (id, path));
}

template <Namespace N>
Expand Down
15 changes: 8 additions & 7 deletions gcc/rust/resolve/rust-name-resolution-context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,13 @@ NameResolutionContext::lookup (NodeId usage) const
}

void
NameResolutionContext::scoped (Rib rib, NodeId id,
NameResolutionContext::scoped (Rib::Kind rib_kind, NodeId id,
std::function<void (void)> lambda,
tl::optional<Identifier> path)
{
values.push (rib, id, path);
types.push (rib, id, path);
macros.push (rib, id, path);
values.push (rib_kind, id, path);
types.push (rib_kind, id, path);
macros.push (rib_kind, id, path);
// labels.push (rib, id);

lambda ();
Expand All @@ -121,17 +121,18 @@ NameResolutionContext::scoped (Rib rib, NodeId id,
}

void
NameResolutionContext::scoped (Rib rib, Namespace ns, NodeId scope_id,
NameResolutionContext::scoped (Rib::Kind rib_kind, Namespace ns,
NodeId scope_id,
std::function<void (void)> lambda,
tl::optional<Identifier> path)
{
switch (ns)
{
case Namespace::Values:
values.push (rib, scope_id, path);
values.push (rib_kind, scope_id, path);
break;
case Namespace::Types:
types.push (rib, scope_id, path);
types.push (rib_kind, scope_id, path);
break;
case Namespace::Labels:
case Namespace::Macros:
Expand Down
9 changes: 5 additions & 4 deletions gcc/rust/resolve/rust-name-resolution-context.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,8 @@ class NameResolutionContext
* function. This variant of the function enters a new scope in *all*
* namespaces, while the second variant enters a scope in *one* namespace.
*
* @param rib New `Rib` to create when entering this scope. A function `Rib`,
* or an item `Rib`... etc
* @param rib_kind New `Rib` to create when entering this scope. A function
* `Rib`, or an item `Rib`... etc
* @param scope_id node ID of the scope we are entering, e.g the block's
* `NodeId`.
* @param lambda Function to run within that scope
Expand All @@ -196,9 +196,10 @@ class NameResolutionContext
*/
// FIXME: Do we want to handle something in particular for expected within the
// scoped lambda?
void scoped (Rib rib, NodeId scope_id, std::function<void (void)> lambda,
void scoped (Rib::Kind rib_kind, NodeId scope_id,
std::function<void (void)> lambda,
tl::optional<Identifier> path = {});
void scoped (Rib rib, Namespace ns, NodeId scope_id,
void scoped (Rib::Kind rib_kind, Namespace ns, NodeId scope_id,
std::function<void (void)> lambda,
tl::optional<Identifier> path = {});

Expand Down

0 comments on commit 09d554e

Please sign in to comment.