@@ -87,6 +87,12 @@ NAN_METHOD(Java::New) {
8787Java::Java () {
8888 this ->m_jvm = NULL ;
8989 this ->m_env = NULL ;
90+
91+ m_SyncSuffix = " Sync" ;
92+ m_AsyncSuffix = " " ;
93+ doSync = true ;
94+ doAsync = true ;
95+ doPromise = false ;
9096}
9197
9298Java::~Java () {
@@ -95,28 +101,73 @@ Java::~Java() {
95101
96102v8::Local<v8::Value> Java::ensureJvm () {
97103 if (!m_jvm) {
98- return createJVM (&this ->m_jvm , &this ->m_env );
104+ v8::Local<v8::Value> result = createJVM (&this ->m_jvm , &this ->m_env );
105+ assert (result->IsNull ());
106+ return result;
99107 }
100108
101109 return NanNull ();
102110}
103111
112+ void Java::configureAsync (v8::Local<v8::Value>& asyncOptions) {
113+ v8::Local<v8::Object> asyncOptionsObj = asyncOptions.As <v8::Object>();
114+
115+ m_SyncSuffix = " invalid" ;
116+ m_AsyncSuffix = " invalid" ;
117+ m_PromiseSuffix = " invalid" ;
118+ doSync = false ;
119+ doAsync = false ;
120+ doPromise = false ;
121+
122+ v8::Local<v8::Value> suffixValue = asyncOptionsObj->Get (NanNew<v8::String>(" syncSuffix" ));
123+ if (suffixValue->IsString ()) {
124+ v8::Local<v8::String> suffix = suffixValue->ToString ();
125+ v8::String::Utf8Value utf8 (suffix);
126+ m_SyncSuffix.assign (*utf8);
127+ doSync = true ;
128+ }
129+
130+ suffixValue = asyncOptionsObj->Get (NanNew<v8::String>(" asyncSuffix" ));
131+ if (suffixValue->IsString ()) {
132+ v8::Local<v8::String> suffix = suffixValue->ToString ();
133+ v8::String::Utf8Value utf8 (suffix);
134+ m_AsyncSuffix.assign (*utf8);
135+ doAsync = true ;
136+ }
137+
138+ suffixValue = asyncOptionsObj->Get (NanNew<v8::String>(" promiseSuffix" ));
139+ if (suffixValue->IsString ()) {
140+ v8::Local<v8::String> suffix = suffixValue->ToString ();
141+ v8::String::Utf8Value utf8 (suffix);
142+ m_PromiseSuffix.assign (*utf8);
143+ v8::Local<v8::Value> promisify = asyncOptionsObj->Get (NanNew<v8::String>(" promisify" ));
144+ if (!promisify->IsFunction ()) {
145+ fprintf (stderr, " asyncOptions.promisify must be a function" );
146+ assert (promisify->IsFunction ());
147+ }
148+ doPromise = true ;
149+ }
150+
151+ if (doSync && doAsync) {
152+ assert (m_SyncSuffix != m_AsyncSuffix);
153+ }
154+ if (doSync && doPromise) {
155+ assert (m_SyncSuffix != m_PromiseSuffix);
156+ }
157+ if (doAsync && doPromise) {
158+ assert (m_AsyncSuffix != m_PromiseSuffix);
159+ }
160+
161+ NanAssignPersistent (m_asyncOptions, asyncOptionsObj);
162+ }
163+
104164v8::Local<v8::Value> Java::createJVM (JavaVM** jvm, JNIEnv** env) {
105165 JavaVM* jvmTemp;
106166 JavaVMInitArgs args;
107167
108168 v8::Local<v8::Value> asyncOptions = NanObjectWrapHandle (this )->Get (NanNew<v8::String>(" asyncOptions" ));
109169 if (asyncOptions->IsObject ()) {
110- v8::Local<v8::Object> asyncOptionsObj = asyncOptions.As <v8::Object>();
111- v8::Local<v8::Value> promisify = asyncOptionsObj->Get (NanNew<v8::String>(" promisify" ));
112- if (!promisify->IsFunction ()) {
113- return NanTypeError (" asyncOptions.promisify must be a function" );
114- }
115- v8::Local<v8::Value> suffix = asyncOptionsObj->Get (NanNew<v8::String>(" promiseSuffix" ));
116- if (!suffix->IsString ()) {
117- return NanTypeError (" asyncOptions.promiseSuffix must be a string" );
118- }
119- NanAssignPersistent (m_asyncOptions, asyncOptionsObj);
170+ configureAsync (asyncOptions);
120171 }
121172
122173 // setup classpath
0 commit comments