Skip to content

Commit 32273ce

Browse files
authored
Merge pull request #2064 from anutosh491/GSoC_PR4.1
Added support for freeing basic variables
2 parents c210323 + 9157a20 commit 32273ce

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/libasr/codegen/asr_to_c_cpp.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class SymEngineQueue {
8989
std::vector<std::string> queue;
9090
int queue_front = -1;
9191
std::string& symengine_src;
92+
std::unordered_set<std::string> variables_to_free;
9293

9394
SymEngineQueue(std::string& symengine_src) : symengine_src(symengine_src) {}
9495

@@ -102,11 +103,13 @@ class SymEngineQueue {
102103
symengine_src = indent + "basic " + var + ";\n";
103104
symengine_src += indent + "basic_new_stack(" + var + ");\n";
104105
}
106+
variables_to_free.insert(queue[queue_front]);
105107
return queue[queue_front++];
106108
}
107109

108110
void pop() {
109111
LCOMPILERS_ASSERT(queue_front != -1 && queue_front < static_cast<int>(queue.size()));
112+
variables_to_free.insert(queue[queue_front]);
110113
queue_front++;
111114
}
112115
};
@@ -783,6 +786,10 @@ R"(#include <stdio.h>
783786
+ ";\n";
784787
}
785788

789+
for (const auto& var : symengine_queue.variables_to_free) {
790+
current_body += indent + "basic_free_stack(" + var + ");\n";
791+
}
792+
symengine_queue.variables_to_free.clear();
786793
if (decl.size() > 0 || current_body.size() > 0) {
787794
sub += "{\n" + decl + current_body + "}\n";
788795
} else {

0 commit comments

Comments
 (0)