aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authormd52011-03-08 14:46:03 +0200
committermd52011-03-08 14:46:03 +0200
commit0642b30933b464ddffff591ca672345d0ec55103 (patch)
tree7bbb6fb11aa1b1e51f0b348ab5fac073f0df7001 /engines/sci/engine
parentaa452d3aeb3e2506c7386554d5dfbe852b8ae475 (diff)
downloadscummvm-rg350-0642b30933b464ddffff591ca672345d0ec55103.tar.gz
scummvm-rg350-0642b30933b464ddffff591ca672345d0ec55103.tar.bz2
scummvm-rg350-0642b30933b464ddffff591ca672345d0ec55103.zip
SCI: Cleanup
Diffstat (limited to 'engines/sci/engine')
-rw-r--r--engines/sci/engine/gc.cpp20
-rw-r--r--engines/sci/engine/segment.cpp58
-rw-r--r--engines/sci/engine/segment.h1
3 files changed, 24 insertions, 55 deletions
diff --git a/engines/sci/engine/gc.cpp b/engines/sci/engine/gc.cpp
index 6d00c20422..1f24e68da7 100644
--- a/engines/sci/engine/gc.cpp
+++ b/engines/sci/engine/gc.cpp
@@ -31,6 +31,24 @@ namespace Sci {
//#define GC_DEBUG_CODE
+#ifdef GC_DEBUG_CODE
+const char *segmentTypeNames[] = {
+ "invalid", // 0
+ "script", // 1
+ "clones", // 2
+ "locals", // 3
+ "stack", // 4
+ "obsolete", // 5: obsolete system strings
+ "lists", // 6
+ "nodes", // 7
+ "hunk", // 8
+ "dynmem", // 9
+ "obsolete", // 10: obsolete system strings
+ "array", // 11: SCI32 arrays
+ "string" // 12: SCI32 strings
+};
+#endif
+
struct WorklistManager {
Common::Array<reg_t> _worklist;
AddrSet _map; // used for 2 contains() calls, inside push() and run_gc()
@@ -186,7 +204,7 @@ void run_gc(EngineState *s) {
if (mobj != NULL) {
#ifdef GC_DEBUG_CODE
const SegmentType type = mobj->getType();
- segnames[type] = SegmentObj::getSegmentTypeName(type);
+ segnames[type] = segmentTypeNames[type];
#endif
// Get a list of all deallocatable objects in this segment,
diff --git a/engines/sci/engine/segment.cpp b/engines/sci/engine/segment.cpp
index d1f56f0da2..2af4771cea 100644
--- a/engines/sci/engine/segment.cpp
+++ b/engines/sci/engine/segment.cpp
@@ -39,7 +39,6 @@ namespace Sci {
//#define GC_DEBUG // Debug garbage collection
//#define GC_DEBUG_VERBOSE // Debug garbage verbosely
-
SegmentObj *SegmentObj::createSegmentObj(SegmentType type) {
SegmentObj *mem = 0;
switch (type) {
@@ -85,47 +84,6 @@ SegmentObj *SegmentObj::createSegmentObj(SegmentType type) {
return mem;
}
-const char *SegmentObj::getSegmentTypeName(SegmentType type) {
- switch (type) {
- case SEG_TYPE_SCRIPT:
- return "script";
- break;
- case SEG_TYPE_CLONES:
- return "clones";
- break;
- case SEG_TYPE_LOCALS:
- return "locals";
- break;
- case SEG_TYPE_STACK:
- return "stack";
- break;
- case SEG_TYPE_HUNK:
- return "hunk";
- break;
- case SEG_TYPE_LISTS:
- return "lists";
- break;
- case SEG_TYPE_NODES:
- return "nodes";
- break;
- case SEG_TYPE_DYNMEM:
- return "dynmem";
- break;
-#ifdef ENABLE_SCI32
- case SEG_TYPE_ARRAY:
- return "array";
- break;
- case SEG_TYPE_STRING:
- return "string";
- break;
-#endif
- default:
- error("Unknown SegmentObj type %d", type);
- break;
- }
- return NULL;
-}
-
SegmentRef SegmentObj::dereference(reg_t pointer) {
error("Error: Trying to dereference pointer %04x:%04x to inappropriate segment",
PRINT_REG(pointer));
@@ -220,8 +178,6 @@ Common::Array<reg_t> CloneTable::listAllOutgoingReferences(reg_t addr) const {
void CloneTable::freeAtAddress(SegManager *segMan, reg_t addr) {
#ifdef GC_DEBUG
- // assert(addr.segment == _segId);
-
Object *victim_obj = &(_table[addr.offset]);
if (!(victim_obj->_flags & OBJECT_FLAG_FREED))
@@ -229,12 +185,11 @@ void CloneTable::freeAtAddress(SegManager *segMan, reg_t addr) {
#ifdef GC_DEBUG_VERBOSE
else
warning("[GC-DEBUG] Clone %04x:%04x: Freeing", PRINT_REG(addr));
+
+ warning("[GC] Clone had pos %04x:%04x", PRINT_REG(victim_obj->pos));
#endif
#endif
- /*
- warning("[GC] Clone %04x:%04x: Freeing", PRINT_REG(addr));
- warning("[GC] Clone had pos %04x:%04x", PRINT_REG(victim_obj->pos));
- */
+
freeEntry(addr.offset);
}
@@ -251,7 +206,6 @@ reg_t LocalVariables::findCanonicAddress(SegManager *segMan, reg_t addr) const {
Common::Array<reg_t> LocalVariables::listAllOutgoingReferences(reg_t addr) const {
Common::Array<reg_t> tmp;
-// assert(addr.segment == _segId);
for (uint i = 0; i < _locals.size(); i++)
tmp.push_back(_locals[i]);
@@ -262,8 +216,7 @@ Common::Array<reg_t> LocalVariables::listAllOutgoingReferences(reg_t addr) const
//-------------------- stack --------------------
reg_t DataStack::findCanonicAddress(SegManager *segMan, reg_t addr) const {
- addr.offset = 0;
- return addr;
+ return make_reg(addr.segment, 0);
}
Common::Array<reg_t> DataStack::listAllOutgoingReferences(reg_t object) const {
@@ -327,8 +280,7 @@ Common::Array<reg_t> NodeTable::listAllOutgoingReferences(reg_t addr) const {
//-------------------- dynamic memory --------------------
reg_t DynMem::findCanonicAddress(SegManager *segMan, reg_t addr) const {
- addr.offset = 0;
- return addr;
+ return make_reg(addr.segment, 0);
}
Common::Array<reg_t> DynMem::listAllDeallocatable(SegmentId segId) const {
diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h
index 56a6c71590..c3ce671632 100644
--- a/engines/sci/engine/segment.h
+++ b/engines/sci/engine/segment.h
@@ -84,7 +84,6 @@ struct SegmentObj : public Common::Serializable {
public:
static SegmentObj *createSegmentObj(SegmentType type);
- static const char *getSegmentTypeName(SegmentType type);
public:
SegmentObj(SegmentType type) : _type(type) {}