Skip to content

Commit 444db95

Browse files
joefernerjsdevel
authored andcommitted
passes all nodeunit tests with node v0.10.15
1 parent 3b1a768 commit 444db95

5 files changed

Lines changed: 30 additions & 31 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"dependencies": {
2929
"find-java-home": "0.1.1",
3030
"glob": "~3.2.9",
31-
"nan": "^0.8.0"
31+
"nan": "0.8.0"
3232
},
3333
"devDependencies": {
3434
"nodeunit": "~0.6.4",

src/java.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ NAN_METHOD(Java::newInstanceSync) {
294294
}
295295

296296
// run
297-
v8::Handle<v8::Value> callback = v8::Undefined();
297+
v8::Handle<v8::Value> callback = v8::Null();
298298
NewInstanceBaton* baton = new NewInstanceBaton(self, clazz, method, methodArgs, callback);
299299
v8::Handle<v8::Value> result = baton->runSync();
300300
delete baton;
@@ -349,7 +349,7 @@ NAN_METHOD(Java::newProxy) {
349349
}
350350

351351
// run constructor
352-
v8::Handle<v8::Value> callback = v8::Undefined();
352+
v8::Handle<v8::Value> callback = v8::Null();
353353
NewInstanceBaton* baton = new NewInstanceBaton(self, clazz, method, methodArgs, callback);
354354
v8::Handle<v8::Value> result = baton->runSync();
355355
delete baton;
@@ -435,7 +435,7 @@ NAN_METHOD(Java::callStaticMethodSync) {
435435
}
436436

437437
// run
438-
v8::Handle<v8::Value> callback = v8::Undefined();
438+
v8::Handle<v8::Value> callback = v8::Null();
439439
StaticMethodCallBaton* baton = new StaticMethodCallBaton(self, clazz, method, methodArgs, callback);
440440
v8::Handle<v8::Value> result = baton->runSync();
441441
delete baton;

src/methodCallBaton.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66

77
MethodCallBaton::MethodCallBaton(Java* java, jobject method, jarray args, v8::Handle<v8::Value>& callback) {
88
JNIEnv *env = java->getJavaEnv();
9-
109
m_java = java;
1110
m_args = (jarray)env->NewGlobalRef(args);
12-
NanAssignPersistent(v8::Value, m_callback, callback);
11+
if(callback->IsFunction()) {
12+
m_callback = new NanCallback(v8::Handle<v8::Function>::Cast(callback));
13+
} else {
14+
m_callback = new NanCallback();
15+
}
1316
m_method = env->NewGlobalRef(method);
1417
m_error = NULL;
1518
m_result = NULL;
@@ -26,7 +29,7 @@ MethodCallBaton::~MethodCallBaton() {
2629
}
2730
env->DeleteGlobalRef(m_args);
2831
env->DeleteGlobalRef(m_method);
29-
m_callback.Dispose();
32+
delete m_callback;
3033
}
3134

3235
void MethodCallBaton::run() {
@@ -64,20 +67,16 @@ v8::Handle<v8::Value> MethodCallBaton::runSync() {
6467
void MethodCallBaton::after(JNIEnv *env) {
6568
NanScope();
6669

67-
v8::Local<v8::Value> callback = NanPersistentToLocal(m_callback);
68-
if(callback->IsFunction()) {
69-
v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast(callback);
70-
v8::Handle<v8::Value> result = resultsToV8(env);
71-
v8::Handle<v8::Value> argv[2];
72-
if(result->IsNativeError()) {
73-
argv[0] = result;
74-
argv[1] = v8::Undefined();
75-
} else {
76-
argv[0] = v8::Undefined();
77-
argv[1] = result;
78-
}
79-
node::MakeCallback(v8::Context::GetCurrent()->Global(), callback, 2, argv);
70+
v8::Handle<v8::Value> result = resultsToV8(env);
71+
v8::Handle<v8::Value> argv[2];
72+
if(result->IsNativeError()) {
73+
argv[0] = result;
74+
argv[1] = v8::Undefined();
75+
} else {
76+
argv[0] = v8::Undefined();
77+
argv[1] = result;
8078
}
79+
m_callback->Call(2, argv);
8180
}
8281

8382
v8::Handle<v8::Value> MethodCallBaton::resultsToV8(JNIEnv *env) {

src/methodCallBaton.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class MethodCallBaton {
3232
v8::Handle<v8::Value> resultsToV8(JNIEnv *env);
3333

3434
Java* m_java;
35-
v8::Persistent<v8::Value> m_callback;
35+
NanCallback *m_callback;
3636
jthrowable m_error;
3737
std::string m_errorString;
3838
jarray m_args;

src/utils.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,16 @@ std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string method
103103

104104
#define ARGS_FRONT_CLASSNAME() ARGS_FRONT_STRING(className)
105105

106-
#define ARGS_BACK_CALLBACK() \
107-
bool callbackProvided; \
108-
v8::Handle<v8::Value> callback; \
109-
if(args[args.Length()-1]->IsFunction()) { \
110-
callback = args[argsEnd-1]; \
111-
argsEnd--; \
112-
callbackProvided = true; \
113-
} else { \
114-
callback = v8::Null(); \
115-
callbackProvided = false; \
106+
#define ARGS_BACK_CALLBACK() \
107+
bool callbackProvided; \
108+
v8::Handle<v8::Value> callback; \
109+
if(args[args.Length()-1]->IsFunction()) { \
110+
callback = args[argsEnd-1]; \
111+
argsEnd--; \
112+
callbackProvided = true; \
113+
} else { \
114+
callback = v8::Null(); \
115+
callbackProvided = false; \
116116
}
117117

118118
#define EXCEPTION_CALL_CALLBACK(JAVA, STRBUILDER) \

0 commit comments

Comments
 (0)