Skip to content

Commit 3b1a768

Browse files
joefernerjsdevel
authored andcommitted
compiles with nan
1 parent 2f75d99 commit 3b1a768

4 files changed

Lines changed: 31 additions & 28 deletions

File tree

src/javaObject.cpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include <sstream>
77
#include <algorithm>
88

9-
/*static*/ std::map<std::string, v8::Persistent<v8::FunctionTemplate> > JavaObject::sFunctionTemplates;
9+
/*static*/ std::map<std::string, v8::Persistent<v8::FunctionTemplate>*> JavaObject::sFunctionTemplates;
1010

1111
/*static*/ void JavaObject::Init(v8::Handle<v8::Object> target) {
1212
}
@@ -28,14 +28,14 @@
2828
std::replace(className.begin(), className.end(), '[', 'a');
2929
className = "nodeJava_" + className;
3030

31-
v8::Persistent<v8::FunctionTemplate> persistentFuncTemplate;
31+
v8::Local<v8::FunctionTemplate> funcTemplate;
3232
if(sFunctionTemplates.find(className) != sFunctionTemplates.end()) {
3333
//printf("existing className: %s\n", className.c_str());
34-
persistentFuncTemplate = sFunctionTemplates[className];
34+
funcTemplate = NanPersistentToLocal(*sFunctionTemplates[className]);
3535
} else {
3636
//printf("create className: %s\n", className.c_str());
3737

38-
v8::Local<v8::FunctionTemplate> funcTemplate = v8::FunctionTemplate::New();
38+
funcTemplate = v8::FunctionTemplate::New();
3939
funcTemplate->InstanceTemplate()->SetInternalFieldCount(1);
4040
funcTemplate->SetClassName(v8::String::NewSymbol(className.c_str()));
4141

@@ -70,16 +70,18 @@
7070
funcTemplate->InstanceTemplate()->SetAccessor(fieldName, fieldGetter, fieldSetter);
7171
}
7272

73-
sFunctionTemplates[className] = persistentFuncTemplate = v8::Persistent<v8::FunctionTemplate>::New(funcTemplate);
73+
v8::Persistent<v8::FunctionTemplate>* persistentFuncTemplate = new v8::Persistent<v8::FunctionTemplate>();
74+
NanAssignPersistent(v8::FunctionTemplate, (*persistentFuncTemplate), funcTemplate);
75+
sFunctionTemplates[className] = persistentFuncTemplate;
7476
}
7577

76-
v8::Local<v8::Function> ctor = persistentFuncTemplate->GetFunction();
78+
v8::Local<v8::Function> ctor = funcTemplate->GetFunction();
7779
v8::Local<v8::Object> javaObjectObj = ctor->NewInstance();
7880
javaObjectObj->SetHiddenValue(v8::String::New(V8_HIDDEN_MARKER_JAVA_OBJECT), v8::Boolean::New(true));
7981
JavaObject *self = new JavaObject(java, obj);
8082
self->Wrap(javaObjectObj);
8183

82-
NanReturnValue(javaObjectObj);
84+
return javaObjectObj;
8385
}
8486

8587
JavaObject::JavaObject(Java *java, jobject obj) {
@@ -132,7 +134,7 @@ NAN_METHOD(JavaObject::methodCall) {
132134
if(method == NULL) {
133135
std::string msg = methodNotFoundToString(env, self->m_class, methodNameStr, false, args, argsStart, argsEnd);
134136
EXCEPTION_CALL_CALLBACK(self->m_java, msg);
135-
return v8::Undefined();
137+
NanReturnUndefined();
136138
}
137139

138140
// run
@@ -160,7 +162,7 @@ NAN_METHOD(JavaObject::methodCallSync) {
160162
if(method == NULL) {
161163
std::string msg = methodNotFoundToString(env, self->m_class, methodNameStr, false, args, argsStart, argsEnd);
162164
v8::Handle<v8::Value> ex = javaExceptionToV8(self->m_java, env, msg);
163-
return ThrowException(ex);
165+
return NanThrowError(ex);
164166
}
165167

166168
// run
@@ -170,15 +172,15 @@ NAN_METHOD(JavaObject::methodCallSync) {
170172
delete baton;
171173

172174
if(result->IsNativeError()) {
173-
return ThrowException(result);
175+
return NanThrowError(result);
174176
}
175177

176178
NanReturnValue(result);
177179
}
178180

179181
NAN_GETTER(JavaObject::fieldGetter) {
180182
NanScope();
181-
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(info.This());
183+
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(args.This());
182184
JNIEnv *env = self->m_java->getJavaEnv();
183185
JavaScope javaScope(env);
184186

@@ -189,7 +191,7 @@ NAN_GETTER(JavaObject::fieldGetter) {
189191
std::ostringstream errStr;
190192
errStr << "Could not find field " << propertyStr;
191193
v8::Handle<v8::Value> ex = javaExceptionToV8(self->m_java, env, errStr.str());
192-
return ThrowException(ex);
194+
return NanThrowError(ex);
193195
}
194196

195197
jclass fieldClazz = env->FindClass("java/lang/reflect/Field");
@@ -201,7 +203,7 @@ NAN_GETTER(JavaObject::fieldGetter) {
201203
std::ostringstream errStr;
202204
errStr << "Could not get field " << propertyStr;
203205
v8::Handle<v8::Value> ex = javaExceptionToV8(self->m_java, env, errStr.str());
204-
return ThrowException(ex);
206+
return NanThrowError(ex);
205207
}
206208

207209
v8::Handle<v8::Value> result = javaToV8(self->m_java, env, val);
@@ -211,7 +213,7 @@ NAN_GETTER(JavaObject::fieldGetter) {
211213

212214
NAN_SETTER(JavaObject::fieldSetter) {
213215
NanScope();
214-
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(info.This());
216+
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(args.This());
215217
JNIEnv *env = self->m_java->getJavaEnv();
216218
JavaScope javaScope(env);
217219

src/javaObject.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class JavaObject : public node::ObjectWrap {
3030
static NAN_GETTER(fieldGetter);
3131
static NAN_SETTER(fieldSetter);
3232

33-
static std::map<std::string, v8::Persistent<v8::FunctionTemplate> > sFunctionTemplates;
33+
static std::map<std::string, v8::Persistent<v8::FunctionTemplate>*> sFunctionTemplates;
3434
Java* m_java;
3535
jobject m_obj;
3636
jclass m_class;

src/methodCallBaton.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ MethodCallBaton::MethodCallBaton(Java* java, jobject method, jarray args, v8::Ha
99

1010
m_java = java;
1111
m_args = (jarray)env->NewGlobalRef(args);
12-
m_callback = v8::Persistent<v8::Value>::New(callback);
12+
NanAssignPersistent(v8::Value, m_callback, callback);
1313
m_method = env->NewGlobalRef(method);
1414
m_error = NULL;
1515
m_result = NULL;
@@ -62,10 +62,11 @@ v8::Handle<v8::Value> MethodCallBaton::runSync() {
6262
}
6363

6464
void MethodCallBaton::after(JNIEnv *env) {
65-
v8::HandleScope scope;
65+
NanScope();
6666

67-
if(m_callback->IsFunction()) {
68-
v8::Local<v8::Function> callback = v8::Function::Cast(*m_callback);
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);
6970
v8::Handle<v8::Value> result = resultsToV8(env);
7071
v8::Handle<v8::Value> argv[2];
7172
if(result->IsNativeError()) {
@@ -80,7 +81,7 @@ void MethodCallBaton::after(JNIEnv *env) {
8081
}
8182

8283
v8::Handle<v8::Value> MethodCallBaton::resultsToV8(JNIEnv *env) {
83-
v8::HandleScope scope;
84+
NanScope();
8485

8586
if(m_error) {
8687
jthrowable cause = m_error;

src/utils.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ jobject v8ToJava(JNIEnv* env, v8::Local<v8::Value> arg) {
251251
}
252252

253253
if(arg->IsArray()) {
254-
v8::Local<v8::Array> array = v8::Array::Cast(*arg);
254+
v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(arg);
255255
uint32_t arraySize = array->Length();
256256
jclass objectClazz = env->FindClass("java/lang/Object");
257257
jobjectArray result = env->NewObjectArray(arraySize, objectClazz, NULL);
@@ -289,7 +289,7 @@ jobject v8ToJava(JNIEnv* env, v8::Local<v8::Value> arg) {
289289
}
290290

291291
if(arg->IsObject()) {
292-
v8::Local<v8::Object> obj = v8::Object::Cast(*arg);
292+
v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(arg);
293293

294294
v8::Local<v8::Value> isJavaObject = obj->GetHiddenValue(v8::String::New(V8_HIDDEN_MARKER_JAVA_OBJECT));
295295
if(!isJavaObject.IsEmpty() && isJavaObject->IsBoolean()) {
@@ -382,7 +382,7 @@ jobject v8ToJava_javaLong(JNIEnv* env, v8::Local<v8::Object> obj) {
382382
return jobj;
383383
}
384384

385-
jobjectArray v8ToJava(JNIEnv* env, const v8::Arguments& args, int start, int end) {
385+
jobjectArray v8ToJava(JNIEnv* env, _NAN_METHOD_ARGS_TYPE args, int start, int end) {
386386
jclass clazz = env->FindClass("java/lang/Object");
387387
jobjectArray results = env->NewObjectArray(end-start, clazz, NULL);
388388

@@ -415,7 +415,7 @@ 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-
v8::HandleScope scope;
418+
NanScope();
419419

420420
std::ostringstream msg;
421421
msg << alternateMessage;
@@ -432,7 +432,7 @@ v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, jthrowable ex,
432432
}
433433

434434
v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, const std::string& alternateMessage) {
435-
v8::HandleScope scope;
435+
NanScope();
436436
jthrowable ex = env->ExceptionOccurred();
437437
env->ExceptionClear();
438438
return scope.Close(javaExceptionToV8(java, env, ex, alternateMessage));
@@ -455,7 +455,7 @@ jvalueType javaGetArrayComponentType(JNIEnv *env, jobjectArray array) {
455455
}
456456

457457
v8::Handle<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArray) {
458-
v8::HandleScope scope;
458+
NanScope();
459459

460460
if(objArray == NULL) {
461461
return v8::Null();
@@ -553,7 +553,7 @@ v8::Handle<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArr
553553
}
554554

555555
v8::Handle<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj) {
556-
v8::HandleScope scope;
556+
NanScope();
557557

558558
if(obj == NULL) {
559559
return v8::Null();
@@ -698,7 +698,7 @@ int dynamicProxyDataVerify(DynamicProxyData* data) {
698698
return 0;
699699
}
700700

701-
std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string methodName, bool constructor, const v8::Arguments& args, int argStart, int argEnd) {
701+
std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string methodName, bool constructor, _NAN_METHOD_ARGS_TYPE args, int argStart, int argEnd) {
702702
std::ostringstream startOfMessage;
703703
std::ostringstream msg;
704704

0 commit comments

Comments
 (0)