Removed another simple trampoline.
This commit is contained in:
parent
d9e17005ae
commit
1c81b04aa2
@ -49,68 +49,69 @@ extern int max_encryption_level;
|
||||
int
|
||||
correctLocalOrder (const System sys)
|
||||
{
|
||||
int flag;
|
||||
int r1;
|
||||
|
||||
int checkRun (int r1)
|
||||
int checkTerm (Term t)
|
||||
{
|
||||
int checkTerm (Term t)
|
||||
{
|
||||
if (!isTermVariable (t))
|
||||
{
|
||||
int r2;
|
||||
int e1, e2;
|
||||
if (!isTermVariable (t))
|
||||
{
|
||||
int r2;
|
||||
int e1, e2;
|
||||
|
||||
// t is a term from r2 that occurs in r1
|
||||
r2 = TermRunid (t);
|
||||
e1 = firstOccurrence (sys, r1, t, ANYEVENT);
|
||||
if (e1 >= 0)
|
||||
{
|
||||
if (roledef_shift (sys->runs[r1].start, e1)->type == RECV)
|
||||
{
|
||||
e2 = firstOccurrence (sys, r2, t, SEND);
|
||||
if (e2 >= 0)
|
||||
{
|
||||
// thus, it should not be the case that e1 occurs before e2
|
||||
if (isDependEvent (r1, e1, r2, e2))
|
||||
{
|
||||
// That's not good!
|
||||
if (switches.output == PROOF)
|
||||
{
|
||||
indentPrint ();
|
||||
eprintf ("Pruned because ordering for term ");
|
||||
termSubstPrint (t);
|
||||
eprintf
|
||||
(" cannot be correct: the first send r%ii%i occurs after the receive r%ii%i.\n",
|
||||
r2, e2, r1, e1);
|
||||
}
|
||||
flag = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalError++;
|
||||
eprintf ("error: term ");
|
||||
termSubstPrint (t);
|
||||
eprintf
|
||||
(" from run %i should occur in run %i, but it doesn't.\n", r2,
|
||||
r1);
|
||||
globalError--;
|
||||
error ("Abort");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return iterateLocalToOther (sys, r1, checkTerm);
|
||||
// t is a term from r2 that occurs in r1
|
||||
r2 = TermRunid (t);
|
||||
e1 = firstOccurrence (sys, r1, t, ANYEVENT);
|
||||
if (e1 >= 0)
|
||||
{
|
||||
if (roledef_shift (sys->runs[r1].start, e1)->type == RECV)
|
||||
{
|
||||
e2 = firstOccurrence (sys, r2, t, SEND);
|
||||
if (e2 >= 0)
|
||||
{
|
||||
// thus, it should not be the case that e1 occurs before e2
|
||||
if (isDependEvent (r1, e1, r2, e2))
|
||||
{
|
||||
// That's not good!
|
||||
if (switches.output == PROOF)
|
||||
{
|
||||
indentPrint ();
|
||||
eprintf ("Pruned because ordering for term ");
|
||||
termSubstPrint (t);
|
||||
eprintf
|
||||
(" cannot be correct: the first send r%ii%i occurs after the receive r%ii%i.\n",
|
||||
r2, e2, r1, e1);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalError++;
|
||||
eprintf ("error: term ");
|
||||
termSubstPrint (t);
|
||||
eprintf
|
||||
(" from run %i should occur in run %i, but it doesn't.\n", r2,
|
||||
r1);
|
||||
globalError--;
|
||||
error ("Abort");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
flag = true;
|
||||
iterateRegularRuns (sys, checkRun);
|
||||
|
||||
return flag;
|
||||
for (r1 = 0; r1 < sys->maxruns; r1++)
|
||||
{
|
||||
if (sys->runs[r1].protocol != INTRUDER)
|
||||
{
|
||||
if (!iterateLocalToOther (sys, r1, checkTerm))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//! Check all runs
|
||||
|
Loading…
Reference in New Issue
Block a user