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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon May 4 17:04:55 CEST 2009


Revision: 40305
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40305&view=rev
Author:   fingolfin
Date:     2009-05-04 15:04:55 +0000 (Mon, 04 May 2009)

Log Message:
-----------
SCI: Fixed savestate loading

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/seg_manager.cpp
    scummvm/trunk/engines/sci/engine/vm.h

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-05-04 15:04:39 UTC (rev 40304)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-05-04 15:04:55 UTC (rev 40305)
@@ -361,11 +361,10 @@
 }
 
 void Script::freeScript() {
-	if (buf) {
-		free(buf);
-		buf = NULL;
-		buf_size = 0;
-	}
+	free(buf);
+	buf = NULL;
+	buf_size = 0;
+
 	if (objects) {
 		for (int i = 0; i < objects_nr; i++) {
 			Object *object = &objects[i];
@@ -381,7 +380,9 @@
 	}
 
 	delete obj_indices;
+	obj_indices = 0;
 	free(code);
+	code = 0;
 }
 
 // memory operations
@@ -1042,16 +1043,15 @@
 
 
 Clone *SegManager::alloc_Clone(reg_t *addr) {
-	MemObject *mobj;
 	CloneTable *table;
 	int offset;
 
 	if (!Clones_seg_id) {
-		mobj = allocNonscriptSegment(MEM_OBJ_CLONES, &(Clones_seg_id));
+		table = (CloneTable *)allocNonscriptSegment(MEM_OBJ_CLONES, &(Clones_seg_id));
+		table->initTable();
 	} else
-		mobj = _heap[Clones_seg_id];
+		table = (CloneTable *)_heap[Clones_seg_id];
 
-	table = (CloneTable *)mobj;
 	offset = table->allocEntry();
 
 	*addr = make_reg(Clones_seg_id, offset);
@@ -1059,16 +1059,15 @@
 }
 
 List *SegManager::alloc_List(reg_t *addr) {
-	MemObject *mobj;
 	ListTable *table;
 	int offset;
 
 	if (!Lists_seg_id) {
-		mobj = allocNonscriptSegment(MEM_OBJ_LISTS, &(Lists_seg_id));
+		table = (ListTable *)allocNonscriptSegment(MEM_OBJ_LISTS, &(Lists_seg_id));
+		table->initTable();
 	} else
-		mobj = _heap[Lists_seg_id];
+		table = (ListTable *)_heap[Lists_seg_id];
 
-	table = (ListTable *)mobj;
 	offset = table->allocEntry();
 
 	*addr = make_reg(Lists_seg_id, offset);
@@ -1076,16 +1075,15 @@
 }
 
 Node *SegManager::alloc_Node(reg_t *addr) {
-	MemObject *mobj;
 	NodeTable *table;
 	int offset;
 
 	if (!Nodes_seg_id) {
-		mobj = allocNonscriptSegment(MEM_OBJ_NODES, &(Nodes_seg_id));
+		table = (NodeTable *)allocNonscriptSegment(MEM_OBJ_NODES, &(Nodes_seg_id));
+		table->initTable();
 	} else
-		mobj = _heap[Nodes_seg_id];
+		table = (NodeTable *)_heap[Nodes_seg_id];
 
-	table = (NodeTable *)mobj;
 	offset = table->allocEntry();
 
 	*addr = make_reg(Nodes_seg_id, offset);
@@ -1093,16 +1091,15 @@
 }
 
 Hunk *SegManager::alloc_Hunk(reg_t *addr) {
-	MemObject *mobj;
 	HunkTable *table;
 	int offset;
 
 	if (!Hunks_seg_id) {
-		mobj = allocNonscriptSegment(MEM_OBJ_HUNK, &(Hunks_seg_id));
+		table = (HunkTable *)allocNonscriptSegment(MEM_OBJ_HUNK, &(Hunks_seg_id));
+		table->initTable();
 	} else
-		mobj = _heap[Hunks_seg_id];
+		table = (HunkTable *)_heap[Hunks_seg_id];
 
-	table = (HunkTable *)mobj;
 	offset = table->allocEntry();
 
 	*addr = make_reg(Hunks_seg_id, offset);

Modified: scummvm/trunk/engines/sci/engine/vm.h
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.h	2009-05-04 15:04:39 UTC (rev 40304)
+++ scummvm/trunk/engines/sci/engine/vm.h	2009-05-04 15:04:55 UTC (rev 40305)
@@ -406,9 +406,6 @@
 	Entry *table;
 
 public:
-	Table() {
-		initTable();
-	}
 	~Table() {
 		// FIXME: Shouldn't we make sure that all table entries are disposed
 		// of properly?


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