[PATCH 113/125] gccrs: borrowck: BIR: Place tree traverse API
Arthur Cohen
arthur.cohen@embecosm.com
Thu Aug 1 14:57:49 GMT 2024
From: Jakub Dupak <dev@jakubdupak.com>
gcc/rust/ChangeLog:
* checks/errors/borrowck/rust-bir-place.h:
Create place tree traverse API.
Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
---
.../checks/errors/borrowck/rust-bir-place.h | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-place.h b/gcc/rust/checks/errors/borrowck/rust-bir-place.h
index ccc820121cc..e62ec3557ad 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-place.h
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-place.h
@@ -229,6 +229,29 @@ public:
places[place].tyty});
}
+ template <typename FN> void for_each_path_from_root (PlaceId var, FN fn) const
+ {
+ PlaceId current = var;
+ current = places[current].path.first_child;
+ while (current != INVALID_PLACE)
+ {
+ fn (current);
+ for_each_path_from_root (current, fn);
+ current = places[current].path.next_sibling;
+ }
+ }
+
+ template <typename FN>
+ void for_each_path_segment (PlaceId place_id, FN fn) const
+ {
+ PlaceId current = place_id;
+ while (current != INVALID_PLACE)
+ {
+ fn (current);
+ current = places[current].path.parent;
+ }
+ }
+
private:
static bool is_type_copy (TyTy::BaseType *ty)
{
--
2.45.2
More information about the Gcc-rust
mailing list