diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-04-12 17:58:27 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:34:12 +0100 |
commit | b44757f8360c44bb83e45bf7a0d5dc10ce4f4916 (patch) | |
tree | 00c3145ac2c99c83e060126f217337c61945d935 /libgrust | |
parent | 2fa0bbc3ee6551e1cf67408ef2ce7673177303e7 (diff) | |
download | gcc-b44757f8360c44bb83e45bf7a0d5dc10ce4f4916.zip gcc-b44757f8360c44bb83e45bf7a0d5dc10ce4f4916.tar.gz gcc-b44757f8360c44bb83e45bf7a0d5dc10ce4f4916.tar.bz2 |
gccrs: libproc_macro: Add remaining drop functions
Remaining structures from the rust bridge that missed a drop function
now have one.
libgrust/ChangeLog:
* libproc_macro/group.cc (Group::drop): Add drop
implementation.
* libproc_macro/group.h: Add drop prototype.
* libproc_macro/tokenstream.cc (TokenStream::drop): Add
drop implementation.
(TokenStream__drop): Change to a call to TokenStream::drop.
* libproc_macro/tokenstream.h: Add drop prototype.
* libproc_macro/tokentree.cc (TokenTree::drop): Add
drop implementation.
* libproc_macro/tokentree.h: Add drop prototype.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'libgrust')
-rw-r--r-- | libgrust/libproc_macro/group.cc | 6 | ||||
-rw-r--r-- | libgrust/libproc_macro/group.h | 2 | ||||
-rw-r--r-- | libgrust/libproc_macro/tokenstream.cc | 17 | ||||
-rw-r--r-- | libgrust/libproc_macro/tokenstream.h | 2 | ||||
-rw-r--r-- | libgrust/libproc_macro/tokentree.cc | 19 | ||||
-rw-r--r-- | libgrust/libproc_macro/tokentree.h | 2 |
6 files changed, 44 insertions, 4 deletions
diff --git a/libgrust/libproc_macro/group.cc b/libgrust/libproc_macro/group.cc index e6fdce5..c5948ed 100644 --- a/libgrust/libproc_macro/group.cc +++ b/libgrust/libproc_macro/group.cc @@ -30,4 +30,10 @@ Group::make_group (TokenStream::TokenStream stream, Delimiter delim) return {delim, stream}; } +void +Group::drop (Group *g) +{ + TokenStream::TokenStream::drop (&g->stream); +} + } // namespace Group diff --git a/libgrust/libproc_macro/group.h b/libgrust/libproc_macro/group.h index 09a7add..bf2a23f 100644 --- a/libgrust/libproc_macro/group.h +++ b/libgrust/libproc_macro/group.h @@ -42,6 +42,8 @@ struct Group public: static Group make_group (TokenStream::TokenStream stream, Delimiter delim); + + static void drop (Group *g); }; } // namespace Group diff --git a/libgrust/libproc_macro/tokenstream.cc b/libgrust/libproc_macro/tokenstream.cc index b8116c1..921cc22 100644 --- a/libgrust/libproc_macro/tokenstream.cc +++ b/libgrust/libproc_macro/tokenstream.cc @@ -64,6 +64,18 @@ TokenStream::push (TokenTree::TokenTree tree) size++; } +void +TokenStream::drop (TokenStream *stream) +{ + for (std::uint64_t i = 0; i < stream->size; i++) + { + TokenTree::TokenTree::drop (&stream->data[i]); + } + delete[] stream->data; + stream->capacity = 0; + stream->size = 0; +} + extern "C" TokenStream TokenStream__new () { @@ -101,10 +113,7 @@ TokenStream__clone (const TokenStream *ts) extern "C" void TokenStream__drop (TokenStream *stream) { - // FIXME: Also drop stream components - delete[] stream->data; - stream->capacity = 0; - stream->size = 0; + TokenStream::drop (stream); } } // namespace TokenStream diff --git a/libgrust/libproc_macro/tokenstream.h b/libgrust/libproc_macro/tokenstream.h index 513553e..909e6f4 100644 --- a/libgrust/libproc_macro/tokenstream.h +++ b/libgrust/libproc_macro/tokenstream.h @@ -49,6 +49,8 @@ public: static TokenStream make_tokenstream (std::vector<TokenTree::TokenTree> vec); static TokenStream make_tokenstream (std::uint64_t capacity = DEFAULT_CAPACITY); + + static void drop (TokenStream *stream); }; extern "C" TokenStream diff --git a/libgrust/libproc_macro/tokentree.cc b/libgrust/libproc_macro/tokentree.cc index fd9d981..924e50c 100644 --- a/libgrust/libproc_macro/tokentree.cc +++ b/libgrust/libproc_macro/tokentree.cc @@ -56,4 +56,23 @@ TokenTree::make_tokentree (Literal::Literal literal) return {LITERAL, payload}; } +void +TokenTree::drop (TokenTree *tt) +{ + switch (tt->tag) + { + case GROUP: + Group::Group::drop (&tt->payload.group); + break; + case IDENT: + Ident::Ident::drop (&tt->payload.ident); + break; + case LITERAL: + Literal::Literal::drop (&tt->payload.literal); + break; + case PUNCT: + break; + } +} + } // namespace TokenTree diff --git a/libgrust/libproc_macro/tokentree.h b/libgrust/libproc_macro/tokentree.h index a982bfc..86fc5eb 100644 --- a/libgrust/libproc_macro/tokentree.h +++ b/libgrust/libproc_macro/tokentree.h @@ -56,6 +56,8 @@ public: static TokenTree make_tokentree (Ident::Ident ident); static TokenTree make_tokentree (Punct::Punct punct); static TokenTree make_tokentree (Literal::Literal literal); + + static void drop (TokenTree *tt); }; } // namespace TokenTree |