numbervars: support negative indices

This commit is contained in:
Vítor Santos Costa 2015-10-08 13:29:47 +01:00
parent fa738894a4
commit b654c8fe00

View File

@ -4607,6 +4607,7 @@ static Int numbervars_in_complex_term(register CELL *pt0, register CELL *pt0_end
{ {
register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace(); register CELL **to_visit0, **to_visit = (CELL **)Yap_PreAllocCodeSpace();
Int numbv0 = numbv;
register tr_fr_ptr TR0 = TR; register tr_fr_ptr TR0 = TR;
CELL *InitialH = HR; CELL *InitialH = HR;
@ -4733,7 +4734,7 @@ static Int numbervars_in_complex_term(register CELL *pt0, register CELL *pt0_end
clean_tr(TR0 PASS_REGS); clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0); Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH; HR = InitialH;
return -1; return numbv-1;
aux_overflow: aux_overflow:
LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **); LOCAL_Error_Size = (to_visit-to_visit0)*sizeof(CELL **);
@ -4748,7 +4749,7 @@ static Int numbervars_in_complex_term(register CELL *pt0, register CELL *pt0_end
clean_tr(TR0 PASS_REGS); clean_tr(TR0 PASS_REGS);
Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0); Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0);
HR = InitialH; HR = InitialH;
return -1; return numbv-1;
global_overflow: global_overflow:
#ifdef RATIONAL_TREES #ifdef RATIONAL_TREES
@ -4763,7 +4764,7 @@ static Int numbervars_in_complex_term(register CELL *pt0, register CELL *pt0_end
HR = InitialH; HR = InitialH;
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK; LOCAL_Error_TYPE = RESOURCE_ERROR_STACK;
LOCAL_Error_Size = (ASP-HR)*sizeof(CELL); LOCAL_Error_Size = (ASP-HR)*sizeof(CELL);
return -1; return numbv-1;
} }
@ -4798,7 +4799,7 @@ Yap_NumberVars( Term inp, Int numbv, int handle_singles ) /* numbervariables in
RepAppl(t)+ RepAppl(t)+
ArityOfFunctor(f), numbv, handle_singles PASS_REGS); ArityOfFunctor(f), numbv, handle_singles PASS_REGS);
} }
if (out < 0) { if (out < numbv) {
if (!expand_vts( 3 PASS_REGS )) if (!expand_vts( 3 PASS_REGS ))
return FALSE; return FALSE;
goto restart; goto restart;