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