[Scummvm-git-logs] scummvm master -> 0094b4225c6a18cdc388b4cfc7caf719ea18a796
dreammaster
dreammaster at scummvm.org
Sun Jul 15 01:26:54 CEST 2018
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0094b4225c TITANIC: More properly handle parser clearing after sentence processing
Commit: 0094b4225c6a18cdc388b4cfc7caf719ea18a796
https://github.com/scummvm/scummvm/commit/0094b4225c6a18cdc388b4cfc7caf719ea18a796
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2018-07-14T16:25:14-07:00
Commit Message:
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.
Changed paths:
engines/titanic/true_talk/tt_parser.cpp
engines/titanic/true_talk/tt_parser.h
diff --git a/engines/titanic/true_talk/tt_parser.cpp b/engines/titanic/true_talk/tt_parser.cpp
index 6b69c90..4abe9e5 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 d39cf50..5930ea2 100644
--- a/engines/titanic/true_talk/tt_parser.h
+++ b/engines/titanic/true_talk/tt_parser.h
@@ -77,6 +77,11 @@ private:
TTconcept *_currentConceptP;
private:
/**
+ * Clear the parser
+ */
+ void clear();
+
+ /**
* Load the data for a given array resource
*/
void loadArray(StringArray &arr, const CString &name);
More information about the Scummvm-git-logs
mailing list