got rid of double-free conditions and segfault
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user