diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-07-08 15:44:59 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-07-10 21:32:44 +0100 |
commit | 213bc11225fcbb57e2fa6d949917bd2cf44e2477 (patch) | |
tree | 8c28309b0963c5dc9f1a5c8738f3bf4c16de7f31 /gcc/rust/resolve/rust-ast-resolve-expr.h | |
parent | 8bfeef998ff340fef37f07e1a7a0366e73296380 (diff) | |
download | gcc-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.h | 28 |
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"); |