make SREG YENV before calling heapgc in absmi.
This commit is contained in:
		@@ -792,7 +792,6 @@ Yap_absmi(int inp)
 | 
				
			|||||||
    noheapleft:
 | 
					    noheapleft:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
	CELL cut_b = LCL0-(CELL *)(SREG[E_CB]);
 | 
						CELL cut_b = LCL0-(CELL *)(SREG[E_CB]);
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef SHADOW_S
 | 
					#ifdef SHADOW_S
 | 
				
			||||||
	S = SREG;
 | 
						S = SREG;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -2535,6 +2534,7 @@ Yap_absmi(int inp)
 | 
				
			|||||||
      PP = PREG->u.pp.p0;
 | 
					      PP = PREG->u.pp.p0;
 | 
				
			||||||
      if (ActiveSignals & YAP_CDOVF_SIGNAL) {
 | 
					      if (ActiveSignals & YAP_CDOVF_SIGNAL) {
 | 
				
			||||||
	ASP = YREG+E_CB;
 | 
						ASP = YREG+E_CB;
 | 
				
			||||||
 | 
						SREG = YENV;
 | 
				
			||||||
	if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
						if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
				
			||||||
	  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
						  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
				
			||||||
	goto noheapleft;
 | 
						goto noheapleft;
 | 
				
			||||||
@@ -2690,6 +2690,7 @@ Yap_absmi(int inp)
 | 
				
			|||||||
      SREG = (CELL *) PREG->u.Osbpp.p;
 | 
					      SREG = (CELL *) PREG->u.Osbpp.p;
 | 
				
			||||||
      if (ActiveSignals & YAP_CDOVF_SIGNAL) {
 | 
					      if (ActiveSignals & YAP_CDOVF_SIGNAL) {
 | 
				
			||||||
	ASP = (CELL *) (((char *) YREG) + PREG->u.Osbpp.s);
 | 
						ASP = (CELL *) (((char *) YREG) + PREG->u.Osbpp.s);
 | 
				
			||||||
 | 
						SREG = YENV;
 | 
				
			||||||
	if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
						if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
				
			||||||
	  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
						  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
				
			||||||
	goto noheapleft;
 | 
						goto noheapleft;
 | 
				
			||||||
@@ -2926,6 +2927,7 @@ Yap_absmi(int inp)
 | 
				
			|||||||
	ASP = (CELL *) (((char *) YREG) + PREG->u.Osbpp.s);
 | 
						ASP = (CELL *) (((char *) YREG) + PREG->u.Osbpp.s);
 | 
				
			||||||
	if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
						if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
				
			||||||
	  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
						  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
				
			||||||
 | 
						SREG = YENV;
 | 
				
			||||||
	goto noheapleft;
 | 
						goto noheapleft;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (ActiveSignals) {
 | 
					      if (ActiveSignals) {
 | 
				
			||||||
@@ -3049,6 +3051,7 @@ Yap_absmi(int inp)
 | 
				
			|||||||
	ASP = YREG+E_CB;
 | 
						ASP = YREG+E_CB;
 | 
				
			||||||
	if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
						if (ASP > (CELL *)PROTECT_FROZEN_B(B))
 | 
				
			||||||
	  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
						  ASP = (CELL *)PROTECT_FROZEN_B(B);
 | 
				
			||||||
 | 
						SREG = YENV;
 | 
				
			||||||
	goto noheapleft;
 | 
						goto noheapleft;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (ActiveSignals)
 | 
					      if (ActiveSignals)
 | 
				
			||||||
@@ -14558,6 +14561,7 @@ Yap_absmi(int inp)
 | 
				
			|||||||
	if (ActiveSignals) {
 | 
						if (ActiveSignals) {
 | 
				
			||||||
	  if (ActiveSignals & YAP_CDOVF_SIGNAL) {
 | 
						  if (ActiveSignals & YAP_CDOVF_SIGNAL) {
 | 
				
			||||||
	    UNLOCK(SignalLock);
 | 
						    UNLOCK(SignalLock);
 | 
				
			||||||
 | 
						    SREG = YENV;
 | 
				
			||||||
	    goto noheapleft;
 | 
						    goto noheapleft;
 | 
				
			||||||
	  }
 | 
						  }
 | 
				
			||||||
	  UNLOCK(SignalLock);
 | 
						  UNLOCK(SignalLock);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user