@@ -57,6 +57,7 @@ long my_getThreadId() {
5757 NODE_SET_PROTOTYPE_METHOD (s_ct, " newFloat" , newFloat);
5858 NODE_SET_PROTOTYPE_METHOD (s_ct, " getStaticFieldValue" , getStaticFieldValue);
5959 NODE_SET_PROTOTYPE_METHOD (s_ct, " setStaticFieldValue" , setStaticFieldValue);
60+ NODE_SET_PROTOTYPE_METHOD (s_ct, " instanceof" , instanceof);
6061
6162 target->Set (v8::String::NewSymbol (" Java" ), s_ct->GetFunction ());
6263}
@@ -793,6 +794,37 @@ void Java::destroyJVM(JavaVM** jvm, JNIEnv** env) {
793794 return v8::Undefined ();
794795}
795796
797+ /* static*/ v8::Handle<v8::Value> Java::instanceof (const v8::Arguments& args) {
798+ v8::HandleScope scope;
799+ Java* self = node::ObjectWrap::Unwrap<Java>(args.This ());
800+ v8::Handle<v8::Value> ensureJvmResults = self->ensureJvm ();
801+ if (!ensureJvmResults->IsUndefined ()) {
802+ return ensureJvmResults;
803+ }
804+ JNIEnv* env = self->getJavaEnv ();
805+ JavaScope javaScope (env);
806+
807+ int argsStart = 0 ;
808+ ARGS_FRONT_OBJECT (obj);
809+ ARGS_FRONT_STRING (className);
810+
811+ jobject instance = v8ToJava (env, obj);
812+ if (!instance) {
813+ // not even a Java object
814+ return v8::False ();
815+ }
816+
817+ jclass clazz = javaFindClass (env, className);
818+ if (!clazz) {
819+ std::ostringstream errStr;
820+ errStr << " Could not find class " << className.c_str ();
821+ return ThrowException (javaExceptionToV8 (self, env, errStr.str ()));
822+ }
823+
824+ jboolean res = env->IsInstanceOf (instance, clazz);
825+ return v8::Boolean::New (res);
826+ }
827+
796828void EIO_CallJs (uv_work_t * req) {
797829}
798830
0 commit comments