Skip to content

Commit cdca272

Browse files
committed
Still a few outstanding items:
1. Our current version of nodeunit does not work with node 0.11 2. The latest versions of nodeunit do not work with node 0.8 3. A segfault is occurring in methodBaton(see comment therein).
1 parent 5b4f3ee commit cdca272

3 files changed

Lines changed: 26 additions & 31 deletions

File tree

src/methodCallBaton.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ v8::Handle<v8::Value> MethodCallBaton::runSync() {
6767
void MethodCallBaton::after(JNIEnv *env) {
6868
NanScope();
6969

70+
//on 0.11 we're getting segfault due to the scope closing.
71+
//v8 doesnt' let us create handles without having an open scope as of 0.11.
7072
v8::Handle<v8::Value> result = resultsToV8(env);
7173
v8::Handle<v8::Value> argv[2];
7274
if(result->IsNativeError()) {
@@ -80,7 +82,7 @@ void MethodCallBaton::after(JNIEnv *env) {
8082
}
8183

8284
v8::Handle<v8::Value> MethodCallBaton::resultsToV8(JNIEnv *env) {
83-
NanScope();
85+
NanEscapableScope();
8486

8587
if(m_error) {
8688
jthrowable cause = m_error;
@@ -97,10 +99,10 @@ v8::Handle<v8::Value> MethodCallBaton::resultsToV8(JNIEnv *env) {
9799
}
98100

99101
v8::Handle<v8::Value> err = javaExceptionToV8(m_java, env, cause, m_errorString);
100-
NanReturnValue(err);
102+
return NanEscapeScope(err);
101103
}
102104

103-
NanReturnValue(javaToV8(m_java, env, m_result));
105+
return NanEscapeScope(javaToV8(m_java, env, m_result));
104106
}
105107

106108
void NewInstanceBaton::execute(JNIEnv *env) {

src/utils.cpp

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,6 @@ std::string javaExceptionToString(JNIEnv* env, jthrowable ex) {
415415
}
416416

417417
v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, jthrowable ex, const std::string& alternateMessage) {
418-
NanScope();
419-
420418
std::ostringstream msg;
421419
msg << alternateMessage;
422420

@@ -425,17 +423,16 @@ v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, jthrowable ex,
425423

426424
v8::Local<v8::Value> v8ex = v8::Exception::Error(NanNew<v8::String>(msg.str().c_str()));
427425
((v8::Object*)*v8ex)->Set(NanNew<v8::String>("cause"), javaToV8(java, env, ex));
428-
NanReturnValue(v8ex);
426+
return v8ex;
429427
}
430428

431-
NanReturnValue(v8::Exception::Error(NanNew<v8::String>(msg.str().c_str())));
429+
return v8::Exception::Error(NanNew<v8::String>(msg.str().c_str()));
432430
}
433431

434432
v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, const std::string& alternateMessage) {
435-
NanScope();
436433
jthrowable ex = env->ExceptionOccurred();
437434
env->ExceptionClear();
438-
NanReturnValue(javaExceptionToV8(java, env, ex, alternateMessage));
435+
return javaExceptionToV8(java, env, ex, alternateMessage);
439436
}
440437

441438
jvalueType javaGetArrayComponentType(JNIEnv *env, jobjectArray array) {
@@ -455,10 +452,8 @@ jvalueType javaGetArrayComponentType(JNIEnv *env, jobjectArray array) {
455452
}
456453

457454
v8::Handle<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArray) {
458-
NanScope();
459-
460455
if(objArray == NULL) {
461-
return v8::Null();
456+
return NanNull();
462457
}
463458

464459
jvalueType arrayComponentType = javaGetArrayComponentType(env, objArray);
@@ -549,14 +544,12 @@ v8::Handle<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArr
549544
break;
550545
}
551546

552-
NanReturnValue(result);
547+
return result;
553548
}
554549

555550
v8::Handle<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj) {
556-
NanScope();
557-
558551
if(obj == NULL) {
559-
return v8::Null();
552+
return NanNull();
560553
}
561554

562555
jclass objClazz = env->GetObjectClass(obj);
@@ -568,25 +561,25 @@ v8::Handle<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj) {
568561
case TYPE_ARRAY:
569562
{
570563
v8::Handle<v8::Value> result = javaArrayToV8(java, env, (jobjectArray)obj);
571-
NanReturnValue(result);
564+
return result;
572565
}
573566
case TYPE_VOID:
574-
return v8::Undefined();
567+
return NanUndefined();
575568
case TYPE_BOOLEAN:
576569
{
577570
jclass booleanClazz = env->FindClass("java/lang/Boolean");
578571
jmethodID boolean_booleanValue = env->GetMethodID(booleanClazz, "booleanValue", "()Z");
579572
bool result = env->CallBooleanMethod(obj, boolean_booleanValue);
580573
assert(!env->ExceptionCheck());
581-
NanReturnValue(NanNew<v8::Boolean>(result));
574+
return NanNew<v8::Boolean>(result);
582575
}
583576
case TYPE_BYTE:
584577
{
585578
jclass byteClazz = env->FindClass("java/lang/Byte");
586579
jmethodID byte_byteValue = env->GetMethodID(byteClazz, "byteValue", "()B");
587580
jbyte result = env->CallByteMethod(obj, byte_byteValue);
588581
checkJavaException(env);
589-
NanReturnValue(NanNew<v8::Number>(result));
582+
return NanNew<v8::Number>(result);
590583
}
591584
case TYPE_LONG:
592585
{
@@ -595,54 +588,54 @@ v8::Handle<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj) {
595588
jlong result = env->CallLongMethod(obj, long_longValue);
596589
checkJavaException(env);
597590
std::string strValue = javaObjectToString(env, obj);
598-
v8::Local<v8::Value> v8Result = v8::NumberObject::New(result);
591+
v8::Local<v8::Value> v8Result = NanNew<v8::NumberObject>((double)result);
599592
v8::NumberObject* v8ResultNumberObject = v8::NumberObject::Cast(*v8Result);
600593
v8ResultNumberObject->Set(NanNew<v8::String>("longValue"), NanNew<v8::String>(strValue.c_str()));
601594
v8ResultNumberObject->SetHiddenValue(NanNew<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG), NanNew<v8::Boolean>(true));
602-
NanReturnValue(v8Result);
595+
return v8Result;
603596
}
604597
case TYPE_INT:
605598
{
606599
jclass integerClazz = env->FindClass("java/lang/Integer");
607600
jmethodID integer_intValue = env->GetMethodID(integerClazz, "intValue", "()I");
608601
jint result = env->CallIntMethod(obj, integer_intValue);
609602
checkJavaException(env);
610-
NanReturnValue(NanNew<v8::Integer>(result));
603+
return NanNew<v8::Integer>(result);
611604
}
612605
case TYPE_SHORT:
613606
{
614607
jclass shortClazz = env->FindClass("java/lang/Short");
615608
jmethodID short_shortValue = env->GetMethodID(shortClazz, "shortValue", "()S");
616609
jshort result = env->CallShortMethod(obj, short_shortValue);
617610
assert(!env->ExceptionCheck());
618-
NanReturnValue(NanNew<v8::Integer>(result));
611+
return NanNew<v8::Integer>(result);
619612
}
620613
case TYPE_DOUBLE:
621614
{
622615
jclass doubleClazz = env->FindClass("java/lang/Double");
623616
jmethodID double_doubleValue = env->GetMethodID(doubleClazz, "doubleValue", "()D");
624617
jdouble result = env->CallDoubleMethod(obj, double_doubleValue);
625618
checkJavaException(env);
626-
NanReturnValue(NanNew<v8::Number>(result));
619+
return NanNew<v8::Number>(result);
627620
}
628621
case TYPE_FLOAT:
629622
{
630623
jclass floatClazz = env->FindClass("java/lang/Float");
631624
jmethodID float_floatValue = env->GetMethodID(floatClazz, "floatValue", "()F");
632625
jfloat result = env->CallFloatMethod(obj, float_floatValue);
633626
assert(!env->ExceptionCheck());
634-
NanReturnValue(NanNew<v8::Number>(result));
627+
return NanNew<v8::Number>(result);
635628
}
636629
case TYPE_STRING:
637-
NanReturnValue(NanNew<v8::String>(javaObjectToString(env, obj).c_str()));
630+
return NanNew<v8::String>(javaObjectToString(env, obj).c_str());
638631
case TYPE_OBJECT:
639-
NanReturnValue(JavaObject::New(java, obj));
632+
return JavaObject::New(java, obj);
640633
default:
641634
printf("javaToV8: unhandled type: 0x%03x\n", resultType);
642-
NanReturnValue(JavaObject::New(java, obj));
635+
return JavaObject::New(java, obj);
643636
}
644637

645-
return v8::Undefined();
638+
return NanUndefined();
646639
}
647640

648641
jobjectArray javaObjectArrayToClasses(JNIEnv *env, jobjectArray objs) {

test/java-callStaticMethod-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ exports['Java - Call Static Method'] = nodeunit.testCase({
4444
test.ok(Math.abs(parseFloat(result) - 100.1) < 0.0001);
4545
test.done();
4646
},
47-
47+
4848
"callStaticMethod bad class name": function(test) {
4949
java.callStaticMethod("BadClassName", "staticMethod", function(err, result) {
5050
test.ok(err);

0 commit comments

Comments
 (0)