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> | 2024-01-16 18:46:26 +0100 |
| commit | 22ba7ea9eecbd1a19757d694b84e5a80b811b003 (patch) | |
| tree | d6f8be4f63526b7fddd6ff1d34d8e25db47138df /libgrust | |
| parent | 5c20c980f74d302a4c62590cb3da9b16d4199c37 (diff) | |
gccrs: 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.
libgrust/ChangeLog:
* 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>
Diffstat (limited to 'libgrust')
| -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 12d45431601..25e42dc3dc9 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++; |
