diff options
author | Kushal Pal <kushalpal109@gmail.com> | 2024-08-19 09:48:49 +0000 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2024-09-09 08:33:02 +0000 |
commit | 5f42a91bd2b308da2d78912f899dff871598b23e (patch) | |
tree | 30dc24692752c1088070a6109083ca45cd364198 /gcc | |
parent | a912ffbf32a20fa81120f36ad9042f0dc99872c2 (diff) | |
download | gcc-5f42a91bd2b308da2d78912f899dff871598b23e.zip gcc-5f42a91bd2b308da2d78912f899dff871598b23e.tar.gz gcc-5f42a91bd2b308da2d78912f899dff871598b23e.tar.bz2 |
Used `IndexVec` for Loans
gcc/rust/ChangeLog:
* checks/errors/borrowck/rust-bir-place.h: Used `IndexVec` with
ScopeId as index.
* checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
(BorrowCheckerDiagnostics::get_loan): Convert Polonius::Loan to
BIR::Loan, so we can use it as index.
Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/checks/errors/borrowck/rust-bir-place.h | 16 | ||||
-rw-r--r-- | gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc | 2 |
2 files changed, 9 insertions, 9 deletions
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-place.h b/gcc/rust/checks/errors/borrowck/rust-bir-place.h index 05e25ed..5f1c09a 100644 --- a/gcc/rust/checks/errors/borrowck/rust-bir-place.h +++ b/gcc/rust/checks/errors/borrowck/rust-bir-place.h @@ -215,10 +215,12 @@ public: { internal_vector.emplace_back (std::forward<Args> (args)...); } + std::vector<T> &get_vector () { return internal_vector; } size_t size () const { return internal_vector.size (); } }; using Scopes = IndexVec<ScopeId, Scope>; +using Loans = IndexVec<LoanId, Loan>; /** Allocated places and keeps track of paths. */ class PlaceDB @@ -230,7 +232,7 @@ private: Scopes scopes; ScopeId current_scope = ROOT_SCOPE; - std::vector<Loan> loans; + Loans loans; FreeRegion next_free_region = {1}; @@ -251,11 +253,8 @@ public: size_t size () const { return places.size (); } - const std::vector<Loan> &get_loans () const { return loans; } - const Loan &get_loan (LoanId loan_id) const - { - return loans.at (loan_id.value); - } + const Loans &get_loans () const { return loans; } + const Loan &get_loan (LoanId loan_id) const { return loans.at (loan_id); } ScopeId get_current_scope_id () const { return current_scope; } @@ -383,8 +382,9 @@ public: { LoanId id = {loans.size ()}; loans.push_back (std::forward<Loan &&> (loan)); - PlaceId borrowed_place = loans.rbegin ()->place; - places[loans.rbegin ()->place.value].borrowed_by.push_back (id); + PlaceId borrowed_place = loans.get_vector ().rbegin ()->place; + places[loans.get_vector ().rbegin ()->place.value].borrowed_by.push_back ( + id); if (places[borrowed_place.value].kind == Place::DEREF) { places[places[borrowed_place.value].path.parent.value] diff --git a/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc b/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc index f2e4c38..4002ed4 100644 --- a/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc +++ b/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc @@ -142,7 +142,7 @@ BorrowCheckerDiagnostics::get_statement (Polonius::Point point) const BIR::Loan & BorrowCheckerDiagnostics::get_loan (Polonius::Loan loan) { - return bir_function.place_db.get_loans ()[loan]; + return bir_function.place_db.get_loans ()[{loan}]; } const HIR::LifetimeParam * |