This commit is contained in:
Vitor Santos Costa 2019-01-26 12:44:43 +00:00
parent 650653cc64
commit b395177faa

View File

@ -69,7 +69,8 @@ typedef struct non_single_struct_t {
ap2 = RepAppl(d0); \ ap2 = RepAppl(d0); \
f = (Functor)(*ap2); \ f = (Functor)(*ap2); \
\ \
if (IsExtensionFunctor(f)) { \ if (IsExtensionFunctor(f) || \
IsAtomTerm((CELL)f)) { \
\ \
continue; \ continue; \
} \ } \
@ -1746,12 +1747,14 @@ static Term vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Ter
register CELL d0; register CELL d0;
register CELL *ptd0; register CELL *ptd0;
restart: restart:
++ pt0; ++ pt0;
ptd0 = pt0; ptd0 = pt0;
d0 = *ptd0; d0 = *ptd0;
list_loop: list_loop:
deref_head(d0, vars_in_term_unk); deref_head(d0, vars_in_term_unk);
vars_in_term_nvar: vars_in_term_nvar:
WALK_COMPLEX_TERM(); WALK_COMPLEX_TERM();
continue ; continue ;
@ -1785,6 +1788,7 @@ static Term vars_in_complex_term(register CELL *pt0, register CELL *pt0_end, Ter
goto loop; goto loop;
} }
clean_tr(TR0 PASS_REGS); clean_tr(TR0 PASS_REGS);
pop_text_stack(lvl); pop_text_stack(lvl);
@ -1876,8 +1880,8 @@ p_variables_in_term( USES_REGS1 ) /* variables in term t */
} else if (IsPrimitiveTerm(t)) } else if (IsPrimitiveTerm(t))
out = ARG2; out = ARG2;
else if (IsPairTerm(t)) { else if (IsPairTerm(t)) {
out = vars_in_complex_term(RepPair(t)-1, out = vars_in_complex_term(&t-1,
RepPair(t)+1, ARG2 PASS_REGS); &(t), ARG2 PASS_REGS);
} }
else { else {
Functor f = FunctorOfTerm(t); Functor f = FunctorOfTerm(t);
@ -1907,24 +1911,9 @@ p_term_variables( USES_REGS1 ) /* variables in term t */
do { do {
Term t = Deref(ARG1); Term t = Deref(ARG1);
if (IsVarTerm(t)) {
Term out = Yap_MkNewPairTerm(); out = vars_in_complex_term(&(t)-1,
return &(t), TermNil PASS_REGS);
Yap_unify(t,HeadOfTerm(out)) &&
Yap_unify(TermNil, TailOfTerm(out)) &&
Yap_unify(out, ARG2);
} else if (IsPrimitiveTerm(t)) {
return Yap_unify(TermNil, ARG2);
} else if (IsPairTerm(t)) {
out = vars_in_complex_term(RepPair(t)-1,
RepPair(t)+1, TermNil PASS_REGS);
}
else {
Functor f = FunctorOfTerm(t);
out = vars_in_complex_term(RepAppl(t),
RepAppl(t)+
ArityOfFunctor(f), TermNil PASS_REGS);
}
if (out == 0L) { if (out == 0L) {
if (!expand_vts( 3 PASS_REGS )) if (!expand_vts( 3 PASS_REGS ))
return FALSE; return FALSE;
@ -2023,8 +2012,8 @@ static Term attvars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
to_visit->ptd0 = ptd0; to_visit->ptd0 = ptd0;
to_visit ++; to_visit ++;
*ptd0 = TermNil; *ptd0 = TermNil;
pt0 = ptd0;
pt0_end = &RepAttVar(ptd0)->Atts; pt0_end = &RepAttVar(ptd0)->Atts;
pt0 = pt0_end-1;
} }
} }
/* Do we still have compound terms to visit */ /* Do we still have compound terms to visit */
@ -2067,24 +2056,11 @@ p_term_attvars( USES_REGS1 ) /* variables in term t */
do { do {
Term t = Deref(ARG1); Term t = Deref(ARG1);
if (IsVarTerm(t)) { if (IsPrimitiveTerm(t)) {
out = attvars_in_complex_term(VarOfTerm(t)-1,
VarOfTerm(t), TermNil PASS_REGS);
} else if (IsPrimitiveTerm(t)) {
return Yap_unify(TermNil, ARG2); return Yap_unify(TermNil, ARG2);
} else if (IsPairTerm(t)) { } else {
out = attvars_in_complex_term(RepPair(t)-1, out = attvars_in_complex_term(&(t)-1,
RepPair(t)+1, TermNil PASS_REGS); &(t), TermNil PASS_REGS);
}
else {
Functor f = FunctorOfTerm(t);
if (IsExtensionFunctor(f))
return Yap_unify(TermNil, ARG2);
RepAppl(t)[0] = TermNil;
out = attvars_in_complex_term(RepAppl(t),
RepAppl(t)+
ArityOfFunctor(f), TermNil PASS_REGS);
RepAppl(t)[0] = (CELL)f;
} }
if (out == 0L) { if (out == 0L) {
if (!expand_vts( 3 PASS_REGS )) if (!expand_vts( 3 PASS_REGS ))