From: Jakub Dupak <[email protected]>
gcc/rust/ChangeLog:
* checks/errors/borrowck/rust-bir-place.h:
Create place tree traverse API.
Signed-off-by: Jakub Dupak <[email protected]>
---
.../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