[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