blob: 87decd7116468d61b438b0ab0ef3c2b87ec301a9 [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
Elliott Hughes8a26c5c2011-08-15 18:35:43 -070059template<typename T>
60T AddLocalReference(ScopedJniThreadState& ts, Object* obj) {
61 UNIMPLEMENTED(WARNING);
62 return reinterpret_cast<T>(obj);
63}
64
Carl Shapiro9b9ba282011-08-14 15:30:39 -070065void CreateInvokeStub(Assembler* assembler, Method* method);
66
67bool EnsureInvokeStub(Method* method) {
68 if (method->GetInvokeStub() != NULL) {
69 return true;
70 }
71 // TODO: use signature to find a matching stub
72 // TODO: failed, acquire a lock on the stub table
73 Assembler assembler;
74 CreateInvokeStub(&assembler, method);
75 // TODO: store native_entry in the stub table
76 int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
77 size_t length = assembler.CodeSize();
78 void* addr = mmap(NULL, length, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
79 if (addr == MAP_FAILED) {
80 PLOG(FATAL) << "mmap failed";
81 }
82 MemoryRegion region(addr, length);
83 assembler.FinalizeInstructions(region);
84 method->SetInvokeStub(reinterpret_cast<Method::InvokeStub*>(region.pointer()));
85 return true;
86}
87
Elliott Hughesd8ddfd52011-08-15 14:32:53 -070088byte* CreateArgArray(Method* method, va_list ap) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -070089 size_t num_bytes = method->NumArgArrayBytes();
90 scoped_array<byte> arg_array(new byte[num_bytes]);
91 const StringPiece& shorty = method->GetShorty();
92 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
93 switch (shorty[i]) {
94 case 'Z':
95 case 'B':
96 case 'C':
97 case 'S':
98 case 'I':
99 *reinterpret_cast<int32_t*>(&arg_array[offset]) = va_arg(ap, jint);
100 offset += 4;
101 break;
102 case 'F':
103 *reinterpret_cast<float*>(&arg_array[offset]) = va_arg(ap, jdouble);
104 offset += 4;
105 break;
106 case 'L': {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700107 // TODO: DecodeReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700108 Object* obj = reinterpret_cast<Object*>(va_arg(ap, jobject));
109 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
110 offset += sizeof(Object*);
111 break;
112 }
113 case 'D':
114 *reinterpret_cast<double*>(&arg_array[offset]) = va_arg(ap, jdouble);
115 offset += 8;
116 break;
117 case 'J':
118 *reinterpret_cast<int64_t*>(&arg_array[offset]) = va_arg(ap, jlong);
119 offset += 8;
120 break;
121 }
122 }
123 return arg_array.release();
124}
125
Elliott Hughesd8ddfd52011-08-15 14:32:53 -0700126byte* CreateArgArray(Method* method, jvalue* args) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700127 size_t num_bytes = method->NumArgArrayBytes();
128 scoped_array<byte> arg_array(new byte[num_bytes]);
129 const StringPiece& shorty = method->GetShorty();
130 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
131 switch (shorty[i]) {
132 case 'Z':
133 case 'B':
134 case 'C':
135 case 'S':
136 case 'I':
137 *reinterpret_cast<uint32_t*>(&arg_array[offset]) = args[i - 1].i;
138 offset += 4;
139 break;
140 case 'F':
141 *reinterpret_cast<float*>(&arg_array[offset]) = args[i - 1].f;
142 offset += 4;
143 break;
144 case 'L': {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700145 // TODO: DecodeReference
146 Object* obj = reinterpret_cast<Object*>(args[i - 1].l);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700147 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
148 offset += sizeof(Object*);
149 break;
150 }
151 case 'D':
152 *reinterpret_cast<double*>(&arg_array[offset]) = args[i - 1].d;
153 offset += 8;
154 break;
155 case 'J':
156 *reinterpret_cast<uint64_t*>(&arg_array[offset]) = args[i - 1].j;
157 offset += 8;
158 break;
159 }
160 }
161 return arg_array.release();
162}
163
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700164JValue InvokeWithArgArray(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700165 byte* args) {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700166 // TODO: DecodeReference
167 Method* method = reinterpret_cast<Method*>(method_id);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700168 // Call the invoke stub associated with the method
169 // Pass everything as arguments
170 const Method::InvokeStub* stub = method->GetInvokeStub();
171 CHECK(stub != NULL);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700172 JValue result;
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700173 (*stub)(method, obj, self, args, &result);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700174 return result;
175}
176
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700177JValue InvokeWithJValues(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700178 jvalue* args) {
179 Method* method = reinterpret_cast<Method*>(method_id);
180 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700181 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700182}
183
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700184JValue InvokeWithVarArgs(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700185 va_list args) {
186 Method* method = reinterpret_cast<Method*>(method_id);
187 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700188 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700189}
190
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700191jint GetVersion(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700192 ScopedJniThreadState ts(env);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700193 return JNI_VERSION_1_6;
194}
195
Elliott Hughesb20a5542011-08-12 18:03:12 -0700196jclass DefineClass(JNIEnv* env, const char*, jobject, const jbyte*, jsize) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700197 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700198 LOG(WARNING) << "JNI DefineClass is not supported";
Carl Shapiroea4dca82011-08-01 13:45:38 -0700199 return NULL;
200}
201
Elliott Hughes6b436852011-08-12 10:16:44 -0700202// Section 12.3.2 of the JNI spec describes JNI class descriptors. They're
203// separated with slashes but aren't wrapped with "L;" like regular descriptors
204// (i.e. "a/b/C" rather than "La/b/C;"). Arrays of reference types are an
205// exception; there the "L;" must be present ("[La/b/C;"). Historically we've
206// supported names with dots too (such as "a.b.C").
207std::string NormalizeJniClassDescriptor(const char* name) {
208 std::string result;
209 // Add the missing "L;" if necessary.
210 if (name[0] == '[') {
211 result = name;
212 } else {
213 result += 'L';
214 result += name;
215 result += ';';
216 }
217 // Rewrite '.' as '/' for backwards compatibility.
218 for (size_t i = 0; i < result.size(); ++i) {
219 if (result[i] == '.') {
220 result[i] = '/';
221 }
222 }
223 return result;
224}
225
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700226jclass FindClass(JNIEnv* env, const char* name) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700227 ScopedJniThreadState ts(env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700228 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
Elliott Hughes6b436852011-08-12 10:16:44 -0700229 std::string descriptor(NormalizeJniClassDescriptor(name));
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700230 // TODO: need to get the appropriate ClassLoader.
Elliott Hughes6b436852011-08-12 10:16:44 -0700231 Class* c = class_linker->FindClass(descriptor, NULL);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700232 return AddLocalReference<jclass>(ts, c);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700233}
234
235jmethodID FromReflectedMethod(JNIEnv* env, jobject method) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700236 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700237 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700238 return NULL;
239}
240
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700241jfieldID FromReflectedField(JNIEnv* env, jobject field) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700242 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700243 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700244 return NULL;
245}
246
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700247jobject ToReflectedMethod(JNIEnv* env, jclass cls,
248 jmethodID methodID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700249 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700250 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700251 return NULL;
252}
253
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700254jclass GetSuperclass(JNIEnv* env, jclass sub) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700255 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700256 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700257 return NULL;
258}
259
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700260jboolean IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700261 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700262 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700263 return JNI_FALSE;
264}
265
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700266jobject ToReflectedField(JNIEnv* env, jclass cls,
267 jfieldID fieldID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700268 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700269 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700270 return NULL;
271}
272
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700273jint Throw(JNIEnv* env, jthrowable obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700274 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700275 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700276 return 0;
277}
278
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700279jint ThrowNew(JNIEnv* env, jclass clazz, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700280 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700281 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700282 return 0;
283}
284
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700285jthrowable ExceptionOccurred(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700286 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700287 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700288 return NULL;
289}
290
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700291void ExceptionDescribe(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700292 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700293 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700294}
295
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700296void ExceptionClear(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700297 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700298 ts.Self()->ClearException();
Carl Shapiroea4dca82011-08-01 13:45:38 -0700299}
300
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700301void FatalError(JNIEnv* env, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700302 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700303 LOG(FATAL) << "JNI FatalError called: " << msg;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700304}
305
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700306jint PushLocalFrame(JNIEnv* env, jint cap) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700307 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700308 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700309 return 0;
310}
311
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700312jobject PopLocalFrame(JNIEnv* env, jobject res) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700313 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700314 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700315 return NULL;
316}
317
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700318jobject NewGlobalRef(JNIEnv* env, jobject lobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700319 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700320 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700321 return NULL;
322}
323
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700324void DeleteGlobalRef(JNIEnv* env, jobject gref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700325 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700326 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700327}
328
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700329void DeleteLocalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700330 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700331 UNIMPLEMENTED(WARNING);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700332}
333
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700334jboolean IsSameObject(JNIEnv* env, jobject obj1, jobject obj2) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700335 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700336 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700337 return JNI_FALSE;
338}
339
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700340jobject NewLocalRef(JNIEnv* env, jobject ref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700341 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700342 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700343 return NULL;
344}
345
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700346jint EnsureLocalCapacity(JNIEnv* env, jint) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700347 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700348 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700349 return 0;
350}
351
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700352jobject AllocObject(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700353 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700354 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700355 return NULL;
356}
357
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700358jobject NewObject(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700359 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700360 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700361 return NULL;
362}
363
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700364jobject NewObjectV(JNIEnv* env,
365 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700366 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700367 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700368 return NULL;
369}
370
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700371jobject NewObjectA(JNIEnv* env,
372 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700373 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700374 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700375 return NULL;
376}
377
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700378jclass GetObjectClass(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700379 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700380 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700381 return NULL;
382}
383
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700384jboolean IsInstanceOf(JNIEnv* env, jobject obj, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700385 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700386 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700387 return JNI_FALSE;
388}
389
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700390jmethodID GetMethodID(JNIEnv* env,
391 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700392 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700393 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700394 return NULL;
395}
396
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700397jobject CallObjectMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700398 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700399 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700400 return NULL;
401}
402
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700403jobject CallObjectMethodV(JNIEnv* env,
404 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700405 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700406 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700407 return NULL;
408}
409
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700410jobject CallObjectMethodA(JNIEnv* env,
411 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700412 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700413 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700414 return NULL;
415}
416
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700417jboolean CallBooleanMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700418 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700419 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700420 return JNI_FALSE;
421}
422
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700423jboolean CallBooleanMethodV(JNIEnv* env,
424 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700425 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700426 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700427 return JNI_FALSE;
428}
429
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700430jboolean CallBooleanMethodA(JNIEnv* env,
431 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700432 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700433 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700434 return JNI_FALSE;
435}
436
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700437jbyte CallByteMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700438 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700439 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700440 return 0;
441}
442
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700443jbyte CallByteMethodV(JNIEnv* env,
444 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700445 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700446 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700447 return 0;
448}
449
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700450jbyte CallByteMethodA(JNIEnv* env,
451 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700452 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700453 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700454 return 0;
455}
456
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700457jchar CallCharMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700458 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700459 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700460 return 0;
461}
462
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700463jchar CallCharMethodV(JNIEnv* env,
464 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700465 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700466 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700467 return 0;
468}
469
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700470jchar CallCharMethodA(JNIEnv* env,
471 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700472 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700473 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700474 return 0;
475}
476
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700477jshort CallShortMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700478 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700479 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700480 return 0;
481}
482
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700483jshort CallShortMethodV(JNIEnv* env,
484 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700485 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700486 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700487 return 0;
488}
489
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700490jshort CallShortMethodA(JNIEnv* env,
491 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700492 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700493 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700494 return 0;
495}
496
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700497jint CallIntMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700498 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700499 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700500 return 0;
501}
502
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700503jint CallIntMethodV(JNIEnv* env,
504 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700505 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700506 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700507 return 0;
508}
509
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700510jint CallIntMethodA(JNIEnv* env,
511 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700512 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700513 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700514 return 0;
515}
516
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700517jlong CallLongMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700518 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700519 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700520 return 0;
521}
522
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700523jlong CallLongMethodV(JNIEnv* env,
524 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700525 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700526 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700527 return 0;
528}
529
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700530jlong CallLongMethodA(JNIEnv* env,
531 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700532 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700533 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700534 return 0;
535}
536
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700537jfloat CallFloatMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700538 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700539 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700540 return 0;
541}
542
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700543jfloat CallFloatMethodV(JNIEnv* env,
544 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700545 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700546 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700547 return 0;
548}
549
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700550jfloat CallFloatMethodA(JNIEnv* env,
551 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700552 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700553 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700554 return 0;
555}
556
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700557jdouble CallDoubleMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700558 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700559 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700560 return 0;
561}
562
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700563jdouble CallDoubleMethodV(JNIEnv* env,
564 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700565 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700566 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700567 return 0;
568}
569
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700570jdouble CallDoubleMethodA(JNIEnv* env,
571 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700572 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700573 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700574 return 0;
575}
576
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700577void CallVoidMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700578 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700579 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700580}
581
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700582void CallVoidMethodV(JNIEnv* env, jobject obj,
583 jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700584 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700585 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700586}
587
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700588void CallVoidMethodA(JNIEnv* env, jobject obj,
589 jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700590 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700591 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700592}
593
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700594jobject CallNonvirtualObjectMethod(JNIEnv* env,
595 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700596 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700597 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700598 return NULL;
599}
600
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700601jobject CallNonvirtualObjectMethodV(JNIEnv* env,
602 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700603 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700604 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700605 return NULL;
606}
607
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700608jobject CallNonvirtualObjectMethodA(JNIEnv* env,
609 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700610 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700611 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700612 return NULL;
613}
614
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700615jboolean CallNonvirtualBooleanMethod(JNIEnv* env,
616 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700617 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700618 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700619 return JNI_FALSE;
620}
621
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700622jboolean CallNonvirtualBooleanMethodV(JNIEnv* env,
623 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700624 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700625 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700626 return JNI_FALSE;
627}
628
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700629jboolean CallNonvirtualBooleanMethodA(JNIEnv* env,
630 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700631 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700632 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700633 return JNI_FALSE;
634}
635
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700636jbyte CallNonvirtualByteMethod(JNIEnv* env,
637 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700638 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700639 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700640 return 0;
641}
642
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700643jbyte CallNonvirtualByteMethodV(JNIEnv* env,
644 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700645 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700646 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700647 return 0;
648}
649
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700650jbyte CallNonvirtualByteMethodA(JNIEnv* env,
651 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700652 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700653 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700654 return 0;
655}
656
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700657jchar CallNonvirtualCharMethod(JNIEnv* env,
658 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700659 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700660 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700661 return 0;
662}
663
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700664jchar CallNonvirtualCharMethodV(JNIEnv* env,
665 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700666 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700667 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700668 return 0;
669}
670
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700671jchar CallNonvirtualCharMethodA(JNIEnv* env,
672 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700673 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700674 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700675 return 0;
676}
677
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700678jshort CallNonvirtualShortMethod(JNIEnv* env,
679 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700680 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700681 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700682 return 0;
683}
684
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700685jshort CallNonvirtualShortMethodV(JNIEnv* env,
686 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700687 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700688 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700689 return 0;
690}
691
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700692jshort CallNonvirtualShortMethodA(JNIEnv* env,
693 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700694 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700695 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700696 return 0;
697}
698
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700699jint CallNonvirtualIntMethod(JNIEnv* env,
700 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700701 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700702 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700703 return 0;
704}
705
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700706jint CallNonvirtualIntMethodV(JNIEnv* env,
707 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700708 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700709 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700710 return 0;
711}
712
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700713jint CallNonvirtualIntMethodA(JNIEnv* env,
714 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700715 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700716 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700717 return 0;
718}
719
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700720jlong CallNonvirtualLongMethod(JNIEnv* env,
721 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700722 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700723 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700724 return 0;
725}
726
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700727jlong CallNonvirtualLongMethodV(JNIEnv* env,
728 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700729 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700730 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700731 return 0;
732}
733
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700734jlong CallNonvirtualLongMethodA(JNIEnv* env,
735 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700736 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700737 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700738 return 0;
739}
740
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700741jfloat CallNonvirtualFloatMethod(JNIEnv* env,
742 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700743 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700744 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700745 return 0;
746}
747
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700748jfloat CallNonvirtualFloatMethodV(JNIEnv* env,
749 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700750 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700751 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700752 return 0;
753}
754
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700755jfloat CallNonvirtualFloatMethodA(JNIEnv* env,
756 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700757 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700758 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700759 return 0;
760}
761
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700762jdouble CallNonvirtualDoubleMethod(JNIEnv* env,
763 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700764 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700765 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700766 return 0;
767}
768
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700769jdouble CallNonvirtualDoubleMethodV(JNIEnv* env,
770 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700771 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700772 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700773 return 0;
774}
775
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700776jdouble CallNonvirtualDoubleMethodA(JNIEnv* env,
777 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700778 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700779 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700780 return 0;
781}
782
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700783void CallNonvirtualVoidMethod(JNIEnv* env,
784 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700785 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700786 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700787}
788
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700789void CallNonvirtualVoidMethodV(JNIEnv* env,
790 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700791 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700792 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700793}
794
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700795void CallNonvirtualVoidMethodA(JNIEnv* env,
796 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700797 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700798 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700799}
800
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700801jfieldID GetFieldID(JNIEnv* env,
802 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700803 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700804 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700805 return NULL;
806}
807
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700808jobject GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700809 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700810 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700811 return NULL;
812}
813
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700814jboolean GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700815 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700816 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700817 return JNI_FALSE;
818}
819
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700820jbyte GetByteField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700821 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700822 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700823 return 0;
824}
825
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700826jchar GetCharField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700827 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700828 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700829 return 0;
830}
831
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700832jshort GetShortField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700833 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700834 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700835 return 0;
836}
837
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700838jint GetIntField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700839 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700840 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700841 return 0;
842}
843
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700844jlong GetLongField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700845 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700846 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700847 return 0;
848}
849
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700850jfloat GetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700851 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700852 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700853 return 0;
854}
855
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700856jdouble GetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700857 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700858 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700859 return 0;
860}
861
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700862void SetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID, jobject 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 SetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID, jboolean 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 SetByteField(JNIEnv* env, jobject obj, jfieldID fieldID, jbyte 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 SetCharField(JNIEnv* env, jobject obj, jfieldID fieldID, jchar 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 SetShortField(JNIEnv* env, jobject obj, jfieldID fieldID, jshort 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 SetIntField(JNIEnv* env, jobject obj, jfieldID fieldID, jint 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 SetLongField(JNIEnv* env, jobject obj, jfieldID fieldID, jlong 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 SetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID, jfloat 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 -0700902void SetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID, jdouble val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700903 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700904 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700905}
906
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700907jmethodID GetStaticMethodID(JNIEnv* env,
908 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700909 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700910 // TODO: DecodeReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700911 Class* klass = reinterpret_cast<Class*>(clazz);
912 // TODO: check that klass is initialized
913 Method* method = klass->FindDirectMethod(name, sig);
914 if (method == NULL || !method->IsStatic()) {
915 // TODO: throw NoSuchMethodError
916 return NULL;
917 }
918 // TODO: create a JNI weak global reference for method
919 bool success = EnsureInvokeStub(method);
920 if (!success) {
921 // TODO: throw OutOfMemoryException
922 return NULL;
923 }
924 return reinterpret_cast<jmethodID>(method);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700925}
926
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700927jobject CallStaticObjectMethod(JNIEnv* env,
928 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700929 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700930 va_list ap;
931 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700932 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700933 return AddLocalReference<jobject>(ts, result.l);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700934}
935
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700936jobject CallStaticObjectMethodV(JNIEnv* env,
937 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700938 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700939 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700940 return AddLocalReference<jobject>(ts, result.l);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700941}
942
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700943jobject CallStaticObjectMethodA(JNIEnv* env,
944 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700945 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700946 JValue result = InvokeWithJValues(ts.Self(), NULL, methodID, args);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700947 return AddLocalReference<jobject>(ts, result.l);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700948}
949
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700950jboolean CallStaticBooleanMethod(JNIEnv* env,
951 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700952 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700953 va_list ap;
954 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700955 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700956}
957
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700958jboolean CallStaticBooleanMethodV(JNIEnv* env,
959 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700960 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700961 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700962}
963
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700964jboolean CallStaticBooleanMethodA(JNIEnv* env,
965 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700966 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700967 return InvokeWithJValues(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700968}
969
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700970jbyte CallStaticByteMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700971 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700972 va_list ap;
973 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700974 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700975}
976
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700977jbyte CallStaticByteMethodV(JNIEnv* env,
978 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700979 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700980 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700981}
982
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700983jbyte CallStaticByteMethodA(JNIEnv* env,
984 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700985 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700986 return InvokeWithJValues(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700987}
988
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700989jchar CallStaticCharMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700990 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700991 va_list ap;
992 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700993 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700994}
995
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700996jchar CallStaticCharMethodV(JNIEnv* env,
997 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700998 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700999 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001000}
1001
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001002jchar CallStaticCharMethodA(JNIEnv* env,
1003 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001004 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001005 return InvokeWithJValues(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001006}
1007
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001008jshort CallStaticShortMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001009 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001010 va_list ap;
1011 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001012 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001013}
1014
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001015jshort CallStaticShortMethodV(JNIEnv* env,
1016 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001017 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001018 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001019}
1020
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001021jshort CallStaticShortMethodA(JNIEnv* env,
1022 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001023 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001024 return InvokeWithJValues(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001025}
1026
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001027jint CallStaticIntMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001028 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001029 va_list ap;
1030 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001031 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001032}
1033
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001034jint CallStaticIntMethodV(JNIEnv* env,
1035 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001036 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001037 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001038}
1039
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001040jint CallStaticIntMethodA(JNIEnv* env,
1041 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001042 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001043 return InvokeWithJValues(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001044}
1045
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001046jlong CallStaticLongMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001047 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001048 va_list ap;
1049 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001050 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001051}
1052
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001053jlong CallStaticLongMethodV(JNIEnv* env,
1054 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001055 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001056 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001057}
1058
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001059jlong CallStaticLongMethodA(JNIEnv* env,
1060 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001061 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001062 return InvokeWithJValues(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001063}
1064
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001065jfloat CallStaticFloatMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001066 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001067 va_list ap;
1068 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001069 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001070}
1071
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001072jfloat CallStaticFloatMethodV(JNIEnv* env,
1073 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001074 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001075 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001076}
1077
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001078jfloat CallStaticFloatMethodA(JNIEnv* env,
1079 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001080 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001081 return InvokeWithJValues(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001082}
1083
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001084jdouble CallStaticDoubleMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001085 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001086 va_list ap;
1087 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001088 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001089}
1090
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001091jdouble CallStaticDoubleMethodV(JNIEnv* env,
1092 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001093 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001094 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001095}
1096
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001097jdouble CallStaticDoubleMethodA(JNIEnv* env,
1098 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001099 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001100 return InvokeWithJValues(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001101}
1102
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001103void CallStaticVoidMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001104 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001105 va_list ap;
1106 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001107 InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001108}
1109
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001110void CallStaticVoidMethodV(JNIEnv* env,
1111 jclass cls, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001112 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001113 InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001114}
1115
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001116void CallStaticVoidMethodA(JNIEnv* env,
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001117 jclass cls, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001118 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001119 InvokeWithJValues(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001120}
1121
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001122jfieldID GetStaticFieldID(JNIEnv* env,
1123 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001124 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001125 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001126 return 0;
1127}
1128
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001129jobject GetStaticObjectField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001130 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001131 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001132 return NULL;
1133}
1134
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001135jboolean GetStaticBooleanField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001136 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001137 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001138 return JNI_FALSE;
1139}
1140
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001141jbyte GetStaticByteField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001142 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001143 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001144 return 0;
1145}
1146
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001147jchar GetStaticCharField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001148 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001149 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001150 return 0;
1151}
1152
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001153jshort GetStaticShortField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001154 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001155 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001156 return 0;
1157}
1158
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001159jint GetStaticIntField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001160 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001161 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001162 return 0;
1163}
1164
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001165jlong GetStaticLongField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001166 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001167 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001168 return 0;
1169}
1170
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001171jfloat GetStaticFloatField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001172 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001173 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001174 return 0;
1175}
1176
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001177jdouble GetStaticDoubleField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001178 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001179 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001180 return 0;
1181}
1182
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001183void SetStaticObjectField(JNIEnv* env,
1184 jclass clazz, jfieldID fieldID, jobject value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001185 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001186 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001187}
1188
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001189void SetStaticBooleanField(JNIEnv* env,
1190 jclass clazz, jfieldID fieldID, jboolean value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001191 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001192 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001193}
1194
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001195void SetStaticByteField(JNIEnv* env,
1196 jclass clazz, jfieldID fieldID, jbyte value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001197 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001198 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001199}
1200
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001201void SetStaticCharField(JNIEnv* env,
1202 jclass clazz, jfieldID fieldID, jchar value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001203 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001204 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001205}
1206
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001207void SetStaticShortField(JNIEnv* env,
1208 jclass clazz, jfieldID fieldID, jshort value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001209 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001210 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001211}
1212
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001213void SetStaticIntField(JNIEnv* env,
1214 jclass clazz, jfieldID fieldID, jint value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001215 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001216 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001217}
1218
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001219void SetStaticLongField(JNIEnv* env,
1220 jclass clazz, jfieldID fieldID, jlong value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001221 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001222 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001223}
1224
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001225void SetStaticFloatField(JNIEnv* env,
1226 jclass clazz, jfieldID fieldID, jfloat value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001227 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001228 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001229}
1230
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001231void SetStaticDoubleField(JNIEnv* env,
1232 jclass clazz, jfieldID fieldID, jdouble value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001233 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001234 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001235}
1236
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001237jstring NewString(JNIEnv* env, const jchar* unicode, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001238 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001239 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001240 return NULL;
1241}
1242
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001243jsize GetStringLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001244 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001245 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001246 return 0;
1247}
1248
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001249const jchar* GetStringChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001250 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001251 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001252 return NULL;
1253}
1254
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001255void ReleaseStringChars(JNIEnv* env, jstring str, const jchar* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001256 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001257 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001258}
1259
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001260jstring NewStringUTF(JNIEnv* env, const char* utf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001261 ScopedJniThreadState ts(env);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001262 if (utf == NULL) {
1263 return NULL;
1264 }
1265 size_t char_count = String::ModifiedUtf8Len(utf);
1266 String* result = String::AllocFromModifiedUtf8(char_count, utf);
1267 return AddLocalReference<jstring>(ts, result);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001268}
1269
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001270jsize GetStringUTFLength(JNIEnv* env, jstring str) {
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 0;
1274}
1275
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001276const char* GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy) {
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 return NULL;
1280}
1281
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001282void ReleaseStringUTFChars(JNIEnv* env, jstring str, const char* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001283 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001284 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001285}
1286
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001287jsize GetArrayLength(JNIEnv* env, jarray array) {
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 0;
1291}
1292
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001293jobject GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001294 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001295 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001296 return NULL;
1297}
1298
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001299void SetObjectArrayElement(JNIEnv* env,
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001300 jobjectArray java_array, jsize index, jobject java_value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001301 ScopedJniThreadState ts(env);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001302 // TODO: DecodeReference
1303 ObjectArray<Object>* array = reinterpret_cast<ObjectArray<Object>*>(java_array);
1304 Object* value = reinterpret_cast<Object*>(java_value);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001305 array->Set(index, value);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001306}
1307
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001308template<typename JniT, typename ArtT>
1309JniT NewPrimitiveArray(ScopedJniThreadState& ts, jsize length) {
1310 CHECK_GE(length, 0); // TODO: ReportJniError
1311 ArtT* result = ArtT::Alloc(length);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001312 return AddLocalReference<JniT>(ts, result);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001313}
1314
Elliott Hughesf2682d52011-08-15 16:37:04 -07001315jbooleanArray NewBooleanArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001316 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001317 return NewPrimitiveArray<jbooleanArray, BooleanArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001318}
1319
Elliott Hughesf2682d52011-08-15 16:37:04 -07001320jbyteArray NewByteArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001321 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001322 return NewPrimitiveArray<jbyteArray, ByteArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001323}
1324
Elliott Hughesf2682d52011-08-15 16:37:04 -07001325jcharArray NewCharArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001326 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001327 return NewPrimitiveArray<jcharArray, CharArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001328}
1329
Elliott Hughesf2682d52011-08-15 16:37:04 -07001330jdoubleArray NewDoubleArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001331 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001332 return NewPrimitiveArray<jdoubleArray, DoubleArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001333}
1334
Elliott Hughesf2682d52011-08-15 16:37:04 -07001335jfloatArray NewFloatArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001336 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001337 return NewPrimitiveArray<jfloatArray, FloatArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001338}
1339
Elliott Hughesf2682d52011-08-15 16:37:04 -07001340jintArray NewIntArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001341 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001342 return NewPrimitiveArray<jintArray, IntArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001343}
1344
Elliott Hughesf2682d52011-08-15 16:37:04 -07001345jlongArray NewLongArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001346 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001347 return NewPrimitiveArray<jlongArray, LongArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001348}
1349
Elliott Hughesf2682d52011-08-15 16:37:04 -07001350jobjectArray NewObjectArray(JNIEnv* env, jsize length, jclass element_jclass, jobject initial_element) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001351 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001352 CHECK_GE(length, 0); // TODO: ReportJniError
1353
1354 // Compute the array class corresponding to the given element class.
1355 // TODO: DecodeReference
1356 Class* element_class = reinterpret_cast<Class*>(element_jclass);
1357 std::string descriptor;
1358 descriptor += "[";
1359 descriptor += element_class->GetDescriptor().ToString();
1360
1361 // Find the class.
1362 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
1363 // TODO: need to get the appropriate ClassLoader.
1364 Class* array_class = class_linker->FindClass(descriptor, NULL);
1365 if (array_class == NULL) {
1366 return NULL;
1367 }
1368
1369 ObjectArray<Object>* result = ObjectArray<Object>::Alloc(array_class, length);
1370 CHECK(initial_element == NULL); // TODO: support initial_element
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001371 return AddLocalReference<jobjectArray>(ts, result);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001372}
1373
1374jshortArray NewShortArray(JNIEnv* env, jsize length) {
1375 ScopedJniThreadState ts(env);
1376 return NewPrimitiveArray<jshortArray, ShortArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001377}
1378
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001379jboolean* GetBooleanArrayElements(JNIEnv* env,
1380 jbooleanArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001381 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001382 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001383 return NULL;
1384}
1385
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001386jbyte* GetByteArrayElements(JNIEnv* env, jbyteArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001387 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001388 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001389 return NULL;
1390}
1391
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001392jchar* GetCharArrayElements(JNIEnv* env, jcharArray 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 -07001398jshort* GetShortArrayElements(JNIEnv* env,
1399 jshortArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001400 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001401 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001402 return NULL;
1403}
1404
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001405jint* GetIntArrayElements(JNIEnv* env, jintArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001406 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001407 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001408 return NULL;
1409}
1410
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001411jlong* GetLongArrayElements(JNIEnv* env, jlongArray 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 -07001417jfloat* GetFloatArrayElements(JNIEnv* env,
1418 jfloatArray 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 -07001424jdouble* GetDoubleArrayElements(JNIEnv* env,
1425 jdoubleArray array, jboolean* isCopy) {
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 return NULL;
1429}
1430
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001431void ReleaseBooleanArrayElements(JNIEnv* env,
1432 jbooleanArray array, jboolean* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001433 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001434 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001435}
1436
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001437void ReleaseByteArrayElements(JNIEnv* env,
1438 jbyteArray array, jbyte* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001439 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001440 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001441}
1442
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001443void ReleaseCharArrayElements(JNIEnv* env,
1444 jcharArray array, jchar* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001445 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001446 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001447}
1448
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001449void ReleaseShortArrayElements(JNIEnv* env,
1450 jshortArray array, jshort* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001451 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001452 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001453}
1454
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001455void ReleaseIntArrayElements(JNIEnv* env,
1456 jintArray array, jint* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001457 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001458 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001459}
1460
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001461void ReleaseLongArrayElements(JNIEnv* env,
1462 jlongArray array, jlong* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001463 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001464 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001465}
1466
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001467void ReleaseFloatArrayElements(JNIEnv* env,
1468 jfloatArray array, jfloat* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001469 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001470 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001471}
1472
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001473void ReleaseDoubleArrayElements(JNIEnv* env,
1474 jdoubleArray array, jdouble* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001475 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001476 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001477}
1478
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001479void GetBooleanArrayRegion(JNIEnv* env,
1480 jbooleanArray array, jsize start, jsize l, jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001481 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001482 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001483}
1484
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001485void GetByteArrayRegion(JNIEnv* env,
1486 jbyteArray array, jsize start, jsize len, jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001487 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001488 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001489}
1490
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001491void GetCharArrayRegion(JNIEnv* env,
1492 jcharArray array, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001493 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001494 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001495}
1496
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001497void GetShortArrayRegion(JNIEnv* env,
1498 jshortArray array, jsize start, jsize len, jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001499 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001500 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001501}
1502
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001503void GetIntArrayRegion(JNIEnv* env,
1504 jintArray array, jsize start, jsize len, jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001505 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001506 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001507}
1508
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001509void GetLongArrayRegion(JNIEnv* env,
1510 jlongArray array, jsize start, jsize len, jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001511 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001512 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001513}
1514
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001515void GetFloatArrayRegion(JNIEnv* env,
1516 jfloatArray array, jsize start, jsize len, jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001517 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001518 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001519}
1520
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001521void GetDoubleArrayRegion(JNIEnv* env,
1522 jdoubleArray array, jsize start, jsize len, jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001523 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001524 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001525}
1526
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001527void SetBooleanArrayRegion(JNIEnv* env,
1528 jbooleanArray array, jsize start, jsize l, const jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001529 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001530 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001531}
1532
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001533void SetByteArrayRegion(JNIEnv* env,
1534 jbyteArray array, jsize start, jsize len, const jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001535 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001536 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001537}
1538
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001539void SetCharArrayRegion(JNIEnv* env,
1540 jcharArray array, jsize start, jsize len, const jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001541 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001542 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001543}
1544
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001545void SetShortArrayRegion(JNIEnv* env,
1546 jshortArray array, jsize start, jsize len, const jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001547 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001548 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001549}
1550
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001551void SetIntArrayRegion(JNIEnv* env,
1552 jintArray array, jsize start, jsize len, const jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001553 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001554 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001555}
1556
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001557void SetLongArrayRegion(JNIEnv* env,
1558 jlongArray array, jsize start, jsize len, const jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001559 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001560 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001561}
1562
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001563void SetFloatArrayRegion(JNIEnv* env,
1564 jfloatArray array, jsize start, jsize len, const jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001565 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001566 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001567}
1568
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001569void SetDoubleArrayRegion(JNIEnv* env,
1570 jdoubleArray array, jsize start, jsize len, const jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001571 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001572 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001573}
1574
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001575jint RegisterNatives(JNIEnv* env,
1576 jclass clazz, const JNINativeMethod* methods, jint nMethods) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001577 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001578 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001579 return 0;
1580}
1581
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001582jint UnregisterNatives(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001583 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001584 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001585 return 0;
1586}
1587
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001588jint MonitorEnter(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001589 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001590 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001591 return 0;
1592}
1593
1594jint MonitorExit(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001595 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001596 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001597 return 0;
1598}
1599
Elliott Hughesb20a5542011-08-12 18:03:12 -07001600jint GetJavaVM(JNIEnv* env, JavaVM** vm) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001601 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001602 Runtime* runtime = Runtime::Current();
1603 if (runtime != NULL) {
1604 *vm = runtime->GetJavaVM();
1605 } else {
1606 *vm = NULL;
1607 }
1608 return (*vm != NULL) ? JNI_OK : JNI_ERR;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001609}
1610
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001611void GetStringRegion(JNIEnv* env,
1612 jstring str, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001613 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001614 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001615}
1616
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001617void GetStringUTFRegion(JNIEnv* env,
1618 jstring str, jsize start, jsize len, char* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001619 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001620 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001621}
1622
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001623void* GetPrimitiveArrayCritical(JNIEnv* env,
1624 jarray array, jboolean* isCopy) {
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 return NULL;
1628}
1629
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001630void ReleasePrimitiveArrayCritical(JNIEnv* env,
1631 jarray array, void* carray, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001632 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001633 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001634}
1635
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001636const jchar* GetStringCritical(JNIEnv* env, jstring s, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001637 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001638 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001639 return NULL;
1640}
1641
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001642void ReleaseStringCritical(JNIEnv* env, jstring s, const jchar* cstr) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001643 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001644 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001645}
1646
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001647jweak NewWeakGlobalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001648 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001649 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001650 return NULL;
1651}
1652
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001653void DeleteWeakGlobalRef(JNIEnv* env, jweak obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001654 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001655 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001656}
1657
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001658jboolean ExceptionCheck(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001659 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -07001660 return ts.Self()->IsExceptionPending() ? JNI_TRUE : JNI_FALSE;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001661}
1662
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001663jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity) {
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
1669
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001670void* GetDirectBufferAddress(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001671 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001672 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001673 return NULL;
1674}
1675
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001676jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001677 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001678 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001679 return 0;
1680}
1681
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001682jobjectRefType GetObjectRefType(JNIEnv* env, jobject jobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001683 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001684 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001685 return JNIInvalidRefType;
1686}
1687
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001688static const struct JNINativeInterface gNativeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07001689 NULL, // reserved0.
1690 NULL, // reserved1.
1691 NULL, // reserved2.
1692 NULL, // reserved3.
1693 GetVersion,
1694 DefineClass,
1695 FindClass,
1696 FromReflectedMethod,
1697 FromReflectedField,
1698 ToReflectedMethod,
1699 GetSuperclass,
1700 IsAssignableFrom,
1701 ToReflectedField,
1702 Throw,
1703 ThrowNew,
1704 ExceptionOccurred,
1705 ExceptionDescribe,
1706 ExceptionClear,
1707 FatalError,
1708 PushLocalFrame,
1709 PopLocalFrame,
1710 NewGlobalRef,
1711 DeleteGlobalRef,
1712 DeleteLocalRef,
1713 IsSameObject,
1714 NewLocalRef,
1715 EnsureLocalCapacity,
1716 AllocObject,
1717 NewObject,
1718 NewObjectV,
1719 NewObjectA,
1720 GetObjectClass,
1721 IsInstanceOf,
1722 GetMethodID,
1723 CallObjectMethod,
1724 CallObjectMethodV,
1725 CallObjectMethodA,
1726 CallBooleanMethod,
1727 CallBooleanMethodV,
1728 CallBooleanMethodA,
1729 CallByteMethod,
1730 CallByteMethodV,
1731 CallByteMethodA,
1732 CallCharMethod,
1733 CallCharMethodV,
1734 CallCharMethodA,
1735 CallShortMethod,
1736 CallShortMethodV,
1737 CallShortMethodA,
1738 CallIntMethod,
1739 CallIntMethodV,
1740 CallIntMethodA,
1741 CallLongMethod,
1742 CallLongMethodV,
1743 CallLongMethodA,
1744 CallFloatMethod,
1745 CallFloatMethodV,
1746 CallFloatMethodA,
1747 CallDoubleMethod,
1748 CallDoubleMethodV,
1749 CallDoubleMethodA,
1750 CallVoidMethod,
1751 CallVoidMethodV,
1752 CallVoidMethodA,
1753 CallNonvirtualObjectMethod,
1754 CallNonvirtualObjectMethodV,
1755 CallNonvirtualObjectMethodA,
1756 CallNonvirtualBooleanMethod,
1757 CallNonvirtualBooleanMethodV,
1758 CallNonvirtualBooleanMethodA,
1759 CallNonvirtualByteMethod,
1760 CallNonvirtualByteMethodV,
1761 CallNonvirtualByteMethodA,
1762 CallNonvirtualCharMethod,
1763 CallNonvirtualCharMethodV,
1764 CallNonvirtualCharMethodA,
1765 CallNonvirtualShortMethod,
1766 CallNonvirtualShortMethodV,
1767 CallNonvirtualShortMethodA,
1768 CallNonvirtualIntMethod,
1769 CallNonvirtualIntMethodV,
1770 CallNonvirtualIntMethodA,
1771 CallNonvirtualLongMethod,
1772 CallNonvirtualLongMethodV,
1773 CallNonvirtualLongMethodA,
1774 CallNonvirtualFloatMethod,
1775 CallNonvirtualFloatMethodV,
1776 CallNonvirtualFloatMethodA,
1777 CallNonvirtualDoubleMethod,
1778 CallNonvirtualDoubleMethodV,
1779 CallNonvirtualDoubleMethodA,
1780 CallNonvirtualVoidMethod,
1781 CallNonvirtualVoidMethodV,
1782 CallNonvirtualVoidMethodA,
1783 GetFieldID,
1784 GetObjectField,
1785 GetBooleanField,
1786 GetByteField,
1787 GetCharField,
1788 GetShortField,
1789 GetIntField,
1790 GetLongField,
1791 GetFloatField,
1792 GetDoubleField,
1793 SetObjectField,
1794 SetBooleanField,
1795 SetByteField,
1796 SetCharField,
1797 SetShortField,
1798 SetIntField,
1799 SetLongField,
1800 SetFloatField,
1801 SetDoubleField,
1802 GetStaticMethodID,
1803 CallStaticObjectMethod,
1804 CallStaticObjectMethodV,
1805 CallStaticObjectMethodA,
1806 CallStaticBooleanMethod,
1807 CallStaticBooleanMethodV,
1808 CallStaticBooleanMethodA,
1809 CallStaticByteMethod,
1810 CallStaticByteMethodV,
1811 CallStaticByteMethodA,
1812 CallStaticCharMethod,
1813 CallStaticCharMethodV,
1814 CallStaticCharMethodA,
1815 CallStaticShortMethod,
1816 CallStaticShortMethodV,
1817 CallStaticShortMethodA,
1818 CallStaticIntMethod,
1819 CallStaticIntMethodV,
1820 CallStaticIntMethodA,
1821 CallStaticLongMethod,
1822 CallStaticLongMethodV,
1823 CallStaticLongMethodA,
1824 CallStaticFloatMethod,
1825 CallStaticFloatMethodV,
1826 CallStaticFloatMethodA,
1827 CallStaticDoubleMethod,
1828 CallStaticDoubleMethodV,
1829 CallStaticDoubleMethodA,
1830 CallStaticVoidMethod,
1831 CallStaticVoidMethodV,
1832 CallStaticVoidMethodA,
1833 GetStaticFieldID,
1834 GetStaticObjectField,
1835 GetStaticBooleanField,
1836 GetStaticByteField,
1837 GetStaticCharField,
1838 GetStaticShortField,
1839 GetStaticIntField,
1840 GetStaticLongField,
1841 GetStaticFloatField,
1842 GetStaticDoubleField,
1843 SetStaticObjectField,
1844 SetStaticBooleanField,
1845 SetStaticByteField,
1846 SetStaticCharField,
1847 SetStaticShortField,
1848 SetStaticIntField,
1849 SetStaticLongField,
1850 SetStaticFloatField,
1851 SetStaticDoubleField,
1852 NewString,
1853 GetStringLength,
1854 GetStringChars,
1855 ReleaseStringChars,
1856 NewStringUTF,
1857 GetStringUTFLength,
1858 GetStringUTFChars,
1859 ReleaseStringUTFChars,
1860 GetArrayLength,
1861 NewObjectArray,
1862 GetObjectArrayElement,
1863 SetObjectArrayElement,
1864 NewBooleanArray,
1865 NewByteArray,
1866 NewCharArray,
1867 NewShortArray,
1868 NewIntArray,
1869 NewLongArray,
1870 NewFloatArray,
1871 NewDoubleArray,
1872 GetBooleanArrayElements,
1873 GetByteArrayElements,
1874 GetCharArrayElements,
1875 GetShortArrayElements,
1876 GetIntArrayElements,
1877 GetLongArrayElements,
1878 GetFloatArrayElements,
1879 GetDoubleArrayElements,
1880 ReleaseBooleanArrayElements,
1881 ReleaseByteArrayElements,
1882 ReleaseCharArrayElements,
1883 ReleaseShortArrayElements,
1884 ReleaseIntArrayElements,
1885 ReleaseLongArrayElements,
1886 ReleaseFloatArrayElements,
1887 ReleaseDoubleArrayElements,
1888 GetBooleanArrayRegion,
1889 GetByteArrayRegion,
1890 GetCharArrayRegion,
1891 GetShortArrayRegion,
1892 GetIntArrayRegion,
1893 GetLongArrayRegion,
1894 GetFloatArrayRegion,
1895 GetDoubleArrayRegion,
1896 SetBooleanArrayRegion,
1897 SetByteArrayRegion,
1898 SetCharArrayRegion,
1899 SetShortArrayRegion,
1900 SetIntArrayRegion,
1901 SetLongArrayRegion,
1902 SetFloatArrayRegion,
1903 SetDoubleArrayRegion,
1904 RegisterNatives,
1905 UnregisterNatives,
1906 MonitorEnter,
1907 MonitorExit,
1908 GetJavaVM,
1909 GetStringRegion,
1910 GetStringUTFRegion,
1911 GetPrimitiveArrayCritical,
1912 ReleasePrimitiveArrayCritical,
1913 GetStringCritical,
1914 ReleaseStringCritical,
1915 NewWeakGlobalRef,
1916 DeleteWeakGlobalRef,
1917 ExceptionCheck,
1918 NewDirectByteBuffer,
1919 GetDirectBufferAddress,
1920 GetDirectBufferCapacity,
1921 GetObjectRefType,
1922};
1923
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001924void MonitorEnterHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001925 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001926 MonitorEnter(env, obj); // Ignore the result.
1927}
1928
1929void MonitorExitHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001930 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001931 MonitorExit(env, obj); // Ignore the result.
1932}
1933
1934JNIEnv* CreateJNIEnv() {
Elliott Hughes330304d2011-08-12 14:28:05 -07001935 Thread* self = Thread::Current();
1936 CHECK(self != NULL);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001937 JNIEnvExt* result = new JNIEnvExt;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001938 result->fns = &gNativeInterface;
Elliott Hughes330304d2011-08-12 14:28:05 -07001939 result->self = self;
Elliott Hughesf2682d52011-08-15 16:37:04 -07001940 result->critical = false;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001941 result->MonitorEnterHelper = &MonitorEnterHelper;
1942 result->MonitorExitHelper = &MonitorExitHelper;
1943 return reinterpret_cast<JNIEnv*>(result);
1944}
1945
Carl Shapiroea4dca82011-08-01 13:45:38 -07001946// JNI Invocation interface.
1947
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001948extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, void** p_env, void* vm_args) {
1949 const JavaVMInitArgs* args = static_cast<JavaVMInitArgs*>(vm_args);
1950 if (args->version < JNI_VERSION_1_2) {
1951 return JNI_EVERSION;
1952 }
1953 Runtime::Options options;
1954 for (int i = 0; i < args->nOptions; ++i) {
1955 JavaVMOption* option = &args->options[i];
Carl Shapirofc322c72011-07-27 00:20:01 -07001956 options.push_back(std::make_pair(StringPiece(option->optionString),
1957 option->extraInfo));
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001958 }
1959 bool ignore_unrecognized = args->ignoreUnrecognized;
Elliott Hughesf2682d52011-08-15 16:37:04 -07001960 Runtime* runtime = Runtime::Create(options, ignore_unrecognized);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001961 if (runtime == NULL) {
1962 return JNI_ERR;
1963 } else {
1964 *p_env = reinterpret_cast<JNIEnv*>(Thread::Current()->GetJniEnv());
Elliott Hughesf2682d52011-08-15 16:37:04 -07001965 *p_vm = runtime->GetJavaVM();
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001966 return JNI_OK;
1967 }
1968}
1969
Elliott Hughesf2682d52011-08-15 16:37:04 -07001970extern "C" jint JNI_GetCreatedJavaVMs(JavaVM** vms, jsize, jsize* vm_count) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001971 Runtime* runtime = Runtime::Current();
1972 if (runtime == NULL) {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001973 *vm_count = 0;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001974 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001975 *vm_count = 1;
1976 vms[0] = runtime->GetJavaVM();
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001977 }
1978 return JNI_OK;
1979}
1980
1981// Historically unsupported.
1982extern "C" jint JNI_GetDefaultJavaVMInitArgs(void* vm_args) {
1983 return JNI_ERR;
1984}
1985
Elliott Hughesf2682d52011-08-15 16:37:04 -07001986jint DestroyJavaVM(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001987 if (vm == NULL) {
1988 return JNI_ERR;
1989 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001990 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
1991 delete raw_vm->runtime;
1992 raw_vm->runtime = NULL;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001993 return JNI_OK;
1994 }
1995}
1996
Elliott Hughesf2682d52011-08-15 16:37:04 -07001997jint AttachCurrentThread(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001998 if (vm == NULL || p_env == NULL) {
1999 return JNI_ERR;
2000 }
Elliott Hughesf2682d52011-08-15 16:37:04 -07002001 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2002 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002003 const char* name = NULL;
2004 if (thr_args != NULL) {
2005 // TODO: check version
2006 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2007 // TODO: thread group
2008 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002009 bool success = runtime->AttachCurrentThread(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002010 if (!success) {
2011 return JNI_ERR;
2012 } else {
2013 return JNI_OK;
2014 }
2015}
2016
Elliott Hughesf2682d52011-08-15 16:37:04 -07002017jint DetachCurrentThread(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002018 if (vm == NULL) {
2019 return JNI_ERR;
2020 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07002021 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2022 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002023 runtime->DetachCurrentThread();
2024 return JNI_OK;
2025 }
2026}
2027
Elliott Hughesf2682d52011-08-15 16:37:04 -07002028jint GetEnv(JavaVM* vm, void** env, jint version) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002029 if (version < JNI_VERSION_1_1 || version > JNI_VERSION_1_6) {
2030 return JNI_EVERSION;
2031 }
2032 if (vm == NULL || env == NULL) {
2033 return JNI_ERR;
2034 }
2035 Thread* thread = Thread::Current();
2036 if (thread == NULL) {
2037 *env = NULL;
2038 return JNI_EDETACHED;
2039 }
2040 *env = thread->GetJniEnv();
2041 return JNI_OK;
2042}
2043
Elliott Hughesf2682d52011-08-15 16:37:04 -07002044jint AttachCurrentThreadAsDaemon(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002045 if (vm == NULL || p_env == NULL) {
2046 return JNI_ERR;
2047 }
Elliott Hughesf2682d52011-08-15 16:37:04 -07002048 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2049 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002050 const char* name = NULL;
2051 if (thr_args != NULL) {
2052 // TODO: check version
2053 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2054 // TODO: thread group
2055 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002056 bool success = runtime->AttachCurrentThreadAsDaemon(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002057 if (!success) {
2058 return JNI_ERR;
2059 } else {
2060 return JNI_OK;
2061 }
2062}
2063
Elliott Hughesf2682d52011-08-15 16:37:04 -07002064struct JNIInvokeInterface gInvokeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07002065 NULL, // reserved0
2066 NULL, // reserved1
2067 NULL, // reserved2
2068 DestroyJavaVM,
2069 AttachCurrentThread,
2070 DetachCurrentThread,
2071 GetEnv,
2072 AttachCurrentThreadAsDaemon
2073};
2074
Elliott Hughesf2682d52011-08-15 16:37:04 -07002075JavaVM* CreateJavaVM(Runtime* runtime) {
2076 JavaVMExt* result = new JavaVMExt;
2077 result->fns = &gInvokeInterface;
2078 result->runtime = runtime;
2079 return reinterpret_cast<JavaVM*>(result);
2080}
2081
Ian Rogersdf20fe02011-07-20 20:34:16 -07002082} // namespace art