diff --git a/src/system.c b/src/system.c index 4c3623e..985f737 100644 --- a/src/system.c +++ b/src/system.c @@ -656,6 +656,9 @@ roleInstance (const System sys, const Protocol protocol, const Role role, runs[rid].locals = tolist; runs[rid].artefacts = artefacts; + /* erase any substitutions in the role definition, as they are now copied */ + termlistSubstReset (role->variables); + /* Determine symmetric run */ runs[rid].prevSymmRun = staticRunSymmetry (sys, rid); // symmetry reduction static analysis diff --git a/src/termlist.c b/src/termlist.c index f7a5b76..bbbb360 100644 --- a/src/termlist.c +++ b/src/termlist.c @@ -774,3 +774,19 @@ termlistOrder (Termlist tl1, Termlist tl2) else return 1; } + +//! Iterate over terms in termlist +/** + * Function gets terms + */ +int +termlist_iterate (Termlist tl, int (*func) ()) +{ + while (tl != NULL) + { + if (!func (tl->term)) + return 0; + tl = tl->next; + } + return 1; +} diff --git a/src/termlist.h b/src/termlist.h index 73e2f03..a20e5c5 100644 --- a/src/termlist.h +++ b/src/termlist.h @@ -54,5 +54,6 @@ int validSubst (const int matchmode, const Term term); Term termFunction (Termlist fromlist, Termlist tolist, Term tx); Termlist termlistForward (Termlist tl); int termlistOrder (Termlist tl1, Termlist tl2); +int termlist_iterate (Termlist tl, int (*func) ()); #endif