| //===--------- 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 |