[Scummvm-cvs-logs] SF.net SVN: scummvm:[39669] scummvm/trunk/engines/sci

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Tue Mar 24 18:41:26 CET 2009


Revision: 39669
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39669&view=rev
Author:   fingolfin
Date:     2009-03-24 17:41:26 +0000 (Tue, 24 Mar 2009)

Log Message:
-----------
SCI: Turned synonyms list into a Common::List

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/game.cpp
    scummvm/trunk/engines/sci/engine/kstring.cpp
    scummvm/trunk/engines/sci/engine/said.y
    scummvm/trunk/engines/sci/engine/scriptdebug.cpp
    scummvm/trunk/engines/sci/engine/state.cpp
    scummvm/trunk/engines/sci/engine/state.h
    scummvm/trunk/engines/sci/scicore/vocabulary.cpp
    scummvm/trunk/engines/sci/scicore/vocabulary.h

Modified: scummvm/trunk/engines/sci/engine/game.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/game.cpp	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/engine/game.cpp	2009-03-24 17:41:26 UTC (rev 39669)
@@ -589,8 +589,7 @@
 	s->parser_valid = 0; // Invalidate parser
 	s->parser_event = NULL_REG; // Invalidate parser event
 
-	s->synonyms = NULL;
-	s->synonyms_nr = 0; // No synonyms
+	s->_synonyms.clear(); // No synonyms
 
 	// Initialize send_calls buffer
 
@@ -664,9 +663,7 @@
 
 	delete s->seg_manager;
 
-	free(s->synonyms);
-	s->synonyms = NULL;
-	s->synonyms_nr = 0;
+	s->_synonyms.clear();
 
 	sciprintf("Freeing miscellaneous data...\n");
 

Modified: scummvm/trunk/engines/sci/engine/kstring.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kstring.cpp	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/engine/kstring.cpp	2009-03-24 17:41:26 UTC (rev 39669)
@@ -185,13 +185,9 @@
 	List *list;
 	Node *node;
 	int script;
-	int synpos = 0;
 
-	if (s->synonyms_nr)
-		free(s->synonyms);
+	s->_synonyms.clear();
 
-	s->synonyms_nr = 0;
-
 	list = LOOKUP_LIST(GET_SEL32(object, elements));
 	node = LOOKUP_NODE(list->first);
 
@@ -203,22 +199,14 @@
 		script = GET_SEL32V(objpos, number);
 		seg = s->seg_manager->segGet(script);
 
-		if (seg >= 0) synonyms_nr = s->seg_manager->getSynonymsNr(seg, SEG_ID);
+		if (seg >= 0)
+			synonyms_nr = s->seg_manager->getSynonymsNr(seg, SEG_ID);
 
 		if (synonyms_nr) {
 			byte *synonyms;
 
 			synonyms = s->seg_manager->getSynonyms(seg, SEG_ID);
 			if (synonyms) {
-				int i;
-				if (s->synonyms_nr)
-					s->synonyms = (synonym_t*)sci_realloc(s->synonyms,
-					                                      sizeof(synonym_t) * (s->synonyms_nr + synonyms_nr));
-				else
-					s->synonyms = (synonym_t*)sci_malloc(sizeof(synonym_t) * synonyms_nr);
-
-				s->synonyms_nr +=  synonyms_nr;
-
 				SCIkdebug(SCIkPARSER, "Setting %d synonyms for script.%d\n",
 				          synonyms_nr, script);
 
@@ -228,11 +216,11 @@
 					/* We used to reset the corrupted value here. I really don't think it's appropriate.
 					 * Lars */
 				} else
-					for (i = 0; i < synonyms_nr; i++) {
-						s->synonyms[synpos].replaceant = (int16)READ_LE_UINT16(synonyms + i * 4);
-						s->synonyms[synpos].replacement = (int16)READ_LE_UINT16(synonyms + i * 4 + 2);
-
-						synpos++;
+					for (int i = 0; i < synonyms_nr; i++) {
+						synonym_t tmp;
+						tmp.replaceant = (int16)READ_LE_UINT16(synonyms + i * 4);
+						tmp.replacement = (int16)READ_LE_UINT16(synonyms + i * 4 + 2);
+						s->_synonyms.push_back(tmp);
 					}
 			} else
 				warning("Synonyms of script.%03d were requested, but script is not available", script);
@@ -242,10 +230,8 @@
 		node = LOOKUP_NODE(node->succ);
 	}
 
-	SCIkdebug(SCIkPARSER, "A total of %d synonyms are active now.\n", s->synonyms_nr);
+	SCIkdebug(SCIkPARSER, "A total of %d synonyms are active now.\n", s->_synonyms.size());
 
-	if (!s->synonyms_nr)
-		s->synonyms = NULL;
 	return s->r_acc;
 }
 
@@ -277,7 +263,7 @@
 
 		int syntax_fail = 0;
 
-		vocab_synonymize_tokens(words, s->synonyms, s->synonyms_nr);
+		vocab_synonymize_tokens(words, s->_synonyms);
 
 		s->r_acc = make_reg(0, 1);
 

Modified: scummvm/trunk/engines/sci/engine/said.y
===================================================================
--- scummvm/trunk/engines/sci/engine/said.y	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/engine/said.y	2009-03-24 17:41:26 UTC (rev 39669)
@@ -305,8 +305,6 @@
 static tree_t said_aug_branch(int n1, int n2, tree_t t1, tree_t t2) {
 	int retval;
 
-	// FIXME: The following code is ambiguous and *not* safely portable,
-	// due to the way the SAID_NEXT_NODE macro is implemented
 	retval = said_branch_node(SAID_NEXT_NODE,
 				said_branch_node(SAID_NEXT_NODE,
 					said_leaf_node(SAID_NEXT_NODE, n1),

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-03-24 17:41:26 UTC (rev 39669)
@@ -1037,7 +1037,7 @@
 	if (!words.empty()) {
 		int syntax_fail = 0;
 
-		vocab_synonymize_tokens(words, s->synonyms, s->synonyms_nr);
+		vocab_synonymize_tokens(words, s->_synonyms);
 
 		sciprintf("Parsed to the following blocks:\n");
 

Modified: scummvm/trunk/engines/sci/engine/state.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/state.cpp	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/engine/state.cpp	2009-03-24 17:41:26 UTC (rev 39669)
@@ -151,9 +151,6 @@
 
 	parser_valid = 0;
 
-	synonyms = 0;
-	synonyms_nr = 0;
-
 	game_obj = NULL_REG;
 
 	classtable_size = 0;

Modified: scummvm/trunk/engines/sci/engine/state.h
===================================================================
--- scummvm/trunk/engines/sci/engine/state.h	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/engine/state.h	2009-03-24 17:41:26 UTC (rev 39669)
@@ -259,8 +259,7 @@
 
 	int parser_valid; /* If something has been correctly parsed */
 
-	synonym_t *synonyms; /* The list of synonyms */
-	int synonyms_nr;
+	SynonymList _synonyms; /* The list of synonyms */
 
 	reg_t game_obj; /* Pointer to the game object */
 

Modified: scummvm/trunk/engines/sci/scicore/vocabulary.cpp
===================================================================
--- scummvm/trunk/engines/sci/scicore/vocabulary.cpp	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/scicore/vocabulary.cpp	2009-03-24 17:41:26 UTC (rev 39669)
@@ -599,16 +599,14 @@
 	sciprintf("))\n");
 }
 
-void vocab_synonymize_tokens(ResultWordList &words, synonym_t *synonyms, int synonyms_nr) {
-	int sync;
-
-	if (!synonyms || !synonyms_nr)
+void vocab_synonymize_tokens(ResultWordList &words, const SynonymList &synonyms) {
+	if (synonyms.empty())
 		return; // No synonyms: Nothing to check
 
 	for (ResultWordList::iterator i = words.begin(); i != words.end(); ++i)
-		for (sync = 0; sync < synonyms_nr; sync++)
-			if (i->group == synonyms[sync].replaceant)
-				i->group = synonyms[sync].replacement;
+		for (SynonymList::const_iterator sync = synonyms.begin(); sync != synonyms.end(); ++sync)
+			if (i->group == sync->replaceant)
+				i->group = sync->replacement;
 }
 
 } // End of namespace Sci

Modified: scummvm/trunk/engines/sci/scicore/vocabulary.h
===================================================================
--- scummvm/trunk/engines/sci/scicore/vocabulary.h	2009-03-24 15:17:25 UTC (rev 39668)
+++ scummvm/trunk/engines/sci/scicore/vocabulary.h	2009-03-24 17:41:26 UTC (rev 39669)
@@ -165,13 +165,11 @@
 	int replacement; /* The replacement word group for this one */
 };
 
+typedef Common::List<synonym_t> SynonymList;
 
 struct parse_tree_branch_t {
-
 	int id;
-
 	int data[10];
-
 };
 
 #define PARSE_TREE_NODE_LEAF 0
@@ -179,16 +177,11 @@
 
 
 struct parse_tree_node_t {
-
 	short type;  /* leaf or branch */
-
 	union {
-
 		int value;  /* For leaves */
 		short branches[2]; /* For branches */
-
 	} content;
-
 };
 
 
@@ -374,11 +367,10 @@
 */
 
 
-void vocab_synonymize_tokens(ResultWordList &words, synonym_t *synonyms, int synonyms_nr);
+void vocab_synonymize_tokens(ResultWordList &words, const SynonymList &synonyms);
 /* Synonymizes a token list
 ** Parameters: (ResultWordList &) words: The word list to synonymize
-**             (synonym_t *) synonyms: Synonym list
-**             (int) synonyms_nr: Number of synonyms in the list
+**             (const SynonymList &) synonyms: Synonym list
 */
 
 int vocab_gnf_parse(parse_tree_node_t *nodes, const ResultWordList &words,


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list