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}
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
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
8587JavaObject::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
179181NAN_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
212214NAN_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
0 commit comments