jni_internal.h revision f2682d5a6ce0f7de58da8fd4ec8aec200c43b92e
1df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers// Copyright 2011 Google Inc. All Rights Reserved. 2df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers 3df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers#ifndef ART_SRC_JNI_INTERNAL_H_ 4df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers#define ART_SRC_JNI_INTERNAL_H_ 5df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers 6df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers#include "jni.h" 7578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 8578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "assembler.h" 9578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "macros.h" 10df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers 11df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogersnamespace art { 12df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers 13f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughesclass Runtime; 1440ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughesclass Thread; 15ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 16f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott HughesJavaVM* CreateJavaVM(Runtime* runtime); 1740ef99eb9dd91c2fa549f40973964529c927bb3cElliott HughesJNIEnv* CreateJNIEnv(); 18ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 19f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughesstruct JavaVMExt { 20f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes // Must be first to correspond with JNIEnv. 21f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes const struct JNIInvokeInterface* fns; 22f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes 23f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes Runtime* runtime; 24f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes}; 25f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes 2640ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughesstruct JNIEnvExt { 27f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes // Must be first to correspond with JavaVM. 28f2682d5a6ce0f7de58da8fd4ec8aec200c43b92eElliott Hughes const struct JNINativeInterface* fns; 29ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 3040ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes Thread* self; 31ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 3240ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes // Are we in a "critical" JNI call? 3340ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes bool critical; 34ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 3540ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes // Used to help call synchronized native methods. 3640ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes // TODO: make jni_compiler.cc do the indirection itself. 3740ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes void (*MonitorEnterHelper)(JNIEnv*, jobject); 3840ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes void (*MonitorExitHelper)(JNIEnv*, jobject); 39ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro}; 40ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 41df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers} // namespace art 42ea4dca856f8c19299a1858d2cc1f35b03ca0f694Carl Shapiro 43df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers#endif // ART_SRC_JNI_INTERNAL_H_ 44