Skip to content

CIF to Supremica transformation does not correctly transform multiple guards on an edge

This CIF edge:

    edge e when p1.c = 1, not b do b := true;

Leads to the following Supremica XML code:

...
            <GuardActionBlock>
              <Guards>
                <BinaryExpression Operator="==">
                  <SimpleIdentifier Name="p1:c"/>
                  <IntConstant Value="1"/>
                </BinaryExpression>
                <UnaryExpression Operator="!">
                  <SimpleIdentifier Name="p2:b"/>
                </UnaryExpression>
              </Guards>
              <Actions>
                <BinaryExpression Operator="=">
                  <SimpleIdentifier Name="p2:b"/>
                  <IntConstant Value="1"/>
                </BinaryExpression>
              </Actions>
            </GuardActionBlock>
...

The Guards has multiple predicates. However, Supremica only shows one of them:

image

And editing the edge shows that only the first guard is actually present:

image

It seems multiple guards are actually not supported. We should wrap a conjunction around it.

Edited by Dennis Hendriks