@@ -45,61 +45,59 @@ MyLuaState::~MyLuaState() {
4545 lua_close (_L);
4646}
4747
48- void MyLuaState::normalCallBack (Napi::Function& cb ,MyLuaWorker* worker){
49- if (!cb ){
48+ void MyLuaState::normalCallBack (Napi::Function& _cb ,MyLuaWorker* worker){
49+ if (!_cb ){
5050 return ;
5151 }
52- Napi::HandleScope scope (cb.Env ());
52+ auto env = worker->Callback ().Env ();
53+ // Napi::HandleScope scope(env);
5354 auto ret = worker->getUserData ();
5455 Napi::Value err;
5556 Napi::Value arg2;
5657 if (ret.hasErr ){
57- err = Napi::String::New (cb. Env () ,ret.buff );
58- arg2 = cb. Env () .Undefined ();
58+ err = Napi::String::New (env ,ret.buff );
59+ arg2 = env .Undefined ();
5960 }else {
60- err = cb. Env () .Null ();
61- arg2 = Napi::String::New (cb. Env () ,ret.buff );
61+ err = env .Null ();
62+ arg2 = Napi::String::New (env ,ret.buff );
6263 }
63-
64- cb.Call (cb.Env ().Global (),{err,arg2});
64+ worker->Callback ().Call ({err,arg2});
6565}
6666
6767
6868// worker->userParam = obj; 要设置成 MyLuaState 实例
69- void MyLuaState::normalGetRetCallBack (Napi::Function& cb ,MyLuaWorker* worker){
70- if (!cb ){
69+ void MyLuaState::normalGetRetCallBack (Napi::Function& ccx ,MyLuaWorker* worker){
70+ if (!ccx ){
7171 return ;
7272 }
73- Napi::HandleScope scope (cb.Env ());
73+ auto env = worker->Callback ().Env ();
74+ // Napi::HandleScope scope(env);
7475 auto ret = worker->getUserData ();
7576 Napi::Value err;
7677 if (ret.hasErr ){
7778 Napi::Value arg2;
78- err = Napi::String::New (cb. Env () ,ret.buff );
79- arg2 = cb. Env () .Undefined ();
80- cb. Call (cb. Env (). Global (), {err,arg2});
79+ err = Napi::String::New (env ,ret.buff );
80+ arg2 = env .Undefined ();
81+ worker-> Callback (). Call ( {err,arg2});
8182 }else {
8283 MyLuaState* obj = (MyLuaState*)worker->userParam ;
83- err = cb. Env () .Null ();
84+ err = env .Null ();
8485 auto L = obj->getLuaState ();
8586 int len = lua_gettop (L) - worker->getUserData ().customVal ;
8687 if (len){
8788 // lua_to_value
88- Napi::Value *argv = new Napi::Value [len+1 ];
89- argv[0 ] = cb. Env () .Null ();
89+ napi_value *argv = new napi_value [len+1 ];
90+ argv[0 ] = env .Null ();
9091 int i = 1 ;
9192 while (i<=len) {
92- argv[i] = lua_to_value (L, i);
93+ argv[i] = lua_to_value (env, L, i);
9394 i++;
9495 }
9596 lua_settop (L, worker->getUserData ().customVal );
96- cb .Call (cb. Env () .Null (), size_t (len+1 ), (napi_value*)argv);
97+ worker-> Callback () .Call (env .Null (), size_t (len+1 ), (napi_value*)argv);
9798 delete [] argv;
9899 }else {
99- Napi::Value argv[] = {
100- err,Napi::String::New (cb.Env (),ret.buff )
101- };
102- cb.Call (size_t (2 ), (napi_value*)argv);
100+ worker->Callback ().Call ({err,Napi::String::New (env,ret.buff )});
103101 }
104102 }
105103
@@ -109,7 +107,7 @@ void MyLuaState::normalGetRetCallBack(Napi::Function& cb,MyLuaWorker* worker){
109107
110108// exports.MyLuaState = class { constructor(id){},doFile,doString,status,callGlobalFunction, static New}
111109Napi::Object MyLuaState::Init (Napi::Env env,Napi::Object exports) {
112- Napi::HandleScope scope (env);
110+ // Napi::HandleScope scope(env);
113111
114112 Napi::Function func = DefineClass (env, " MyLuaState" , {
115113 InstanceMethod<&MyLuaState::DoFile>(" doFile" ),
@@ -186,19 +184,15 @@ Napi::Value MyLuaState::DoFile(const Napi::CallbackInfo& info){
186184 worker->setUserData (true ,lua_tostring (L, -1 ));
187185 lua_pop (L, 1 );
188186 }else {
189- const char * buff = nullptr ;
190- if (lua_gettop (L) - worker->getUserData ().customVal ){
191- buff = lua_tostring (L, -1 );
192- lua_pop (L,1 );
193- }
194- worker->setUserData (false ,buff);
187+ worker->setUserData (false ," " );
195188 }
196189 // printf("do file end:%s\n",(char*)nfn);
197190 // 要释放 fn
198191 delete [] nfn;
199192 },[=](Napi::Function& cb,MyLuaWorker* worker){
200- this ->normalCallBack (cb, worker);
193+ this ->normalGetRetCallBack (cb, worker);
201194 });
195+ worker->userParam = this ;
202196 // printf("worker out:%p\n",nfn);
203197 int nowqueue = this ->workerQueue .addQueue (worker);
204198 return Napi::Number::New (env, nowqueue);
@@ -228,15 +222,16 @@ Napi::Value MyLuaState::DoString(const Napi::CallbackInfo& info){
228222 char * nfn = new char [filename.length ()+1 ];
229223 // printf(" fnfnfnfnfn :%s\n",fn);
230224 strcpy (nfn,fn);
231- // printf(" fnfnfnfnfn1111 :%s\n",nfn);
225+ // printf(" fnfnfnfnfn1111 :%s\n",nfn);
232226 Napi::Function callback;
233227 if (info.Length ()>1 ){
234228 callback = info[1 ].As <Napi::Function>();
235229 }
236230
237231 MyLuaWorker* worker = new MyLuaWorker (callback,[=](MyLuaWorker* worker){
232+ // printf("DoString worker int:%p\n",nfn);
238233 auto L = this ->getLuaState ();
239- // printf("worker int:%p\n",nfn);
234+ //
240235 // printf("begin do file :%s\n",nfn);
241236 int top = lua_gettop (L);
242237 worker->getUserData ().customVal = top;
@@ -249,10 +244,11 @@ Napi::Value MyLuaState::DoString(const Napi::CallbackInfo& info){
249244 }else {
250245 worker->setUserData (false ," " );
251246 }
252- // printf("do file end:%s\n",(char*)nfn);
253- // 要释放 fn
247+ // printf("DoString end:%s\n",(char*)nfn);
248+ // 要释放 fn
254249 delete [] nfn;
255250 },[=](Napi::Function& cb,MyLuaWorker* worker){
251+ // printf("DoString callback\n");
256252 this ->normalGetRetCallBack (cb, worker);
257253 });
258254 worker->userParam = this ;
@@ -279,12 +275,10 @@ Napi::Value MyLuaState::Status(const Napi::CallbackInfo& info){
279275 int status = lua_status (L);
280276 worker->userParam = reinterpret_cast <void *>(status);
281277 worker->setUserData (false ," " );
282- },[=](Napi::Function& cb,MyLuaWorker* worker){
278+ },[=](Napi::Function& __cb,MyLuaWorker* worker){
279+ auto env = worker->Callback ().Env ();
283280 long status = reinterpret_cast <long >(worker->userParam );
284- Napi::Value argv[] = {
285- env.Null (),Napi::Number::New (env, status)
286- };
287- cb.Call (env.Global (),size_t (2 ),(napi_value*)argv);
281+ worker->Callback ().Call ({env.Null (),Napi::Number::New (env, status)});
288282 });
289283 int nowqueue = this ->workerQueue .addQueue (worker);
290284 return Napi::Number::New (env, nowqueue);
0 commit comments