numbervars: support negative indices
This commit is contained in:
parent
fa738894a4
commit
b654c8fe00
@ -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;
|
||||||
|
Reference in New Issue
Block a user