got rid of double-free conditions and segfault

This commit is contained in:
Samuel D. Crow
2021-03-29 14:01:13 -05:00
parent bb2be9c16c
commit b0072dffa4
3 changed files with 44 additions and 12 deletions

View File

@@ -140,6 +140,7 @@ void ifStatement::alternative(expression *e)
{
done->generateJumpTo();
this->chain->generate();
delete this->chain;
this->chain=nullptr;
if(e!=nullptr)
{
@@ -156,6 +157,12 @@ void ifStatement::close()
this->done->generate();
}
ifStatement::~ifStatement()
{
delete this->redo;
delete this->done;
}
/* Loop definitions */
repeatLoop::repeatLoop():codeType(T_REPEATLOOP)
{
@@ -176,6 +183,12 @@ void repeatLoop::close(expression *e)
loopEnd->generate();
}
repeatLoop::~repeatLoop()
{
delete loopStart;
delete loopEnd;
}
doLoop::doLoop():codeType(T_DOLOOP)
{
this->loopStart=new label();
@@ -194,6 +207,12 @@ void doLoop::close()
this->loopEnd->generate();
}
doLoop::~doLoop()
{
delete loopStart;
delete loopEnd;
}
whileLoop::whileLoop(expression *e):codeType(T_WHILELOOP)
{
loopContinue=new label();
@@ -216,6 +235,14 @@ void whileLoop::close()
loopEnd->generate();
}
whileLoop::~whileLoop()
{
delete loopContinue;
delete loopStart;
delete loopEnd;
}
forLoop::forLoop(variableType *v, expression *start, expression *stop,
expression *stepVal):codeType(T_FORLOOP)
{
@@ -267,3 +294,10 @@ void forLoop::close()
var->assignment(stepper);
infrastructure->close();
}
forLoop::~forLoop()
{
delete startTemp;
delete stopTemp;
delete infrastructure;
}