blob: 5cc9ff64f6fb977ca7588cce364386a5784faa9f [file] [log] [blame]
Ian Rogersdf20fe02011-07-20 20:34:16 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
Brian Carlstrom578bbdc2011-07-21 14:07:47 -07003#include "jni_internal.h"
Carl Shapiro2ed144c2011-07-26 16:52:08 -07004
Carl Shapiro9b9ba282011-08-14 15:30:39 -07005#include <cstdarg>
Carl Shapiro2ed144c2011-07-26 16:52:08 -07006#include <vector>
7#include <utility>
Carl Shapiro9b9ba282011-08-14 15:30:39 -07008#include <sys/mman.h>
Carl Shapiro2ed144c2011-07-26 16:52:08 -07009
Elliott Hughes40ef99e2011-08-11 17:44:34 -070010#include "class_linker.h"
Carl Shapiroea4dca82011-08-01 13:45:38 -070011#include "jni.h"
Brian Carlstrom578bbdc2011-07-21 14:07:47 -070012#include "logging.h"
Carl Shapiro9b9ba282011-08-14 15:30:39 -070013#include "object.h"
Carl Shapiro2ed144c2011-07-26 16:52:08 -070014#include "runtime.h"
Carl Shapirofc322c72011-07-27 00:20:01 -070015#include "scoped_ptr.h"
16#include "stringpiece.h"
Carl Shapiro2ed144c2011-07-26 16:52:08 -070017#include "thread.h"
Ian Rogersdf20fe02011-07-20 20:34:16 -070018
19namespace art {
20
Elliott Hughes22f40932011-08-12 13:06:37 -070021// Entry/exit processing for all JNI calls.
22//
23// This performs the necessary thread state switching, lets us amortize the
24// cost of working out the current thread, and lets us check (and repair) apps
25// that are using a JNIEnv on the wrong thread.
26class ScopedJniThreadState {
27 public:
28 explicit ScopedJniThreadState(JNIEnv* env) {
Elliott Hughesb20a5542011-08-12 18:03:12 -070029 self_ = ThreadForEnv(env);
Elliott Hughes22f40932011-08-12 13:06:37 -070030 self_->SetState(Thread::kRunnable);
31 }
32
33 ~ScopedJniThreadState() {
34 self_->SetState(Thread::kNative);
35 }
36
Elliott Hughesb20a5542011-08-12 18:03:12 -070037 Thread* Self() {
Elliott Hughes22f40932011-08-12 13:06:37 -070038 return self_;
39 }
40
Elliott Hughesb20a5542011-08-12 18:03:12 -070041 private:
42 static Thread* ThreadForEnv(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -070043 // TODO: need replacement for gDvmJni.
44 bool workAroundAppJniBugs = true;
45 Thread* env_self = reinterpret_cast<JNIEnvExt*>(env)->self;
46 Thread* self = workAroundAppJniBugs ? Thread::Current() : env_self;
47 if (self != env_self) {
Elliott Hughes330304d2011-08-12 14:28:05 -070048 LOG(ERROR) << "JNI ERROR: JNIEnv for " << *env_self
49 << " used on " << *self;
50 // TODO: dump stack
Elliott Hughes22f40932011-08-12 13:06:37 -070051 }
52 return self;
53 }
54
Elliott Hughes22f40932011-08-12 13:06:37 -070055 Thread* self_;
56 DISALLOW_COPY_AND_ASSIGN(ScopedJniThreadState);
57};
58
Carl Shapiro9b9ba282011-08-14 15:30:39 -070059void CreateInvokeStub(Assembler* assembler, Method* method);
60
61bool EnsureInvokeStub(Method* method) {
62 if (method->GetInvokeStub() != NULL) {
63 return true;
64 }
65 // TODO: use signature to find a matching stub
66 // TODO: failed, acquire a lock on the stub table
67 Assembler assembler;
68 CreateInvokeStub(&assembler, method);
69 // TODO: store native_entry in the stub table
70 int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
71 size_t length = assembler.CodeSize();
72 void* addr = mmap(NULL, length, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
73 if (addr == MAP_FAILED) {
74 PLOG(FATAL) << "mmap failed";
75 }
76 MemoryRegion region(addr, length);
77 assembler.FinalizeInstructions(region);
78 method->SetInvokeStub(reinterpret_cast<Method::InvokeStub*>(region.pointer()));
79 return true;
80}
81
Elliott Hughesd8ddfd52011-08-15 14:32:53 -070082byte* CreateArgArray(Method* method, va_list ap) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -070083 size_t num_bytes = method->NumArgArrayBytes();
84 scoped_array<byte> arg_array(new byte[num_bytes]);
85 const StringPiece& shorty = method->GetShorty();
86 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
87 switch (shorty[i]) {
88 case 'Z':
89 case 'B':
90 case 'C':
91 case 'S':
92 case 'I':
93 *reinterpret_cast<int32_t*>(&arg_array[offset]) = va_arg(ap, jint);
94 offset += 4;
95 break;
96 case 'F':
97 *reinterpret_cast<float*>(&arg_array[offset]) = va_arg(ap, jdouble);
98 offset += 4;
99 break;
100 case 'L': {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700101 // TODO: DecodeReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700102 Object* obj = reinterpret_cast<Object*>(va_arg(ap, jobject));
103 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
104 offset += sizeof(Object*);
105 break;
106 }
107 case 'D':
108 *reinterpret_cast<double*>(&arg_array[offset]) = va_arg(ap, jdouble);
109 offset += 8;
110 break;
111 case 'J':
112 *reinterpret_cast<int64_t*>(&arg_array[offset]) = va_arg(ap, jlong);
113 offset += 8;
114 break;
115 }
116 }
117 return arg_array.release();
118}
119
Elliott Hughesd8ddfd52011-08-15 14:32:53 -0700120byte* CreateArgArray(Method* method, jvalue* args) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700121 size_t num_bytes = method->NumArgArrayBytes();
122 scoped_array<byte> arg_array(new byte[num_bytes]);
123 const StringPiece& shorty = method->GetShorty();
124 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
125 switch (shorty[i]) {
126 case 'Z':
127 case 'B':
128 case 'C':
129 case 'S':
130 case 'I':
131 *reinterpret_cast<uint32_t*>(&arg_array[offset]) = args[i - 1].i;
132 offset += 4;
133 break;
134 case 'F':
135 *reinterpret_cast<float*>(&arg_array[offset]) = args[i - 1].f;
136 offset += 4;
137 break;
138 case 'L': {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700139 // TODO: DecodeReference
140 Object* obj = reinterpret_cast<Object*>(args[i - 1].l);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700141 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
142 offset += sizeof(Object*);
143 break;
144 }
145 case 'D':
146 *reinterpret_cast<double*>(&arg_array[offset]) = args[i - 1].d;
147 offset += 8;
148 break;
149 case 'J':
150 *reinterpret_cast<uint64_t*>(&arg_array[offset]) = args[i - 1].j;
151 offset += 8;
152 break;
153 }
154 }
155 return arg_array.release();
156}
157
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700158JValue InvokeWithArgArray(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700159 byte* args) {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700160 // TODO: DecodeReference
161 Method* method = reinterpret_cast<Method*>(method_id);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700162 // Call the invoke stub associated with the method
163 // Pass everything as arguments
164 const Method::InvokeStub* stub = method->GetInvokeStub();
165 CHECK(stub != NULL);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700166 JValue result;
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700167 (*stub)(method, obj, self, args, &result);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700168 return result;
169}
170
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700171JValue InvokeWithJValues(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700172 jvalue* args) {
173 Method* method = reinterpret_cast<Method*>(method_id);
174 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700175 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700176}
177
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700178JValue InvokeWithVarArgs(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700179 va_list args) {
180 Method* method = reinterpret_cast<Method*>(method_id);
181 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700182 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700183}
184
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700185jint GetVersion(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700186 ScopedJniThreadState ts(env);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700187 return JNI_VERSION_1_6;
188}
189
Elliott Hughesb20a5542011-08-12 18:03:12 -0700190jclass DefineClass(JNIEnv* env, const char*, jobject, const jbyte*, jsize) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700191 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700192 LOG(WARNING) << "JNI DefineClass is not supported";
Carl Shapiroea4dca82011-08-01 13:45:38 -0700193 return NULL;
194}
195
Elliott Hughes6b436852011-08-12 10:16:44 -0700196// Section 12.3.2 of the JNI spec describes JNI class descriptors. They're
197// separated with slashes but aren't wrapped with "L;" like regular descriptors
198// (i.e. "a/b/C" rather than "La/b/C;"). Arrays of reference types are an
199// exception; there the "L;" must be present ("[La/b/C;"). Historically we've
200// supported names with dots too (such as "a.b.C").
201std::string NormalizeJniClassDescriptor(const char* name) {
202 std::string result;
203 // Add the missing "L;" if necessary.
204 if (name[0] == '[') {
205 result = name;
206 } else {
207 result += 'L';
208 result += name;
209 result += ';';
210 }
211 // Rewrite '.' as '/' for backwards compatibility.
212 for (size_t i = 0; i < result.size(); ++i) {
213 if (result[i] == '.') {
214 result[i] = '/';
215 }
216 }
217 return result;
218}
219
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700220jclass FindClass(JNIEnv* env, const char* name) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700221 ScopedJniThreadState ts(env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700222 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
Elliott Hughes6b436852011-08-12 10:16:44 -0700223 std::string descriptor(NormalizeJniClassDescriptor(name));
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700224 // TODO: need to get the appropriate ClassLoader.
Elliott Hughes6b436852011-08-12 10:16:44 -0700225 Class* c = class_linker->FindClass(descriptor, NULL);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700226 // TODO: AddLocalReference.
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700227 return reinterpret_cast<jclass>(c);
228}
229
230jmethodID FromReflectedMethod(JNIEnv* env, jobject method) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700231 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700232 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700233 return NULL;
234}
235
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700236jfieldID FromReflectedField(JNIEnv* env, jobject field) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700237 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700238 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700239 return NULL;
240}
241
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700242jobject ToReflectedMethod(JNIEnv* env, jclass cls,
243 jmethodID methodID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700244 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700245 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700246 return NULL;
247}
248
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700249jclass GetSuperclass(JNIEnv* env, jclass sub) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700250 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700251 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700252 return NULL;
253}
254
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700255jboolean IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700256 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700257 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700258 return JNI_FALSE;
259}
260
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700261jobject ToReflectedField(JNIEnv* env, jclass cls,
262 jfieldID fieldID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700263 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700264 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700265 return NULL;
266}
267
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700268jint Throw(JNIEnv* env, jthrowable obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700269 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700270 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700271 return 0;
272}
273
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700274jint ThrowNew(JNIEnv* env, jclass clazz, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700275 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700276 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700277 return 0;
278}
279
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700280jthrowable ExceptionOccurred(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700281 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700282 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700283 return NULL;
284}
285
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700286void ExceptionDescribe(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700287 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700288 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700289}
290
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700291void ExceptionClear(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700292 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700293 ts.Self()->ClearException();
Carl Shapiroea4dca82011-08-01 13:45:38 -0700294}
295
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700296void FatalError(JNIEnv* env, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700297 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700298 LOG(FATAL) << "JNI FatalError called: " << msg;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700299}
300
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700301jint PushLocalFrame(JNIEnv* env, jint cap) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700302 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700303 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700304 return 0;
305}
306
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700307jobject PopLocalFrame(JNIEnv* env, jobject res) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700308 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700309 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700310 return NULL;
311}
312
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700313jobject NewGlobalRef(JNIEnv* env, jobject lobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700314 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700315 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700316 return NULL;
317}
318
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700319void DeleteGlobalRef(JNIEnv* env, jobject gref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700320 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700321 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700322}
323
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700324void DeleteLocalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700325 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700326 UNIMPLEMENTED(WARNING);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700327}
328
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700329jboolean IsSameObject(JNIEnv* env, jobject obj1, jobject obj2) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700330 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700331 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700332 return JNI_FALSE;
333}
334
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700335jobject NewLocalRef(JNIEnv* env, jobject ref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700336 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700337 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700338 return NULL;
339}
340
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700341jint EnsureLocalCapacity(JNIEnv* env, jint) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700342 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700343 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700344 return 0;
345}
346
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700347jobject AllocObject(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700348 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700349 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700350 return NULL;
351}
352
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700353jobject NewObject(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700354 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700355 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700356 return NULL;
357}
358
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700359jobject NewObjectV(JNIEnv* env,
360 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700361 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700362 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700363 return NULL;
364}
365
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700366jobject NewObjectA(JNIEnv* env,
367 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700368 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700369 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700370 return NULL;
371}
372
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700373jclass GetObjectClass(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700374 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700375 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700376 return NULL;
377}
378
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700379jboolean IsInstanceOf(JNIEnv* env, jobject obj, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700380 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700381 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700382 return JNI_FALSE;
383}
384
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700385jmethodID GetMethodID(JNIEnv* env,
386 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700387 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700388 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700389 return NULL;
390}
391
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700392jobject CallObjectMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700393 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700394 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700395 return NULL;
396}
397
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700398jobject CallObjectMethodV(JNIEnv* env,
399 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700400 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700401 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700402 return NULL;
403}
404
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700405jobject CallObjectMethodA(JNIEnv* env,
406 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700407 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700408 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700409 return NULL;
410}
411
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700412jboolean CallBooleanMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700413 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700414 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700415 return JNI_FALSE;
416}
417
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700418jboolean CallBooleanMethodV(JNIEnv* env,
419 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700420 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700421 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700422 return JNI_FALSE;
423}
424
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700425jboolean CallBooleanMethodA(JNIEnv* env,
426 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700427 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700428 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700429 return JNI_FALSE;
430}
431
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700432jbyte CallByteMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700433 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700434 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700435 return 0;
436}
437
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700438jbyte CallByteMethodV(JNIEnv* env,
439 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700440 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700441 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700442 return 0;
443}
444
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700445jbyte CallByteMethodA(JNIEnv* env,
446 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700447 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700448 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700449 return 0;
450}
451
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700452jchar CallCharMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700453 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700454 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700455 return 0;
456}
457
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700458jchar CallCharMethodV(JNIEnv* env,
459 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700460 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700461 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700462 return 0;
463}
464
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700465jchar CallCharMethodA(JNIEnv* env,
466 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700467 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700468 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700469 return 0;
470}
471
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700472jshort CallShortMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700473 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700474 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700475 return 0;
476}
477
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700478jshort CallShortMethodV(JNIEnv* env,
479 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700480 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700481 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700482 return 0;
483}
484
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700485jshort CallShortMethodA(JNIEnv* env,
486 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700487 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700488 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700489 return 0;
490}
491
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700492jint CallIntMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700493 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700494 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700495 return 0;
496}
497
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700498jint CallIntMethodV(JNIEnv* env,
499 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700500 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700501 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700502 return 0;
503}
504
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700505jint CallIntMethodA(JNIEnv* env,
506 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700507 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700508 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700509 return 0;
510}
511
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700512jlong CallLongMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700513 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700514 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700515 return 0;
516}
517
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700518jlong CallLongMethodV(JNIEnv* env,
519 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700520 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700521 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700522 return 0;
523}
524
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700525jlong CallLongMethodA(JNIEnv* env,
526 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700527 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700528 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700529 return 0;
530}
531
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700532jfloat CallFloatMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700533 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700534 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700535 return 0;
536}
537
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700538jfloat CallFloatMethodV(JNIEnv* env,
539 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700540 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700541 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700542 return 0;
543}
544
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700545jfloat CallFloatMethodA(JNIEnv* env,
546 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700547 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700548 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700549 return 0;
550}
551
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700552jdouble CallDoubleMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700553 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700554 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700555 return 0;
556}
557
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700558jdouble CallDoubleMethodV(JNIEnv* env,
559 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700560 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700561 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700562 return 0;
563}
564
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700565jdouble CallDoubleMethodA(JNIEnv* env,
566 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700567 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700568 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700569 return 0;
570}
571
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700572void CallVoidMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700573 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700574 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700575}
576
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700577void CallVoidMethodV(JNIEnv* env, jobject obj,
578 jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700579 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700580 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700581}
582
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700583void CallVoidMethodA(JNIEnv* env, jobject obj,
584 jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700585 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700586 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700587}
588
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700589jobject CallNonvirtualObjectMethod(JNIEnv* env,
590 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700591 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700592 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700593 return NULL;
594}
595
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700596jobject CallNonvirtualObjectMethodV(JNIEnv* env,
597 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700598 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700599 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700600 return NULL;
601}
602
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700603jobject CallNonvirtualObjectMethodA(JNIEnv* env,
604 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700605 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700606 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700607 return NULL;
608}
609
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700610jboolean CallNonvirtualBooleanMethod(JNIEnv* env,
611 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700612 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700613 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700614 return JNI_FALSE;
615}
616
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700617jboolean CallNonvirtualBooleanMethodV(JNIEnv* env,
618 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700619 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700620 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700621 return JNI_FALSE;
622}
623
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700624jboolean CallNonvirtualBooleanMethodA(JNIEnv* env,
625 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700626 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700627 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700628 return JNI_FALSE;
629}
630
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700631jbyte CallNonvirtualByteMethod(JNIEnv* env,
632 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700633 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700634 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700635 return 0;
636}
637
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700638jbyte CallNonvirtualByteMethodV(JNIEnv* env,
639 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700640 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700641 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700642 return 0;
643}
644
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700645jbyte CallNonvirtualByteMethodA(JNIEnv* env,
646 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700647 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700648 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700649 return 0;
650}
651
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700652jchar CallNonvirtualCharMethod(JNIEnv* env,
653 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700654 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700655 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700656 return 0;
657}
658
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700659jchar CallNonvirtualCharMethodV(JNIEnv* env,
660 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700661 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700662 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700663 return 0;
664}
665
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700666jchar CallNonvirtualCharMethodA(JNIEnv* env,
667 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700668 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700669 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700670 return 0;
671}
672
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700673jshort CallNonvirtualShortMethod(JNIEnv* env,
674 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700675 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700676 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700677 return 0;
678}
679
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700680jshort CallNonvirtualShortMethodV(JNIEnv* env,
681 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700682 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700683 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700684 return 0;
685}
686
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700687jshort CallNonvirtualShortMethodA(JNIEnv* env,
688 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700689 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700690 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700691 return 0;
692}
693
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700694jint CallNonvirtualIntMethod(JNIEnv* env,
695 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700696 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700697 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700698 return 0;
699}
700
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700701jint CallNonvirtualIntMethodV(JNIEnv* env,
702 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700703 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700704 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700705 return 0;
706}
707
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700708jint CallNonvirtualIntMethodA(JNIEnv* env,
709 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700710 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700711 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700712 return 0;
713}
714
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700715jlong CallNonvirtualLongMethod(JNIEnv* env,
716 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700717 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700718 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700719 return 0;
720}
721
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700722jlong CallNonvirtualLongMethodV(JNIEnv* env,
723 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700724 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700725 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700726 return 0;
727}
728
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700729jlong CallNonvirtualLongMethodA(JNIEnv* env,
730 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700731 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700732 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700733 return 0;
734}
735
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700736jfloat CallNonvirtualFloatMethod(JNIEnv* env,
737 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700738 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700739 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700740 return 0;
741}
742
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700743jfloat CallNonvirtualFloatMethodV(JNIEnv* env,
744 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700745 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700746 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700747 return 0;
748}
749
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700750jfloat CallNonvirtualFloatMethodA(JNIEnv* env,
751 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700752 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700753 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700754 return 0;
755}
756
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700757jdouble CallNonvirtualDoubleMethod(JNIEnv* env,
758 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700759 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700760 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700761 return 0;
762}
763
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700764jdouble CallNonvirtualDoubleMethodV(JNIEnv* env,
765 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700766 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700767 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700768 return 0;
769}
770
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700771jdouble CallNonvirtualDoubleMethodA(JNIEnv* env,
772 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700773 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700774 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700775 return 0;
776}
777
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700778void CallNonvirtualVoidMethod(JNIEnv* env,
779 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700780 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700781 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700782}
783
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700784void CallNonvirtualVoidMethodV(JNIEnv* env,
785 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700786 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700787 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700788}
789
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700790void CallNonvirtualVoidMethodA(JNIEnv* env,
791 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700792 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700793 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700794}
795
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700796jfieldID GetFieldID(JNIEnv* env,
797 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700798 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700799 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700800 return NULL;
801}
802
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700803jobject GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700804 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700805 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700806 return NULL;
807}
808
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700809jboolean GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700810 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700811 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700812 return JNI_FALSE;
813}
814
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700815jbyte GetByteField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700816 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700817 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700818 return 0;
819}
820
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700821jchar GetCharField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700822 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700823 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700824 return 0;
825}
826
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700827jshort GetShortField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700828 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700829 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700830 return 0;
831}
832
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700833jint GetIntField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700834 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700835 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700836 return 0;
837}
838
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700839jlong GetLongField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700840 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700841 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700842 return 0;
843}
844
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700845jfloat GetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700846 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700847 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700848 return 0;
849}
850
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700851jdouble GetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700852 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700853 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700854 return 0;
855}
856
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700857void SetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID, jobject val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700858 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700859 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700860}
861
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700862void SetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID, jboolean val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700863 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700864 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700865}
866
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700867void SetByteField(JNIEnv* env, jobject obj, jfieldID fieldID, jbyte val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700868 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700869 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700870}
871
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700872void SetCharField(JNIEnv* env, jobject obj, jfieldID fieldID, jchar val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700873 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700874 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700875}
876
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700877void SetShortField(JNIEnv* env, jobject obj, jfieldID fieldID, jshort val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700878 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700879 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700880}
881
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700882void SetIntField(JNIEnv* env, jobject obj, jfieldID fieldID, jint val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700883 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700884 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700885}
886
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700887void SetLongField(JNIEnv* env, jobject obj, jfieldID fieldID, jlong val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700888 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700889 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700890}
891
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700892void SetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID, jfloat val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700893 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700894 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700895}
896
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700897void SetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID, jdouble val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700898 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700899 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700900}
901
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700902jmethodID GetStaticMethodID(JNIEnv* env,
903 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700904 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700905 // TODO: DecodeReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700906 Class* klass = reinterpret_cast<Class*>(clazz);
907 // TODO: check that klass is initialized
908 Method* method = klass->FindDirectMethod(name, sig);
909 if (method == NULL || !method->IsStatic()) {
910 // TODO: throw NoSuchMethodError
911 return NULL;
912 }
913 // TODO: create a JNI weak global reference for method
914 bool success = EnsureInvokeStub(method);
915 if (!success) {
916 // TODO: throw OutOfMemoryException
917 return NULL;
918 }
919 return reinterpret_cast<jmethodID>(method);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700920}
921
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700922jobject CallStaticObjectMethod(JNIEnv* env,
923 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700924 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700925 va_list ap;
926 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700927 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700928 jobject obj = reinterpret_cast<jobject>(result.l); // TODO: AddLocalReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700929 return obj;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700930}
931
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700932jobject CallStaticObjectMethodV(JNIEnv* env,
933 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700934 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700935 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700936 jobject obj = reinterpret_cast<jobject>(result.l); // TODO: AddLocalReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700937 return obj;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700938}
939
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700940jobject CallStaticObjectMethodA(JNIEnv* env,
941 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700942 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700943 JValue result = InvokeWithJValues(ts.Self(), NULL, methodID, args);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700944 jobject obj = reinterpret_cast<jobject>(result.l); // TODO: AddLocalReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700945 return obj;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700946}
947
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700948jboolean CallStaticBooleanMethod(JNIEnv* env,
949 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700950 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700951 va_list ap;
952 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700953 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700954}
955
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700956jboolean CallStaticBooleanMethodV(JNIEnv* env,
957 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700958 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700959 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700960}
961
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700962jboolean CallStaticBooleanMethodA(JNIEnv* env,
963 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700964 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700965 return InvokeWithJValues(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700966}
967
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700968jbyte CallStaticByteMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700969 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700970 va_list ap;
971 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700972 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700973}
974
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700975jbyte CallStaticByteMethodV(JNIEnv* env,
976 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700977 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700978 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700979}
980
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700981jbyte CallStaticByteMethodA(JNIEnv* env,
982 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700983 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700984 return InvokeWithJValues(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700985}
986
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700987jchar CallStaticCharMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700988 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700989 va_list ap;
990 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700991 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700992}
993
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700994jchar CallStaticCharMethodV(JNIEnv* env,
995 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700996 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700997 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700998}
999
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001000jchar CallStaticCharMethodA(JNIEnv* env,
1001 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001002 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001003 return InvokeWithJValues(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001004}
1005
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001006jshort CallStaticShortMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001007 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001008 va_list ap;
1009 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001010 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001011}
1012
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001013jshort CallStaticShortMethodV(JNIEnv* env,
1014 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001015 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001016 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001017}
1018
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001019jshort CallStaticShortMethodA(JNIEnv* env,
1020 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001021 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001022 return InvokeWithJValues(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001023}
1024
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001025jint CallStaticIntMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001026 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001027 va_list ap;
1028 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001029 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001030}
1031
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001032jint CallStaticIntMethodV(JNIEnv* env,
1033 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001034 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001035 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001036}
1037
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001038jint CallStaticIntMethodA(JNIEnv* env,
1039 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001040 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001041 return InvokeWithJValues(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001042}
1043
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001044jlong CallStaticLongMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001045 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001046 va_list ap;
1047 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001048 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001049}
1050
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001051jlong CallStaticLongMethodV(JNIEnv* env,
1052 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001053 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001054 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001055}
1056
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001057jlong CallStaticLongMethodA(JNIEnv* env,
1058 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001059 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001060 return InvokeWithJValues(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001061}
1062
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001063jfloat CallStaticFloatMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001064 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001065 va_list ap;
1066 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001067 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001068}
1069
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001070jfloat CallStaticFloatMethodV(JNIEnv* env,
1071 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001072 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001073 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001074}
1075
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001076jfloat CallStaticFloatMethodA(JNIEnv* env,
1077 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001078 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001079 return InvokeWithJValues(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001080}
1081
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001082jdouble CallStaticDoubleMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001083 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001084 va_list ap;
1085 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001086 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001087}
1088
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001089jdouble CallStaticDoubleMethodV(JNIEnv* env,
1090 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001091 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001092 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001093}
1094
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001095jdouble CallStaticDoubleMethodA(JNIEnv* env,
1096 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001097 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001098 return InvokeWithJValues(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001099}
1100
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001101void CallStaticVoidMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001102 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001103 va_list ap;
1104 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001105 InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001106}
1107
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001108void CallStaticVoidMethodV(JNIEnv* env,
1109 jclass cls, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001110 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001111 InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001112}
1113
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001114void CallStaticVoidMethodA(JNIEnv* env,
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001115 jclass cls, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001116 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001117 InvokeWithJValues(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001118}
1119
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001120jfieldID GetStaticFieldID(JNIEnv* env,
1121 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001122 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001123 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001124 return 0;
1125}
1126
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001127jobject GetStaticObjectField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001128 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001129 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001130 return NULL;
1131}
1132
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001133jboolean GetStaticBooleanField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001134 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001135 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001136 return JNI_FALSE;
1137}
1138
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001139jbyte GetStaticByteField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001140 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001141 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001142 return 0;
1143}
1144
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001145jchar GetStaticCharField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001146 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001147 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001148 return 0;
1149}
1150
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001151jshort GetStaticShortField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001152 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001153 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001154 return 0;
1155}
1156
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001157jint GetStaticIntField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001158 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001159 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001160 return 0;
1161}
1162
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001163jlong GetStaticLongField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001164 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001165 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001166 return 0;
1167}
1168
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001169jfloat GetStaticFloatField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001170 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001171 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001172 return 0;
1173}
1174
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001175jdouble GetStaticDoubleField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001176 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001177 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001178 return 0;
1179}
1180
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001181void SetStaticObjectField(JNIEnv* env,
1182 jclass clazz, jfieldID fieldID, jobject value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001183 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001184 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001185}
1186
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001187void SetStaticBooleanField(JNIEnv* env,
1188 jclass clazz, jfieldID fieldID, jboolean value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001189 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001190 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001191}
1192
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001193void SetStaticByteField(JNIEnv* env,
1194 jclass clazz, jfieldID fieldID, jbyte value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001195 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001196 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001197}
1198
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001199void SetStaticCharField(JNIEnv* env,
1200 jclass clazz, jfieldID fieldID, jchar value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001201 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001202 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001203}
1204
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001205void SetStaticShortField(JNIEnv* env,
1206 jclass clazz, jfieldID fieldID, jshort value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001207 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001208 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001209}
1210
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001211void SetStaticIntField(JNIEnv* env,
1212 jclass clazz, jfieldID fieldID, jint value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001213 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001214 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001215}
1216
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001217void SetStaticLongField(JNIEnv* env,
1218 jclass clazz, jfieldID fieldID, jlong value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001219 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001220 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001221}
1222
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001223void SetStaticFloatField(JNIEnv* env,
1224 jclass clazz, jfieldID fieldID, jfloat value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001225 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001226 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001227}
1228
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001229void SetStaticDoubleField(JNIEnv* env,
1230 jclass clazz, jfieldID fieldID, jdouble value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001231 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001232 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001233}
1234
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001235jstring NewString(JNIEnv* env, const jchar* unicode, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001236 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001237 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001238 return NULL;
1239}
1240
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001241jsize GetStringLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001242 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001243 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001244 return 0;
1245}
1246
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001247const jchar* GetStringChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001248 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001249 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001250 return NULL;
1251}
1252
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001253void ReleaseStringChars(JNIEnv* env, jstring str, const jchar* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001254 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001255 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001256}
1257
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001258jstring NewStringUTF(JNIEnv* env, const char* utf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001259 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001260 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001261 return NULL;
1262}
1263
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001264jsize GetStringUTFLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001265 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001266 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001267 return 0;
1268}
1269
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001270const char* GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001271 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001272 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001273 return NULL;
1274}
1275
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001276void ReleaseStringUTFChars(JNIEnv* env, jstring str, const char* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001277 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001278 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001279}
1280
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001281jsize GetArrayLength(JNIEnv* env, jarray array) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001282 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001283 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001284 return 0;
1285}
1286
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001287jobject GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001288 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001289 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001290 return NULL;
1291}
1292
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001293void SetObjectArrayElement(JNIEnv* env,
1294 jobjectArray array, jsize index, jobject val) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001295 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001296 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001297}
1298
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001299template<typename JniT, typename ArtT>
1300JniT NewPrimitiveArray(ScopedJniThreadState& ts, jsize length) {
1301 CHECK_GE(length, 0); // TODO: ReportJniError
1302 ArtT* result = ArtT::Alloc(length);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001303 // TODO: AddLocalReference
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001304 return reinterpret_cast<JniT>(result);
1305}
1306
Elliott Hughesf2682d52011-08-15 16:37:04 -07001307jbooleanArray NewBooleanArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001308 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001309 return NewPrimitiveArray<jbooleanArray, BooleanArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001310}
1311
Elliott Hughesf2682d52011-08-15 16:37:04 -07001312jbyteArray NewByteArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001313 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001314 return NewPrimitiveArray<jbyteArray, ByteArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001315}
1316
Elliott Hughesf2682d52011-08-15 16:37:04 -07001317jcharArray NewCharArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001318 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001319 return NewPrimitiveArray<jcharArray, CharArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001320}
1321
Elliott Hughesf2682d52011-08-15 16:37:04 -07001322jdoubleArray NewDoubleArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001323 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001324 return NewPrimitiveArray<jdoubleArray, DoubleArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001325}
1326
Elliott Hughesf2682d52011-08-15 16:37:04 -07001327jfloatArray NewFloatArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001328 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001329 return NewPrimitiveArray<jfloatArray, FloatArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001330}
1331
Elliott Hughesf2682d52011-08-15 16:37:04 -07001332jintArray NewIntArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001333 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001334 return NewPrimitiveArray<jintArray, IntArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001335}
1336
Elliott Hughesf2682d52011-08-15 16:37:04 -07001337jlongArray NewLongArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001338 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001339 return NewPrimitiveArray<jlongArray, LongArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001340}
1341
Elliott Hughesf2682d52011-08-15 16:37:04 -07001342jobjectArray NewObjectArray(JNIEnv* env, jsize length, jclass element_jclass, jobject initial_element) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001343 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001344 CHECK_GE(length, 0); // TODO: ReportJniError
1345
1346 // Compute the array class corresponding to the given element class.
1347 // TODO: DecodeReference
1348 Class* element_class = reinterpret_cast<Class*>(element_jclass);
1349 std::string descriptor;
1350 descriptor += "[";
1351 descriptor += element_class->GetDescriptor().ToString();
1352
1353 // Find the class.
1354 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
1355 // TODO: need to get the appropriate ClassLoader.
1356 Class* array_class = class_linker->FindClass(descriptor, NULL);
1357 if (array_class == NULL) {
1358 return NULL;
1359 }
1360
1361 ObjectArray<Object>* result = ObjectArray<Object>::Alloc(array_class, length);
1362 CHECK(initial_element == NULL); // TODO: support initial_element
1363 // TODO: AddLocalReference.
1364 return reinterpret_cast<jobjectArray>(result);
1365}
1366
1367jshortArray NewShortArray(JNIEnv* env, jsize length) {
1368 ScopedJniThreadState ts(env);
1369 return NewPrimitiveArray<jshortArray, ShortArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001370}
1371
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001372jboolean* GetBooleanArrayElements(JNIEnv* env,
1373 jbooleanArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001374 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001375 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001376 return NULL;
1377}
1378
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001379jbyte* GetByteArrayElements(JNIEnv* env, jbyteArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001380 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001381 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001382 return NULL;
1383}
1384
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001385jchar* GetCharArrayElements(JNIEnv* env, jcharArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001386 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001387 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001388 return NULL;
1389}
1390
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001391jshort* GetShortArrayElements(JNIEnv* env,
1392 jshortArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001393 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001394 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001395 return NULL;
1396}
1397
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001398jint* GetIntArrayElements(JNIEnv* env, jintArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001399 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001400 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001401 return NULL;
1402}
1403
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001404jlong* GetLongArrayElements(JNIEnv* env, jlongArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001405 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001406 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001407 return NULL;
1408}
1409
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001410jfloat* GetFloatArrayElements(JNIEnv* env,
1411 jfloatArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001412 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001413 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001414 return NULL;
1415}
1416
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001417jdouble* GetDoubleArrayElements(JNIEnv* env,
1418 jdoubleArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001419 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001420 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001421 return NULL;
1422}
1423
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001424void ReleaseBooleanArrayElements(JNIEnv* env,
1425 jbooleanArray array, jboolean* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001426 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001427 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001428}
1429
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001430void ReleaseByteArrayElements(JNIEnv* env,
1431 jbyteArray array, jbyte* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001432 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001433 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001434}
1435
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001436void ReleaseCharArrayElements(JNIEnv* env,
1437 jcharArray array, jchar* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001438 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001439 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001440}
1441
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001442void ReleaseShortArrayElements(JNIEnv* env,
1443 jshortArray array, jshort* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001444 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001445 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001446}
1447
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001448void ReleaseIntArrayElements(JNIEnv* env,
1449 jintArray array, jint* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001450 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001451 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001452}
1453
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001454void ReleaseLongArrayElements(JNIEnv* env,
1455 jlongArray array, jlong* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001456 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001457 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001458}
1459
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001460void ReleaseFloatArrayElements(JNIEnv* env,
1461 jfloatArray array, jfloat* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001462 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001463 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001464}
1465
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001466void ReleaseDoubleArrayElements(JNIEnv* env,
1467 jdoubleArray array, jdouble* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001468 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001469 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001470}
1471
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001472void GetBooleanArrayRegion(JNIEnv* env,
1473 jbooleanArray array, jsize start, jsize l, jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001474 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001475 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001476}
1477
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001478void GetByteArrayRegion(JNIEnv* env,
1479 jbyteArray array, jsize start, jsize len, jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001480 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001481 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001482}
1483
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001484void GetCharArrayRegion(JNIEnv* env,
1485 jcharArray array, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001486 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001487 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001488}
1489
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001490void GetShortArrayRegion(JNIEnv* env,
1491 jshortArray array, jsize start, jsize len, jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001492 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001493 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001494}
1495
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001496void GetIntArrayRegion(JNIEnv* env,
1497 jintArray array, jsize start, jsize len, jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001498 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001499 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001500}
1501
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001502void GetLongArrayRegion(JNIEnv* env,
1503 jlongArray array, jsize start, jsize len, jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001504 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001505 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001506}
1507
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001508void GetFloatArrayRegion(JNIEnv* env,
1509 jfloatArray array, jsize start, jsize len, jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001510 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001511 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001512}
1513
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001514void GetDoubleArrayRegion(JNIEnv* env,
1515 jdoubleArray array, jsize start, jsize len, jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001516 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001517 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001518}
1519
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001520void SetBooleanArrayRegion(JNIEnv* env,
1521 jbooleanArray array, jsize start, jsize l, const jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001522 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001523 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001524}
1525
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001526void SetByteArrayRegion(JNIEnv* env,
1527 jbyteArray array, jsize start, jsize len, const jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001528 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001529 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001530}
1531
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001532void SetCharArrayRegion(JNIEnv* env,
1533 jcharArray array, jsize start, jsize len, const jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001534 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001535 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001536}
1537
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001538void SetShortArrayRegion(JNIEnv* env,
1539 jshortArray array, jsize start, jsize len, const jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001540 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001541 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001542}
1543
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001544void SetIntArrayRegion(JNIEnv* env,
1545 jintArray array, jsize start, jsize len, const jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001546 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001547 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001548}
1549
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001550void SetLongArrayRegion(JNIEnv* env,
1551 jlongArray array, jsize start, jsize len, const jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001552 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001553 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001554}
1555
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001556void SetFloatArrayRegion(JNIEnv* env,
1557 jfloatArray array, jsize start, jsize len, const jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001558 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001559 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001560}
1561
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001562void SetDoubleArrayRegion(JNIEnv* env,
1563 jdoubleArray array, jsize start, jsize len, const jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001564 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001565 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001566}
1567
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001568jint RegisterNatives(JNIEnv* env,
1569 jclass clazz, const JNINativeMethod* methods, jint nMethods) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001570 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001571 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001572 return 0;
1573}
1574
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001575jint UnregisterNatives(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001576 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001577 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001578 return 0;
1579}
1580
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001581jint MonitorEnter(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001582 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001583 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001584 return 0;
1585}
1586
1587jint MonitorExit(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001588 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001589 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001590 return 0;
1591}
1592
Elliott Hughesb20a5542011-08-12 18:03:12 -07001593jint GetJavaVM(JNIEnv* env, JavaVM** vm) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001594 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001595 Runtime* runtime = Runtime::Current();
1596 if (runtime != NULL) {
1597 *vm = runtime->GetJavaVM();
1598 } else {
1599 *vm = NULL;
1600 }
1601 return (*vm != NULL) ? JNI_OK : JNI_ERR;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001602}
1603
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001604void GetStringRegion(JNIEnv* env,
1605 jstring str, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001606 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001607 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001608}
1609
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001610void GetStringUTFRegion(JNIEnv* env,
1611 jstring str, jsize start, jsize len, char* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001612 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001613 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001614}
1615
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001616void* GetPrimitiveArrayCritical(JNIEnv* env,
1617 jarray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001618 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001619 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001620 return NULL;
1621}
1622
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001623void ReleasePrimitiveArrayCritical(JNIEnv* env,
1624 jarray array, void* carray, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001625 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001626 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001627}
1628
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001629const jchar* GetStringCritical(JNIEnv* env, jstring s, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001630 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001631 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001632 return NULL;
1633}
1634
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001635void ReleaseStringCritical(JNIEnv* env, jstring s, const jchar* cstr) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001636 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001637 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001638}
1639
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001640jweak NewWeakGlobalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001641 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001642 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001643 return NULL;
1644}
1645
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001646void DeleteWeakGlobalRef(JNIEnv* env, jweak obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001647 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001648 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001649}
1650
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001651jboolean ExceptionCheck(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001652 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -07001653 return ts.Self()->IsExceptionPending() ? JNI_TRUE : JNI_FALSE;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001654}
1655
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001656jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001657 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001658 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001659 return NULL;
1660}
1661
1662
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001663void* GetDirectBufferAddress(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001664 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001665 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001666 return NULL;
1667}
1668
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001669jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001670 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001671 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001672 return 0;
1673}
1674
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001675jobjectRefType GetObjectRefType(JNIEnv* env, jobject jobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001676 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001677 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001678 return JNIInvalidRefType;
1679}
1680
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001681static const struct JNINativeInterface gNativeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07001682 NULL, // reserved0.
1683 NULL, // reserved1.
1684 NULL, // reserved2.
1685 NULL, // reserved3.
1686 GetVersion,
1687 DefineClass,
1688 FindClass,
1689 FromReflectedMethod,
1690 FromReflectedField,
1691 ToReflectedMethod,
1692 GetSuperclass,
1693 IsAssignableFrom,
1694 ToReflectedField,
1695 Throw,
1696 ThrowNew,
1697 ExceptionOccurred,
1698 ExceptionDescribe,
1699 ExceptionClear,
1700 FatalError,
1701 PushLocalFrame,
1702 PopLocalFrame,
1703 NewGlobalRef,
1704 DeleteGlobalRef,
1705 DeleteLocalRef,
1706 IsSameObject,
1707 NewLocalRef,
1708 EnsureLocalCapacity,
1709 AllocObject,
1710 NewObject,
1711 NewObjectV,
1712 NewObjectA,
1713 GetObjectClass,
1714 IsInstanceOf,
1715 GetMethodID,
1716 CallObjectMethod,
1717 CallObjectMethodV,
1718 CallObjectMethodA,
1719 CallBooleanMethod,
1720 CallBooleanMethodV,
1721 CallBooleanMethodA,
1722 CallByteMethod,
1723 CallByteMethodV,
1724 CallByteMethodA,
1725 CallCharMethod,
1726 CallCharMethodV,
1727 CallCharMethodA,
1728 CallShortMethod,
1729 CallShortMethodV,
1730 CallShortMethodA,
1731 CallIntMethod,
1732 CallIntMethodV,
1733 CallIntMethodA,
1734 CallLongMethod,
1735 CallLongMethodV,
1736 CallLongMethodA,
1737 CallFloatMethod,
1738 CallFloatMethodV,
1739 CallFloatMethodA,
1740 CallDoubleMethod,
1741 CallDoubleMethodV,
1742 CallDoubleMethodA,
1743 CallVoidMethod,
1744 CallVoidMethodV,
1745 CallVoidMethodA,
1746 CallNonvirtualObjectMethod,
1747 CallNonvirtualObjectMethodV,
1748 CallNonvirtualObjectMethodA,
1749 CallNonvirtualBooleanMethod,
1750 CallNonvirtualBooleanMethodV,
1751 CallNonvirtualBooleanMethodA,
1752 CallNonvirtualByteMethod,
1753 CallNonvirtualByteMethodV,
1754 CallNonvirtualByteMethodA,
1755 CallNonvirtualCharMethod,
1756 CallNonvirtualCharMethodV,
1757 CallNonvirtualCharMethodA,
1758 CallNonvirtualShortMethod,
1759 CallNonvirtualShortMethodV,
1760 CallNonvirtualShortMethodA,
1761 CallNonvirtualIntMethod,
1762 CallNonvirtualIntMethodV,
1763 CallNonvirtualIntMethodA,
1764 CallNonvirtualLongMethod,
1765 CallNonvirtualLongMethodV,
1766 CallNonvirtualLongMethodA,
1767 CallNonvirtualFloatMethod,
1768 CallNonvirtualFloatMethodV,
1769 CallNonvirtualFloatMethodA,
1770 CallNonvirtualDoubleMethod,
1771 CallNonvirtualDoubleMethodV,
1772 CallNonvirtualDoubleMethodA,
1773 CallNonvirtualVoidMethod,
1774 CallNonvirtualVoidMethodV,
1775 CallNonvirtualVoidMethodA,
1776 GetFieldID,
1777 GetObjectField,
1778 GetBooleanField,
1779 GetByteField,
1780 GetCharField,
1781 GetShortField,
1782 GetIntField,
1783 GetLongField,
1784 GetFloatField,
1785 GetDoubleField,
1786 SetObjectField,
1787 SetBooleanField,
1788 SetByteField,
1789 SetCharField,
1790 SetShortField,
1791 SetIntField,
1792 SetLongField,
1793 SetFloatField,
1794 SetDoubleField,
1795 GetStaticMethodID,
1796 CallStaticObjectMethod,
1797 CallStaticObjectMethodV,
1798 CallStaticObjectMethodA,
1799 CallStaticBooleanMethod,
1800 CallStaticBooleanMethodV,
1801 CallStaticBooleanMethodA,
1802 CallStaticByteMethod,
1803 CallStaticByteMethodV,
1804 CallStaticByteMethodA,
1805 CallStaticCharMethod,
1806 CallStaticCharMethodV,
1807 CallStaticCharMethodA,
1808 CallStaticShortMethod,
1809 CallStaticShortMethodV,
1810 CallStaticShortMethodA,
1811 CallStaticIntMethod,
1812 CallStaticIntMethodV,
1813 CallStaticIntMethodA,
1814 CallStaticLongMethod,
1815 CallStaticLongMethodV,
1816 CallStaticLongMethodA,
1817 CallStaticFloatMethod,
1818 CallStaticFloatMethodV,
1819 CallStaticFloatMethodA,
1820 CallStaticDoubleMethod,
1821 CallStaticDoubleMethodV,
1822 CallStaticDoubleMethodA,
1823 CallStaticVoidMethod,
1824 CallStaticVoidMethodV,
1825 CallStaticVoidMethodA,
1826 GetStaticFieldID,
1827 GetStaticObjectField,
1828 GetStaticBooleanField,
1829 GetStaticByteField,
1830 GetStaticCharField,
1831 GetStaticShortField,
1832 GetStaticIntField,
1833 GetStaticLongField,
1834 GetStaticFloatField,
1835 GetStaticDoubleField,
1836 SetStaticObjectField,
1837 SetStaticBooleanField,
1838 SetStaticByteField,
1839 SetStaticCharField,
1840 SetStaticShortField,
1841 SetStaticIntField,
1842 SetStaticLongField,
1843 SetStaticFloatField,
1844 SetStaticDoubleField,
1845 NewString,
1846 GetStringLength,
1847 GetStringChars,
1848 ReleaseStringChars,
1849 NewStringUTF,
1850 GetStringUTFLength,
1851 GetStringUTFChars,
1852 ReleaseStringUTFChars,
1853 GetArrayLength,
1854 NewObjectArray,
1855 GetObjectArrayElement,
1856 SetObjectArrayElement,
1857 NewBooleanArray,
1858 NewByteArray,
1859 NewCharArray,
1860 NewShortArray,
1861 NewIntArray,
1862 NewLongArray,
1863 NewFloatArray,
1864 NewDoubleArray,
1865 GetBooleanArrayElements,
1866 GetByteArrayElements,
1867 GetCharArrayElements,
1868 GetShortArrayElements,
1869 GetIntArrayElements,
1870 GetLongArrayElements,
1871 GetFloatArrayElements,
1872 GetDoubleArrayElements,
1873 ReleaseBooleanArrayElements,
1874 ReleaseByteArrayElements,
1875 ReleaseCharArrayElements,
1876 ReleaseShortArrayElements,
1877 ReleaseIntArrayElements,
1878 ReleaseLongArrayElements,
1879 ReleaseFloatArrayElements,
1880 ReleaseDoubleArrayElements,
1881 GetBooleanArrayRegion,
1882 GetByteArrayRegion,
1883 GetCharArrayRegion,
1884 GetShortArrayRegion,
1885 GetIntArrayRegion,
1886 GetLongArrayRegion,
1887 GetFloatArrayRegion,
1888 GetDoubleArrayRegion,
1889 SetBooleanArrayRegion,
1890 SetByteArrayRegion,
1891 SetCharArrayRegion,
1892 SetShortArrayRegion,
1893 SetIntArrayRegion,
1894 SetLongArrayRegion,
1895 SetFloatArrayRegion,
1896 SetDoubleArrayRegion,
1897 RegisterNatives,
1898 UnregisterNatives,
1899 MonitorEnter,
1900 MonitorExit,
1901 GetJavaVM,
1902 GetStringRegion,
1903 GetStringUTFRegion,
1904 GetPrimitiveArrayCritical,
1905 ReleasePrimitiveArrayCritical,
1906 GetStringCritical,
1907 ReleaseStringCritical,
1908 NewWeakGlobalRef,
1909 DeleteWeakGlobalRef,
1910 ExceptionCheck,
1911 NewDirectByteBuffer,
1912 GetDirectBufferAddress,
1913 GetDirectBufferCapacity,
1914 GetObjectRefType,
1915};
1916
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001917void MonitorEnterHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001918 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001919 MonitorEnter(env, obj); // Ignore the result.
1920}
1921
1922void MonitorExitHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001923 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001924 MonitorExit(env, obj); // Ignore the result.
1925}
1926
1927JNIEnv* CreateJNIEnv() {
Elliott Hughes330304d2011-08-12 14:28:05 -07001928 Thread* self = Thread::Current();
1929 CHECK(self != NULL);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001930 JNIEnvExt* result = new JNIEnvExt;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001931 result->fns = &gNativeInterface;
Elliott Hughes330304d2011-08-12 14:28:05 -07001932 result->self = self;
Elliott Hughesf2682d52011-08-15 16:37:04 -07001933 result->critical = false;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001934 result->MonitorEnterHelper = &MonitorEnterHelper;
1935 result->MonitorExitHelper = &MonitorExitHelper;
1936 return reinterpret_cast<JNIEnv*>(result);
1937}
1938
Carl Shapiroea4dca82011-08-01 13:45:38 -07001939// JNI Invocation interface.
1940
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001941extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, void** p_env, void* vm_args) {
1942 const JavaVMInitArgs* args = static_cast<JavaVMInitArgs*>(vm_args);
1943 if (args->version < JNI_VERSION_1_2) {
1944 return JNI_EVERSION;
1945 }
1946 Runtime::Options options;
1947 for (int i = 0; i < args->nOptions; ++i) {
1948 JavaVMOption* option = &args->options[i];
Carl Shapirofc322c72011-07-27 00:20:01 -07001949 options.push_back(std::make_pair(StringPiece(option->optionString),
1950 option->extraInfo));
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001951 }
1952 bool ignore_unrecognized = args->ignoreUnrecognized;
Elliott Hughesf2682d52011-08-15 16:37:04 -07001953 Runtime* runtime = Runtime::Create(options, ignore_unrecognized);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001954 if (runtime == NULL) {
1955 return JNI_ERR;
1956 } else {
1957 *p_env = reinterpret_cast<JNIEnv*>(Thread::Current()->GetJniEnv());
Elliott Hughesf2682d52011-08-15 16:37:04 -07001958 *p_vm = runtime->GetJavaVM();
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001959 return JNI_OK;
1960 }
1961}
1962
Elliott Hughesf2682d52011-08-15 16:37:04 -07001963extern "C" jint JNI_GetCreatedJavaVMs(JavaVM** vms, jsize, jsize* vm_count) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001964 Runtime* runtime = Runtime::Current();
1965 if (runtime == NULL) {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001966 *vm_count = 0;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001967 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001968 *vm_count = 1;
1969 vms[0] = runtime->GetJavaVM();
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001970 }
1971 return JNI_OK;
1972}
1973
1974// Historically unsupported.
1975extern "C" jint JNI_GetDefaultJavaVMInitArgs(void* vm_args) {
1976 return JNI_ERR;
1977}
1978
Elliott Hughesf2682d52011-08-15 16:37:04 -07001979jint DestroyJavaVM(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001980 if (vm == NULL) {
1981 return JNI_ERR;
1982 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001983 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
1984 delete raw_vm->runtime;
1985 raw_vm->runtime = NULL;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001986 return JNI_OK;
1987 }
1988}
1989
Elliott Hughesf2682d52011-08-15 16:37:04 -07001990jint AttachCurrentThread(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001991 if (vm == NULL || p_env == NULL) {
1992 return JNI_ERR;
1993 }
Elliott Hughesf2682d52011-08-15 16:37:04 -07001994 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
1995 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001996 const char* name = NULL;
1997 if (thr_args != NULL) {
1998 // TODO: check version
1999 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2000 // TODO: thread group
2001 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002002 bool success = runtime->AttachCurrentThread(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002003 if (!success) {
2004 return JNI_ERR;
2005 } else {
2006 return JNI_OK;
2007 }
2008}
2009
Elliott Hughesf2682d52011-08-15 16:37:04 -07002010jint DetachCurrentThread(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002011 if (vm == NULL) {
2012 return JNI_ERR;
2013 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07002014 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2015 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002016 runtime->DetachCurrentThread();
2017 return JNI_OK;
2018 }
2019}
2020
Elliott Hughesf2682d52011-08-15 16:37:04 -07002021jint GetEnv(JavaVM* vm, void** env, jint version) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002022 if (version < JNI_VERSION_1_1 || version > JNI_VERSION_1_6) {
2023 return JNI_EVERSION;
2024 }
2025 if (vm == NULL || env == NULL) {
2026 return JNI_ERR;
2027 }
2028 Thread* thread = Thread::Current();
2029 if (thread == NULL) {
2030 *env = NULL;
2031 return JNI_EDETACHED;
2032 }
2033 *env = thread->GetJniEnv();
2034 return JNI_OK;
2035}
2036
Elliott Hughesf2682d52011-08-15 16:37:04 -07002037jint AttachCurrentThreadAsDaemon(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002038 if (vm == NULL || p_env == NULL) {
2039 return JNI_ERR;
2040 }
Elliott Hughesf2682d52011-08-15 16:37:04 -07002041 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2042 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002043 const char* name = NULL;
2044 if (thr_args != NULL) {
2045 // TODO: check version
2046 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2047 // TODO: thread group
2048 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002049 bool success = runtime->AttachCurrentThreadAsDaemon(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002050 if (!success) {
2051 return JNI_ERR;
2052 } else {
2053 return JNI_OK;
2054 }
2055}
2056
Elliott Hughesf2682d52011-08-15 16:37:04 -07002057struct JNIInvokeInterface gInvokeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07002058 NULL, // reserved0
2059 NULL, // reserved1
2060 NULL, // reserved2
2061 DestroyJavaVM,
2062 AttachCurrentThread,
2063 DetachCurrentThread,
2064 GetEnv,
2065 AttachCurrentThreadAsDaemon
2066};
2067
Elliott Hughesf2682d52011-08-15 16:37:04 -07002068JavaVM* CreateJavaVM(Runtime* runtime) {
2069 JavaVMExt* result = new JavaVMExt;
2070 result->fns = &gInvokeInterface;
2071 result->runtime = runtime;
2072 return reinterpret_cast<JavaVM*>(result);
2073}
2074
Ian Rogersdf20fe02011-07-20 20:34:16 -07002075} // namespace art