aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/resolve/rust-ast-resolve-expr.h
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-07-08 15:44:59 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-07-10 21:32:44 +0100
commit213bc11225fcbb57e2fa6d949917bd2cf44e2477 (patch)
tree8c28309b0963c5dc9f1a5c8738f3bf4c16de7f31 /gcc/rust/resolve/rust-ast-resolve-expr.h
parent8bfeef998ff340fef37f07e1a7a0366e73296380 (diff)
downloadgcc-213bc11225fcbb57e2fa6d949917bd2cf44e2477.zip
gcc-213bc11225fcbb57e2fa6d949917bd2cf44e2477.tar.gz
gcc-213bc11225fcbb57e2fa6d949917bd2cf44e2477.tar.bz2
canonical path enhancements
This refactors the canonical path to enforce the segment ids.
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve-expr.h')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-expr.h28
1 files changed, 16 insertions, 12 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-expr.h b/gcc/rust/resolve/rust-ast-resolve-expr.h
index d6f5fcd..ec89f6c 100644
--- a/gcc/rust/resolve/rust-ast-resolve-expr.h
+++ b/gcc/rust/resolve/rust-ast-resolve-expr.h
@@ -118,7 +118,8 @@ public:
void visit (AST::IdentifierExpr &expr) override
{
if (resolver->get_name_scope ().lookup (
- CanonicalPath::new_seg (expr.as_string ()), &resolved_node))
+ CanonicalPath::new_seg (expr.get_node_id (), expr.as_string ()),
+ &resolved_node))
{
resolver->insert_resolved_name (expr.get_node_id (), resolved_node);
resolver->insert_new_definition (expr.get_node_id (),
@@ -126,7 +127,8 @@ public:
parent});
}
else if (resolver->get_type_scope ().lookup (
- CanonicalPath::new_seg (expr.as_string ()), &resolved_node))
+ CanonicalPath::new_seg (expr.get_node_id (), expr.as_string ()),
+ &resolved_node))
{
resolver->insert_resolved_type (expr.get_node_id (), resolved_node);
resolver->insert_new_definition (expr.get_node_id (),
@@ -272,8 +274,8 @@ public:
auto label_name = label.get_lifetime ().get_lifetime_name ();
auto label_lifetime_node_id = label.get_lifetime ().get_node_id ();
resolver->get_label_scope ().insert (
- CanonicalPath::new_seg (label_name), label_lifetime_node_id,
- label.get_locus (), false,
+ CanonicalPath::new_seg (expr.get_node_id (), label_name),
+ label_lifetime_node_id, label.get_locus (), false,
[&] (const CanonicalPath &, NodeId, Location locus) -> void {
rust_error_at (label.get_locus (),
"label redefined multiple times");
@@ -299,9 +301,10 @@ public:
}
NodeId resolved_node = UNKNOWN_NODEID;
- if (!resolver->get_label_scope ().lookup (CanonicalPath::new_seg (
- label.get_lifetime_name ()),
- &resolved_node))
+ if (!resolver->get_label_scope ().lookup (
+ CanonicalPath::new_seg (label.get_node_id (),
+ label.get_lifetime_name ()),
+ &resolved_node))
{
rust_error_at (expr.get_label ().get_locus (),
"failed to resolve label");
@@ -330,8 +333,8 @@ public:
auto label_name = label.get_lifetime ().get_lifetime_name ();
auto label_lifetime_node_id = label.get_lifetime ().get_node_id ();
resolver->get_label_scope ().insert (
- CanonicalPath::new_seg (label_name), label_lifetime_node_id,
- label.get_locus (), false,
+ CanonicalPath::new_seg (label.get_node_id (), label_name),
+ label_lifetime_node_id, label.get_locus (), false,
[&] (const CanonicalPath &, NodeId, Location locus) -> void {
rust_error_at (label.get_locus (),
"label redefined multiple times");
@@ -358,9 +361,10 @@ public:
}
NodeId resolved_node = UNKNOWN_NODEID;
- if (!resolver->get_label_scope ().lookup (CanonicalPath::new_seg (
- label.get_lifetime_name ()),
- &resolved_node))
+ if (!resolver->get_label_scope ().lookup (
+ CanonicalPath::new_seg (label.get_node_id (),
+ label.get_lifetime_name ()),
+ &resolved_node))
{
rust_error_at (expr.get_label ().get_locus (),
"failed to resolve label");