]> Repositorios git - scryer-prolog.git/commit
FIXED: Queue triggered propagators to be processed after pexp/3 finishes
authorMarkus Triska <[email protected]>
Mon, 9 Oct 2023 18:42:28 +0000 (20:42 +0200)
committerMarkus Triska <[email protected]>
Mon, 9 Oct 2023 18:42:28 +0000 (20:42 +0200)
commitcacc7f31930739f1b97be34bdbe12b54481e11cc
tree965a11bcab15a78655dc1f462af10b3b580743f6
parent4b9cf0952edcb8f0b29f245b6462b762bb1714df
FIXED: Queue triggered propagators to be processed after pexp/3 finishes

If reification constraints (such as reified equality) are triggered
here, then they may wish to disable this propagator and remove
attributes from auxiliary variables. If the pexp/3 propagation is
interrupted for that purpose, then the attributes will be
unintentionally reattached by the following fd_put/3 calls in this
propagator. We must ensure that this propagator completely finishes,
so we queue the triggered propagators for later processing.

geq/2 implements propagator activation outside the queue, and thus
should not be used in propagators in the way it was used here.

pexp/3 by itself may not seem particularly important. However, it can
arise by metamorphosis from Var*Var. Example:

    ?- A#<==> -1#=C*C, C in 0..1.
       A = 0, clpz:(C in 0..1).

This addresses #2089.
src/lib/clpz.pl