blob: e7209c73c1c85dcf781c7e5f7c91f7244c9ba8ce [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 <map>
struct VirtualTable {
uintptr_t destructor;
uintptr_t operatorDelete;
uintptr_t tracer;
uintptr_t* getFunctions() {
return &destructor;
}
VirtualTable(uintptr_t d, uintptr_t o, uintptr_t t) {
destructor = d;
operatorDelete = o;
tracer = t;
}
VirtualTable() {}
static void emptyTracer(void*) {}
};
class gcRoot {
public:
virtual ~gcRoot() {}
virtual void tracer(void) {}
/// 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 {
class Thread;
class StackScanner {
public:
virtual void scanStack(mvm::Thread* th) = 0;
virtual ~StackScanner() {}
};
class UnpreciseStackScanner : public StackScanner {
public:
virtual void scanStack(mvm::Thread* th);
};
class PreciseStackScanner : public StackScanner {
public:
virtual void scanStack(mvm::Thread* th);
};
}
#endif