Prechádzať zdrojové kódy

Move the call to CallDelayedReleaseHooks from after _OP_CALL:OT_CLOSURE to after _OP_CALL.

mingodad 13 rokov pred
rodič
commit
5f1bd95240
1 zmenil súbory, kde vykonal 4 pridanie a 3 odobranie
  1. 4 3
      squirrel/sqvm.cpp

+ 4 - 3
squirrel/sqvm.cpp

@@ -699,7 +699,9 @@ exception_restore:
 	//
 	//
 	{
 	{
 		for(;;)
 		for(;;)
-		{
+		{
+		    //if the last instruction was a call then check for release hooks
+		    if(ci->_ip->op == _OP_CALL) _sharedstate->CallDelayedReleaseHooks(this);
 			const SQInstruction &_i_ = *ci->_ip++;
 			const SQInstruction &_i_ = *ci->_ip++;
 			//dumpstack(_stackbase);
 			//dumpstack(_stackbase);
 			//scprintf("\n[%d] %s %d %d %d %d\n",ci->_ip-ci->_iv->_vals,g_InstrDesc[_i_.op].name,arg0,arg1,arg2,arg3);
 			//scprintf("\n[%d] %s %d %d %d %d\n",ci->_ip-ci->_iv->_vals,g_InstrDesc[_i_.op].name,arg0,arg1,arg2,arg3);
@@ -730,8 +732,7 @@ exception_restore:
 					SQObjectPtr clo = STK(arg1);
 					SQObjectPtr clo = STK(arg1);
 					switch (type(clo)) {
 					switch (type(clo)) {
 					case OT_CLOSURE:
 					case OT_CLOSURE:
-						_GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false));
-						_sharedstate->CallDelayedReleaseHooks(this);
+						_GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false));
 						continue;
 						continue;
 					case OT_NATIVECLOSURE: {
 					case OT_NATIVECLOSURE: {
 						bool suspend;
 						bool suspend;