Added some safety checks and a missing deVar to the code that localises terms.

This commit is contained in:
Cas Cremers 2018-10-14 22:00:16 +02:00
parent 69c0486376
commit b56c66db0b
2 changed files with 23 additions and 11 deletions

View File

@ -453,12 +453,15 @@ run_localize (const System sys, const int rid, Termlist fromlist,
Term t;
t = substlist->term;
if (t != NULL)
{
if (t->subst != NULL)
{
t->subst = termLocal (t->subst, fromlist, tolist);
sys->runs[rid].substitutions =
termlistAdd (sys->runs[rid].substitutions, t);
}
}
substlist = substlist->next;
}
}

View File

@ -629,14 +629,18 @@ termlistLength (Termlist tl)
*\sa termlistLocal()
*/
Term
termLocal (const Term t, Termlist fromlist, Termlist tolist)
termLocal (const Term tPre, Termlist fromlist, Termlist tolist)
{
if (t == NULL)
Term t;
if (tPre == NULL)
return NULL;
t = deVar(tPre);
if (realTermLeaf (t))
{
while (fromlist != NULL && tolist != NULL)
while ((fromlist != NULL) && (tolist != NULL))
{
if (isTermEqual (fromlist->term, t))
{
@ -650,17 +654,22 @@ termLocal (const Term t, Termlist fromlist, Termlist tolist)
}
else
{
Term newt = termNodeDuplicate (t);
Term newt;
newt = termNodeDuplicate (t);
if (realTermTuple (t))
{
TermOp1 (newt) = termLocal (TermOp1 (t), fromlist, tolist);
TermOp2 (newt) = termLocal (TermOp2 (t), fromlist, tolist);
}
else
{
if (realTermEncrypt (t))
{
TermOp (newt) = termLocal (TermOp (t), fromlist, tolist);
TermKey (newt) = termLocal (TermKey (t), fromlist, tolist);
}
}
return newt;
}
}