multiple assignment variables should always be globalised.
This commit is contained in:
parent
e201d11e81
commit
18eca09bd0
16
C/mavar.c
16
C/mavar.c
@ -121,8 +121,15 @@ p_setarg(void)
|
|||||||
static Term
|
static Term
|
||||||
NewTimedVar(CELL val)
|
NewTimedVar(CELL val)
|
||||||
{
|
{
|
||||||
Term out = AbsAppl(H);
|
Term out;
|
||||||
timed_var *tv;
|
timed_var *tv;
|
||||||
|
if (IsVarTerm((val = Deref(val))) &&
|
||||||
|
VarOfTerm(val) > H) {
|
||||||
|
Term nval = MkVarTerm();
|
||||||
|
Bind_Local(VarOfTerm(val), nval);
|
||||||
|
val = nval;
|
||||||
|
}
|
||||||
|
out = AbsAppl(H);
|
||||||
*H++ = (CELL)FunctorMutable;
|
*H++ = (CELL)FunctorMutable;
|
||||||
tv = (timed_var *)H;
|
tv = (timed_var *)H;
|
||||||
RESET_VARIABLE(&(tv->clock));
|
RESET_VARIABLE(&(tv->clock));
|
||||||
@ -171,7 +178,12 @@ UpdateTimedVar(Term inv, Term new)
|
|||||||
timed_var *tv = (timed_var *)(RepAppl(inv)+1);
|
timed_var *tv = (timed_var *)(RepAppl(inv)+1);
|
||||||
CELL t = tv->value;
|
CELL t = tv->value;
|
||||||
CELL* timestmp = (CELL *)(tv->clock);
|
CELL* timestmp = (CELL *)(tv->clock);
|
||||||
|
if (IsVarTerm((new = Deref(new))) &&
|
||||||
|
VarOfTerm(new) > H) {
|
||||||
|
Term nnew = MkVarTerm();
|
||||||
|
Bind_Local(VarOfTerm(new), nnew);
|
||||||
|
new = nnew;
|
||||||
|
}
|
||||||
if (timestmp > B->cp_h
|
if (timestmp > B->cp_h
|
||||||
#if FROZEN_STACKS
|
#if FROZEN_STACKS
|
||||||
&& timestmp > H_FZ
|
&& timestmp > H_FZ
|
||||||
|
Reference in New Issue
Block a user