diff options
author | md5 | 2011-03-08 14:46:03 +0200 |
---|---|---|
committer | md5 | 2011-03-08 14:46:03 +0200 |
commit | 0642b30933b464ddffff591ca672345d0ec55103 (patch) | |
tree | 7bbb6fb11aa1b1e51f0b348ab5fac073f0df7001 | |
parent | aa452d3aeb3e2506c7386554d5dfbe852b8ae475 (diff) | |
download | scummvm-rg350-0642b30933b464ddffff591ca672345d0ec55103.tar.gz scummvm-rg350-0642b30933b464ddffff591ca672345d0ec55103.tar.bz2 scummvm-rg350-0642b30933b464ddffff591ca672345d0ec55103.zip |
SCI: Cleanup
-rw-r--r-- | engines/sci/engine/gc.cpp | 20 | ||||
-rw-r--r-- | engines/sci/engine/segment.cpp | 58 | ||||
-rw-r--r-- | engines/sci/engine/segment.h | 1 |
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) {} |