From 22ba7ea9eecbd1a19757d694b84e5a80b811b003 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Thu, 18 May 2023 16:18:58 +0200 Subject: [PATCH] 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 --- libgrust/libproc_macro/tokenstream.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libgrust/libproc_macro/tokenstream.cc b/libgrust/libproc_macro/tokenstream.cc index 12d454316012..25e42dc3dc91 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++; -- 2.47.2