blob: e5751f5c4dbfd70fe8e15608001b75939b6d2139 [file] [log] [blame]
//===--------- Object.cc - Common objects for vmlets ----------------------===//
//
// The Micro Virtual Machine
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <cstdio>
#include <cstdlib>
#include "mvm/GC.h"
#include "mvm/PrintBuffer.h"
using namespace mvm;
extern "C" void printFloat(float f) {
fprintf(stderr, "%f\n", f);
}
extern "C" void printDouble(double d) {
fprintf(stderr, "%f\n", d);
}
extern "C" void printLong(sint64 l) {
fprintf(stderr, "%lld\n", (long long int)l);
}
extern "C" void printInt(sint32 i) {
fprintf(stderr, "%d\n", i);
}
extern "C" void printObject(void* ptr) {
fprintf(stderr, "%p\n", ptr);
}
extern "C" void write_ptr(PrintBuffer* buf, void* obj) {
buf->writePtr(obj);
}
extern "C" void write_int(PrintBuffer* buf, int a) {
buf->writeS4(a);
}
extern "C" void write_str(PrintBuffer* buf, char* a) {
buf->write(a);
}
void OldObject::default_print(const gc *o, PrintBuffer *buf) {
llvm_gcroot(o, 0);
buf->write("<OldObject@");
buf->writePtr((void*)o);
buf->write(">");
}
#if 0
// old stuff
class UTF8Builder {
uint16 *buf;
uint32 cur;
uint32 size;
public:
UTF8Builder(size_t size) {
size = (size < 4) ? 4 : size;
this->buf = new uint16[size];
this->size = size;
}
UTF8Builder *append(const UTF8 *utf8, uint32 start=0, uint32 length=0xffffffff) {
length = length == 0xffffffff ? utf8->size : length;
uint32 req = cur + length;
if(req > size) {
uint32 newSize = size<<1;
while(req < newSize)
newSize <<= 1;
uint16 *newBuf = new uint16[newSize];
memcpy(newBuf, buf, cur<<1);
delete []buf;
buf = newBuf;
size = newSize;
}
memcpy(buf + cur, &utf8->elements + start, length<<1);
cur = req;
return this;
}
const UTF8 *toUTF8(UTF8Map *map) {
return map->lookupOrCreateReader(buf, size);
}
~UTF8Builder() {
delete [] buf;
}
};
#endif