Properly clear up memory of parsed results
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user