Package: OrdinaryQuantifierStrategy

OrdinaryQuantifierStrategy

nameinstructionbranchcomplexitylinemethod
OrdinaryQuantifierStrategy(TransAssistantIR, SExpIR, String, OrdinaryQuantifier, ILanguageIterator, ITempVarGen, IterationVarPrefixes)
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
getForLoopCond(AIdentifierVarExpIR, List, SPatternIR)
M: 0 C: 26
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
getForLoopStms(AIdentifierVarExpIR, List, SPatternIR)
M: 0 C: 15
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
getOuterBlockDecls(AIdentifierVarExpIR, List)
M: 0 C: 20
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 2
100%
M: 0 C: 1
100%

Coverage

1: /*
2: * #%~
3: * VDM Code Generator
4: * %%
5: * Copyright (C) 2008 - 2014 Overture
6: * %%
7: * This program is free software: you can redistribute it and/or modify
8: * it under the terms of the GNU General Public License as
9: * published by the Free Software Foundation, either version 3 of the
10: * License, or (at your option) any later version.
11: *
12: * This program is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: * GNU General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public
18: * License along with this program. If not, see
19: * <http://www.gnu.org/licenses/gpl-3.0.html>.
20: * #~%
21: */
22: package org.overture.codegen.trans.quantifier;
23:
24: import java.util.List;
25:
26: import org.overture.codegen.ir.ITempVarGen;
27: import org.overture.codegen.ir.SExpIR;
28: import org.overture.codegen.ir.SPatternIR;
29: import org.overture.codegen.ir.SStmIR;
30: import org.overture.codegen.ir.analysis.AnalysisException;
31: import org.overture.codegen.ir.declarations.AVarDeclIR;
32: import org.overture.codegen.ir.expressions.AIdentifierVarExpIR;
33: import org.overture.codegen.trans.IterationVarPrefixes;
34: import org.overture.codegen.trans.assistants.TransAssistantIR;
35: import org.overture.codegen.trans.iterator.ILanguageIterator;
36:
37: public class OrdinaryQuantifierStrategy extends QuantifierBaseStrategy
38: {
39:         protected OrdinaryQuantifier quantifier;
40:
41:         public OrdinaryQuantifierStrategy(TransAssistantIR transformationAssistant,
42:                         SExpIR predicate, String resultVarName,
43:                         OrdinaryQuantifier quantifier, ILanguageIterator langIterator,
44:                         ITempVarGen tempGen, IterationVarPrefixes iteVarPrefixes)
45:         {
46:                 super(transformationAssistant, predicate, resultVarName, langIterator, tempGen, iteVarPrefixes);
47:                 this.quantifier = quantifier;
48:         }
49:
50:         @Override
51:         public List<AVarDeclIR> getOuterBlockDecls(AIdentifierVarExpIR setVar,
52:                         List<SPatternIR> patterns) throws AnalysisException
53:         {
54:•                return firstBind
55:                                 ? packDecl(transAssist.consBoolVarDecl(resultVarName, quantifier == OrdinaryQuantifier.FORALL))
56:                                 : null;
57:         }
58:
59:         @Override
60:         public SExpIR getForLoopCond(AIdentifierVarExpIR setVar,
61:                         List<SPatternIR> patterns, SPatternIR pattern)
62:                         throws AnalysisException
63:         {
64:                 SExpIR left = langIterator.getForLoopCond(setVar, patterns, pattern);
65:•                SExpIR right = transAssist.consBoolCheck(resultVarName, quantifier == OrdinaryQuantifier.EXISTS);
66:
67:                 return transAssist.consAndExp(left, right);
68:         }
69:
70:         @Override
71:         public List<SStmIR> getForLoopStms(AIdentifierVarExpIR setVar,
72:                         List<SPatternIR> patterns, SPatternIR pattern)
73:         {
74:•                return lastBind
75:                                 ? packStm(transAssist.consBoolVarAssignment(predicate, resultVarName))
76:                                 : null;
77:         }
78: }