diff --git a/prism/src/parser/EvaluateContextConstants.java b/prism/src/parser/EvaluateContextConstants.java new file mode 100644 index 00000000..c34dc352 --- /dev/null +++ b/prism/src/parser/EvaluateContextConstants.java @@ -0,0 +1,59 @@ +//============================================================================== +// +// Copyright (c) 2018- +// Authors: +// * Dave Parker (University of Birmingham) +// +//------------------------------------------------------------------------------ +// +// This file is part of PRISM. +// +// PRISM is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// PRISM is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with PRISM; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +//============================================================================== + +package parser; + +/** + * Information required to evaluate an expression, where no variable value info is available. + * Constant values (if needed/present) are stored in a Values object. + */ +public class EvaluateContextConstants implements EvaluateContext +{ + private Values constantValues; + + public EvaluateContextConstants(Values constantValues) + { + this.constantValues = constantValues; + } + + @Override + public Object getConstantValue(String name) + { + if (constantValues == null) + return null; + int i = constantValues.getIndexOf(name); + if (i == -1) + return null; + return constantValues.getValue(i); + } + + @Override + public Object getVarValue(String name, int index) + { + // No variable info available + return null; + } +} diff --git a/prism/src/parser/ast/ASTElement.java b/prism/src/parser/ast/ASTElement.java index 17eeb3ff..525869d7 100644 --- a/prism/src/parser/ast/ASTElement.java +++ b/prism/src/parser/ast/ASTElement.java @@ -304,7 +304,7 @@ public abstract class ASTElement */ public ASTElement replaceConstants(Values constantValues) throws PrismLangException { - return evaluatePartially(new EvaluateContextValues(constantValues, null)); + return evaluatePartially(new EvaluateContextConstants(constantValues)); } /** diff --git a/prism/src/parser/ast/Expression.java b/prism/src/parser/ast/Expression.java index af13b03c..576d6dff 100644 --- a/prism/src/parser/ast/Expression.java +++ b/prism/src/parser/ast/Expression.java @@ -176,7 +176,7 @@ public abstract class Expression extends ASTElement */ public Object evaluate() throws PrismLangException { - return evaluate(new EvaluateContextValues(null, null)); + return evaluate(new EvaluateContextConstants(null)); } /** @@ -186,7 +186,7 @@ public abstract class Expression extends ASTElement */ public Object evaluate(Values constantValues) throws PrismLangException { - return evaluate(new EvaluateContextValues(constantValues, null)); + return evaluate(new EvaluateContextConstants(constantValues)); } /** @@ -268,7 +268,7 @@ public abstract class Expression extends ASTElement */ public int evaluateInt() throws PrismLangException { - return evaluateInt(new EvaluateContextValues(null, null)); + return evaluateInt(new EvaluateContextConstants(null)); } /** @@ -279,7 +279,7 @@ public abstract class Expression extends ASTElement */ public int evaluateInt(Values constantValues) throws PrismLangException { - return evaluateInt(new EvaluateContextValues(constantValues, null)); + return evaluateInt(new EvaluateContextConstants(constantValues)); } /** @@ -372,7 +372,7 @@ public abstract class Expression extends ASTElement */ public double evaluateDouble() throws PrismLangException { - return evaluateDouble(new EvaluateContextValues(null, null)); + return evaluateDouble(new EvaluateContextConstants(null)); } /** @@ -383,7 +383,7 @@ public abstract class Expression extends ASTElement */ public double evaluateDouble(Values constantValues) throws PrismLangException { - return evaluateDouble(new EvaluateContextValues(constantValues, null)); + return evaluateDouble(new EvaluateContextConstants(constantValues)); } /** @@ -467,7 +467,7 @@ public abstract class Expression extends ASTElement */ public boolean evaluateBoolean() throws PrismLangException { - return evaluateBoolean(new EvaluateContextValues(null, null)); + return evaluateBoolean(new EvaluateContextConstants(null)); } /** @@ -478,7 +478,7 @@ public abstract class Expression extends ASTElement */ public boolean evaluateBoolean(Values constantValues) throws PrismLangException { - return evaluateBoolean(new EvaluateContextValues(constantValues, null)); + return evaluateBoolean(new EvaluateContextConstants(constantValues)); } /** @@ -550,7 +550,7 @@ public abstract class Expression extends ASTElement */ public BigRational evaluateExact() throws PrismLangException { - return evaluateExact(new EvaluateContextValues(null, null)); + return evaluateExact(new EvaluateContextConstants(null)); } /** @@ -561,7 +561,7 @@ public abstract class Expression extends ASTElement */ public BigRational evaluateExact(Values constantValues) throws PrismLangException { - return evaluateExact(new EvaluateContextValues(constantValues, null)); + return evaluateExact(new EvaluateContextConstants(constantValues)); } /**