Example #1
0
  @Override
  public SStmCG caseALetBeStStm(ALetBeStStm node, IRInfo question) throws AnalysisException {
    PMultipleBind multipleBind = node.getBind();

    if (!(multipleBind instanceof ASetMultipleBind)) {
      question.addUnsupportedNode(
          node,
          "Generation of the let be st statement is only supported for a multiple set bind. Got: "
              + multipleBind);
      return null;
    }

    ASetMultipleBind multipleSetBind = (ASetMultipleBind) multipleBind;

    SMultipleBindCG multipleBindCg =
        multipleSetBind.apply(question.getMultipleBindVisitor(), question);

    if (!(multipleBindCg instanceof ASetMultipleBindCG)) {
      return null;
    }

    ASetMultipleBindCG multipleSetBindCg = (ASetMultipleBindCG) multipleBindCg;

    PExp suchThat = node.getSuchThat();
    PStm stm = node.getStatement();

    SExpCG suchThatCg =
        suchThat != null ? suchThat.apply(question.getExpVisitor(), question) : null;
    SStmCG stmCg = stm.apply(question.getStmVisitor(), question);

    ALetBeStStmCG letBeSt = new ALetBeStStmCG();

    AHeaderLetBeStCG header = question.getExpAssistant().consHeader(multipleSetBindCg, suchThatCg);

    letBeSt.setHeader(header);
    letBeSt.setStatement(stmCg);

    return letBeSt;
  }
 @Override
 public CmlProofObligationList caseASetMultipleBind(
     ASetMultipleBind node, IPOContextStack question) throws AnalysisException {
   return node.getSet().apply(this.expressionVisitor, question);
 }