From 0094b4225c6a18cdc388b4cfc7caf719ea18a796 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 14 Jul 2018 16:25:14 -0700 Subject: TITANIC: More properly handle parser clearing after sentence processing The original actually freed the parser entirely from within findFrames, and then recreated it each time a sentence is parsed. Since this is nasty, and in ScummVM _parser isn't dynamically created, I settled on adding a clear command to completely clear the parser instead. --- engines/titanic/true_talk/tt_parser.cpp | 15 ++++++++------- engines/titanic/true_talk/tt_parser.h | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'engines/titanic') diff --git a/engines/titanic/true_talk/tt_parser.cpp b/engines/titanic/true_talk/tt_parser.cpp index 6b69c903e4..4abe9e52b1 100644 --- a/engines/titanic/true_talk/tt_parser.cpp +++ b/engines/titanic/true_talk/tt_parser.cpp @@ -41,17 +41,24 @@ TTparser::TTparser(CScriptHandler *owner) : _owner(owner), _sentenceConcept(null } TTparser::~TTparser() { + clear(); +} + +void TTparser::clear() { if (_nodesP) { _nodesP->deleteSiblings(); delete _nodesP; + _nodesP = nullptr; } if (_conceptP) { _conceptP->deleteSiblings(); delete _conceptP; + _conceptP = nullptr; } delete _currentWordP; + _currentWordP = nullptr; } void TTparser::loadArray(StringArray &arr, const CString &name) { @@ -531,13 +538,7 @@ int TTparser::findFrames(TTsentence *sentence) { if (status <= 1) { status = checkForAction(); - } - - if (_nodesP) { - // This shouldn't ever happen - warning("Parser had left-over processing nodes"); - while (_nodesP) - removeNode(_nodesP); + clear(); } delete line; diff --git a/engines/titanic/true_talk/tt_parser.h b/engines/titanic/true_talk/tt_parser.h index d39cf50c33..5930ea239a 100644 --- a/engines/titanic/true_talk/tt_parser.h +++ b/engines/titanic/true_talk/tt_parser.h @@ -76,6 +76,11 @@ private: TTconcept *_conceptP; TTconcept *_currentConceptP; private: + /** + * Clear the parser + */ + void clear(); + /** * Load the data for a given array resource */ -- cgit v1.2.3