aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/resolve/rust-ast-resolve.cc
diff options
context:
space:
mode:
authorMarc Poulhiès <dkm@kataplop.net>2021-08-12 13:44:10 +0200
committerMarc <dkm@kataplop.net>2021-08-18 22:59:37 +0200
commit37a6b4ae78070b136d86bb0a7f207b8c2af69383 (patch)
tree1541dd2e9fce058c9ea9d97eff145469b1f072da /gcc/rust/resolve/rust-ast-resolve.cc
parent76ed248287c256e306f561a2de166114666743e8 (diff)
downloadgcc-37a6b4ae78070b136d86bb0a7f207b8c2af69383.zip
gcc-37a6b4ae78070b136d86bb0a7f207b8c2af69383.tar.gz
gcc-37a6b4ae78070b136d86bb0a7f207b8c2af69383.tar.bz2
resolve: add support for Module
Implement required visitor methods for resolving names in modules. ref #432 Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve.cc')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve.cc b/gcc/rust/resolve/rust-ast-resolve.cc
index 1b77ae2..5b24816 100644
--- a/gcc/rust/resolve/rust-ast-resolve.cc
+++ b/gcc/rust/resolve/rust-ast-resolve.cc
@@ -552,6 +552,10 @@ ResolvePath::resolve_path (AST::PathInExpression *expr)
auto s = ResolvePathSegmentToCanonicalPath::resolve (seg);
path = path.append (s);
+ // reset state
+ segment_is_type = false;
+ resolved_node = UNKNOWN_NODEID;
+
if (resolver->get_name_scope ().lookup (path, &resolved_node))
{
resolver->insert_resolved_name (seg.get_node_id (), resolved_node);
@@ -562,6 +566,7 @@ ResolvePath::resolve_path (AST::PathInExpression *expr)
// check the type scope
else if (resolver->get_type_scope ().lookup (path, &resolved_node))
{
+ segment_is_type = true;
resolver->insert_resolved_type (seg.get_node_id (), resolved_node);
resolver->insert_new_definition (seg.get_node_id (),
Definition{expr->get_node_id (),
@@ -611,6 +616,19 @@ ResolvePath::resolve_path (AST::PathInExpression *expr)
return;
}
}
+
+ // its fully resolved lets mark it as such
+ if (resolved_node != UNKNOWN_NODEID)
+ {
+ if (segment_is_type)
+ resolver->insert_resolved_type (expr->get_node_id (), resolved_node);
+ else
+ resolver->insert_resolved_name (expr->get_node_id (), resolved_node);
+
+ resolver->insert_new_definition (expr->get_node_id (),
+ Definition{expr->get_node_id (),
+ parent});
+ }
}
// rust-ast-resolve-type.h