blob: c13013400963d346b56b8053158ce5f9fa2de0a3 [file] [log] [blame]
#include "P3.h"
#include "P3Error.h"
#include "P3Reader.h"
#include "P3Extractor.h"
#include "P3Object.h"
#include "P3Interpretor.h"
using namespace p3;
P3::P3(mvm::BumpPtrAllocator& alloc, mvm::VMKit* vmkit) : mvm::VirtualMachine(alloc, vmkit) {
}
void P3::finalizeObject(mvm::gc* obj) { NI(); }
mvm::gc** P3::getReferent(mvm::gc* ref) { NI(); }
void P3::setReferent(mvm::gc* ref, mvm::gc* val) { NI(); }
bool P3::enqueueReference(mvm::gc* _obj) { NI(); }
size_t P3::getObjectSize(mvm::gc* object) { NI(); }
const char* P3::getObjectTypeName(mvm::gc* object) { NI(); }
void P3::runFile(const char* fileName) {
mvm::BumpPtrAllocator allocator;
P3ByteCode* bc = P3Reader::openFile(allocator, fileName);
if(!bc)
fatal("unable to open: %s", fileName);
P3Reader reader(bc);
reader.readU2(); // version 0xf2d1 (???)
reader.readU2(); // magic 0xa0d
reader.readU4(); // last modification
P3Extractor extractor(&reader);
P3Object* obj = extractor.readObject();
if(!obj->isCode())
fatal("%s does not contain a code", fileName);
(new P3Interpretor(obj->asCode()))->execute();
}
void P3::runApplicationImpl(int argc, char** argv) {
if(argc < 2)
fatal("usage: %s filename", argv[0]);
runFile(argv[1]);
}