diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-05-18 16:18:58 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-06-08 14:32:35 +0200 |
commit | f13da289f1c330e280b7f992aca275c9dad8a511 (patch) | |
tree | f5197e6b47e39ea6004ca5df4389b78ef1702873 | |
parent | 118518e2bac1c4671173f0205e0d1369d0b1b384 (diff) | |
download | gcc-f13da289f1c330e280b7f992aca275c9dad8a511.zip gcc-f13da289f1c330e280b7f992aca275c9dad8a511.tar.gz gcc-f13da289f1c330e280b7f992aca275c9dad8a511.tar.bz2 |
libproc_macro: Fix capacity update in tokenstream
The capacity was not updated on tokenstream grow. This commit also add a
new mechanism to prevent a tokenstream to grow with a zero delta capacity.
ChangeLog:
* libgrust/libproc_macro/tokenstream.cc (TokenStream::grow): Add
minimum growing capacity.
(TokenStream::push): Change condition.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | libgrust/libproc_macro/tokenstream.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libgrust/libproc_macro/tokenstream.cc b/libgrust/libproc_macro/tokenstream.cc index 12d4543..25e42dc 100644 --- a/libgrust/libproc_macro/tokenstream.cc +++ b/libgrust/libproc_macro/tokenstream.cc @@ -48,8 +48,9 @@ TokenStream::make_tokenstream (std::uint64_t capacity) void TokenStream::grow (std::uint64_t delta) { - auto new_capacity = capacity + delta; + auto new_capacity = capacity + (delta != 0 ? delta : 1); auto *new_data = new TokenTree[new_capacity]; + capacity = new_capacity; std::memcpy (new_data, data, size); delete[] data; data = new_data; @@ -58,7 +59,7 @@ TokenStream::grow (std::uint64_t delta) void TokenStream::push (TokenTree tree) { - if (size == capacity) + if (size >= capacity) grow (capacity); data[size] = tree; size++; |