| //===----------------------- LinkN3Runtime.h ------------------------------===// |
| //=== ------------- Reference all runtime functions -----------------------===// |
| // |
| // The VMKit project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef JNJVM_LINK_N3_RUNTIME_H |
| #define JNJVM_LINK_N3_RUNTIME_H |
| |
| namespace mvm { |
| class UTF8; |
| } |
| |
| namespace n3 { |
| using mvm::UTF8; |
| class CacheNode; |
| class VMClass; |
| class VMClassArray; |
| class VMCommonClass; |
| class VMObject; |
| } |
| |
| using namespace n3; |
| |
| |
| extern "C" VMObject* initialiseClass(VMClass* cl); |
| extern "C" void n3ClassCastException(); |
| extern "C" void n3NullPointerException(); |
| extern "C" void indexOutOfBounds(); |
| extern "C" VMObject* newString(const UTF8* utf8); |
| extern "C" bool n3InstanceOf(VMObject* obj, VMCommonClass* cl); |
| extern "C" void* GetCppException(); |
| extern "C" void ThrowException(VMObject* obj); |
| extern "C" VMObject* GetCLIException(); |
| extern "C" bool CompareException(VMClass* cl); |
| extern "C" void ClearException(); |
| extern "C" VMObject* doMultiNew(VMClassArray* cl, ...); |
| extern "C" CacheNode* n3VirtualLookup(CacheNode* cache, VMObject *obj); |
| extern "C" VMObject* newObject(VMClass* cl); |
| extern "C" VMObject* newArray(VMClassArray* cl, sint32 nb); |
| |
| namespace { |
| struct ForceRuntimeLinking { |
| ForceRuntimeLinking() { |
| // We must reference the passes in such a way that compilers will not |
| // delete it all as dead code, even with whole program optimization, |
| // yet is effectively a NO-OP. As the compiler isn't smart enough |
| // to know that getenv() never returns -1, this will do the job. |
| if (std::getenv("bar") != (char*) -1) |
| return; |
| (void) initialiseClass(0); |
| (void) n3ClassCastException(); |
| (void )n3NullPointerException(); |
| (void) indexOutOfBounds(); |
| (void) newString(0); |
| (void) n3InstanceOf(0, 0); |
| (void) GetCppException(); |
| (void) ThrowException(0); |
| (void) GetCLIException(); |
| (void) CompareException(0); |
| (void) ClearException(); |
| (void) doMultiNew(0); |
| (void) n3VirtualLookup(0, 0); |
| (void) newObject(0); |
| (void) newArray(0, 0); |
| } |
| } ForcePassLinking; // Force link by creating a global definition. |
| } |
| |
| |
| |
| #endif //JNJVM_LINK_N3_RUNTIME_H |