blob: 349a2a84e9211523a5b78d4ef98d243603e9ea18 [file] [log] [blame]
//===----------- GC.h - Garbage Collection Interface -----------------------===//
//
// The Micro Virtual Machine
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MVM_GC_H
#define MVM_GC_H
#include <stdint.h>
#include "mvm/System.h"
class VirtualTable;
class gcRoot {
public:
virtual ~gcRoot() {}
virtual void tracer(word_t closure) {}
word_t header;
/// getVirtualTable - Returns the virtual table of this object.
///
VirtualTable* getVirtualTable() const {
return ((VirtualTable**)(this))[0];
}
/// setVirtualTable - Sets the virtual table of this object.
///
void setVirtualTable(VirtualTable* VT) {
((VirtualTable**)(this))[0] = VT;
}
};
namespace mvm {
// TODO(ngeoffray): Make these two constants easily configurable. For now they
// work for all our supported GCs.
static const uint32_t GCBits = 8;
static const bool MovesObject = true;
static const uint32_t HashBits = 8;
static const uint64_t GCBitMask = ((1 << GCBits) - 1);
}
#endif