diff options
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve.cc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve.cc | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve.cc b/gcc/rust/resolve/rust-ast-resolve.cc index ba4ee21..8370a5b 100644 --- a/gcc/rust/resolve/rust-ast-resolve.cc +++ b/gcc/rust/resolve/rust-ast-resolve.cc @@ -17,10 +17,11 @@ // <http://www.gnu.org/licenses/>. #include "rust-ast-resolve.h" -#include "rust-ast-resolve-toplevel.h" -#include "rust-ast-resolve-item.h" #include "rust-ast-full.h" #include "rust-tyty.h" +#include "rust-ast-resolve-toplevel.h" +#include "rust-ast-resolve-item.h" +#include "rust-ast-resolve-expr.h" #define MKBUILTIN_TYPE(_X, _R, _TY) \ do \ @@ -250,5 +251,25 @@ NameResolution::go (AST::Crate &crate) ResolveItem::go (it->get ()); } +// rust-ast-resolve-expr.h + +void +ResolveExpr::visit (AST::BlockExpr &expr) +{ + NodeId scope_node_id = expr.get_node_id (); + resolver->get_name_scope ().push (scope_node_id); + resolver->get_type_scope ().push (scope_node_id); + resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); + resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); + + expr.iterate_stmts ([&] (AST::Stmt *s) mutable -> bool { + ResolveStmt::go (s, s->get_node_id ()); + return true; + }); + + resolver->get_name_scope ().pop (); + resolver->get_type_scope ().pop (); +} + } // namespace Resolver } // namespace Rust |