Properly clear up memory of parsed results

This commit is contained in:
2019-05-21 18:36:31 +02:00
parent 1e5cd010a1
commit 2fe6f570ec
5 changed files with 35 additions and 20 deletions

View File

@@ -24,6 +24,7 @@ public:
_start = start;
_length = length;
}
virtual ~ParsedStatement() = default;
unsigned int GetStartPosition(){
return _start;
@@ -41,6 +42,12 @@ public:
: ParsedStatement(statements.front()->GetStartPosition(), statements.back()->GetEndPosition() - statements.front()->GetStartPosition()){
_statements = std::move(statements);
}
~ParsedBlockStatement() override {
for (auto s: _statements){
delete s;
}
_statements.clear();
}
ParsedStatementKind GetKind() override{
return ParsedStatementKind ::Block;
@@ -51,12 +58,24 @@ public:
}
};
class ParsedScriptStatement : public ParsedBlockStatement{
public:
explicit ParsedScriptStatement(vector<ParsedStatement*> statements) : ParsedBlockStatement(move(statements)){}
ParsedStatementKind GetKind() final{
return ParsedStatementKind ::Script;
}
};
class ParsedExpressionStatement : public ParsedStatement{
ParsedExpression* _expression;
public:
explicit ParsedExpressionStatement(ParsedExpression* expression) : ParsedStatement(expression->GetStartPosition(), expression->GetLength()){
_expression = expression;
}
~ParsedExpressionStatement() override {
delete _expression;
}
ParsedStatementKind GetKind() final{
return ParsedStatementKind ::Expression;