Ignore:
Timestamp:
Oct 22, 2019 11:31:16 AM (7 weeks ago)
Author:
randersson
Message:

#5819 Merged trunk into branch

Location:
branches/dev-5819
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-5819

  • branches/dev-5819/Compiler/ModelicaFlatTree/src/jastadd/ConstantEvaluation/ConstantEvaluation.jrag

    r13651 r13800  
    8080         * Copy this constant value.
    8181         */
     82        @Override
    8283        public CValue clone() {
    8384            try {
     
    117118         */
    118119        public CValue convertInteger() {
    119             return new CValueInteger(intValue());
     120            return CValueInteger.valueOf(intValue());
    120121        }
    121122
     
    124125         */
    125126        public CValue convertReal() {
    126             return new CValueReal(realValue());
     127            return CValueReal.valueOf(realValue());
    127128        }
    128129
     
    131132         */
    132133        public CValue convertBoolean() {
    133             return new CValueBoolean(booleanValue());
     134            return CValueBoolean.valueOf(booleanValue());
    134135        }
    135136
     
    299300     */
    300301    public class CValueInteger extends CValue {
    301         private int value;
    302        
    303         /**
    304          * Constructor.
    305          *
    306          * @param i Integer value.
    307          */
    308         public CValueInteger(int i) {
     302        private final int value;
     303       
     304        private CValueInteger(int i) {
    309305            this.value = i;
     306        }
     307       
     308        private static final CValueInteger ZERO = new CValueInteger(0);
     309       
     310        public static CValueInteger valueOf(int i) {
     311            if (i == 0) {
     312                return ZERO;
     313            }
     314            return new CValueInteger(i);
    310315        }
    311316
     
    420425            return true;
    421426        }
     427       
     428        @Override
     429        public CValueInteger clone() {
     430            return this;
     431        }       
    422432    }
    423433   
     
    426436     */     
    427437    public class CValueReal extends CValue {
    428         private double value;
     438        private final double value;
    429439       
    430440        /**
     
    433443         * @param d Double value.
    434444         */
    435         public CValueReal(double d) {
     445        private CValueReal(double d) {
    436446            this.value = d;
     447        }
     448       
     449        private static final CValueReal ZERO = new CValueReal(0.0);
     450       
     451        public static CValueReal valueOf(double d) {
     452            if (d == 0.0 && (Double.doubleToLongBits(d) & 0x8000000000000000L) == 0L) {
     453                return ZERO;
     454            }
     455            return new CValueReal(d);
    437456        }
    438457
     
    548567            return true;
    549568        }
     569       
     570        @Override
     571        public CValueReal clone() {
     572            return this;
     573        }       
     574       
    550575    }
    551576   
     
    560585        public static final CValueBoolean TRUE  = new CValueBoolean(true);
    561586       
    562         private boolean value;
     587        private final boolean value;
    563588
    564589        /**
     
    567592         * @param b Boolean value.
    568593         */
    569         public CValueBoolean(boolean b) {
    570             this.value = b;
     594        private CValueBoolean(boolean b) {
     595            this.value = b;
     596        }
     597       
     598        public static CValueBoolean valueOf(boolean b) {
     599            return b ? TRUE : FALSE;
    571600        }
    572601
     
    650679            return true;
    651680        }
     681       
     682        @Override
     683        public CValueBoolean clone() {
     684            return this;
     685        }
    652686    }
    653687
     
    656690     */
    657691    public class CValueString extends CValue {
    658         private String value;
     692        private final String value;
    659693       
    660694        /**
     
    716750            return true;
    717751        }
     752       
     753        @Override
     754        public CValueString clone() {
     755            return this;
     756        }       
     757       
    718758      }
    719759   
     
    16141654    public class CValueEnum extends CValue {
    16151655
    1616         private FEnumType type;
    1617         private String value;
    1618         private int index;
     1656        private final FEnumType type;
     1657        private final String value;
     1658        private final int index;
    16191659
    16201660        /**
     
    16271667            this.type = (FEnumType) type;
    16281668            this.value = value;
    1629             index = 0;
     1669            int temp_index = 0;
    16301670            int n = this.type.getNumFEnumLiteralType();
    1631             for (int i = 0; i < n && index == 0; i++)
    1632                 if (this.type.getFEnumLiteralType(i).getName().equals(value))
    1633                     index = i + 1;
     1671            for (int i = 0; i < n && temp_index == 0; i++) {
     1672                if (this.type.getFEnumLiteralType(i).getName().equals(value)) {
     1673                    temp_index = i + 1;
     1674                }
     1675            }
     1676            index = temp_index;
    16341677        }
    16351678
     
    17051748         *  @return an CommonAccessExp pointing to the literal in the FEnumDecl.
    17061749         */
     1750        @Override
    17071751        public FExp buildLiteral() {
    17081752            return type.createLiteral(index);
     
    17191763        }
    17201764
     1765        @Override
    17211766        public CValue constrainWithin(CValue min, CValue max) {
    17221767            if (!min.isUnknown() && min.intValue() > index)
     
    17261771            return this;
    17271772        }
     1773       
     1774       @Override
     1775       public CValueEnum clone() {
     1776           return this;
     1777       }
    17281778
    17291779    }
     
    17461796    public CValue FType.zeroCValueScalar()        { return CValue.UNKNOWN; }
    17471797    public CValue FArrayType.zeroCValueScalar()   { return getFPrimitiveType().zeroCValueScalar(); }
    1748     public CValue FRealType.zeroCValueScalar()    { return new CValueReal(0.0); }
    1749     public CValue FIntegerType.zeroCValueScalar() { return new CValueInteger(0); }
     1798    public CValue FRealType.zeroCValueScalar()    { return CValueReal.valueOf(0.0); }
     1799    public CValue FIntegerType.zeroCValueScalar() { return CValueInteger.valueOf(0); }
    17501800    public CValue FEnumType.zeroCValueScalar()    { return new CValueEnum(this, 1); }
    17511801    public CValue FStringType.zeroCValueScalar()  { return new CValueString(""); }
    1752     public CValue FBooleanType.zeroCValueScalar() { return new CValueBoolean(false); }
     1802    public CValue FBooleanType.zeroCValueScalar() { return CValueBoolean.FALSE; }
    17531803   
    17541804    public CValue FType.createCValue(int v) {
     
    17631813    }
    17641814   
    1765     public CValue FType.createCValueScalar(int v)     { return new CValueInteger(v); }
    1766     public CValue FRealType.createCValueScalar(int v) { return new CValueReal(v); }
     1815    public CValue FType.createCValueScalar(int v)     { return CValueInteger.valueOf(v); }
     1816    public CValue FRealType.createCValueScalar(int v) { return CValueReal.valueOf(v); }
    17671817
    17681818    public CValue FType.convert(CValue v)        { return v; }
     
    17731823
    17741824    public CValue FType.limitCValueScalar(boolean high)        { return CValue.UNSUPPORTED; }
    1775     public CValue FRealType.limitCValueScalar(boolean high)    { return new CValueReal(      high ? Double.MAX_VALUE  : -Double.MAX_VALUE); }
    1776     public CValue FIntegerType.limitCValueScalar(boolean high) { return new CValueInteger(   high ? Integer.MAX_VALUE : Integer.MIN_VALUE); }
    1777     public CValue FBooleanType.limitCValueScalar(boolean high) { return new CValueBoolean(   high ? true : false); }
     1825    public CValue FRealType.limitCValueScalar(boolean high)    { return CValueReal.valueOf(      high ? Double.MAX_VALUE  : -Double.MAX_VALUE); }
     1826    public CValue FIntegerType.limitCValueScalar(boolean high) { return CValueInteger.valueOf(   high ? Integer.MAX_VALUE : Integer.MIN_VALUE); }
     1827    public CValue FBooleanType.limitCValueScalar(boolean high) { return CValueBoolean.valueOf(high); }
    17781828    public CValue FEnumType.limitCValueScalar(boolean high)    { return new CValueEnum(this, high ? getNumFEnumLiteralType() : 1); }
    17791829
     
    23872437       
    23882438        FType t = type();
    2389         CValue sum = new CValueInteger(0);
     2439        CValue sum = CValueInteger.valueOf(0);
    23902440        CValueArray l = getLeft().ceval(evaluator).array();
    23912441        CValueArray r = getRight().ceval(evaluator).array();
     
    24812531   
    24822532    eq FEndExp.cevalCalc(VariableEvaluator evaluator) = mySize().ceval(evaluator, 0);
    2483     eq FNdimsExp.cevalCalc(VariableEvaluator evaluator) = new CValueInteger(getFExp().ndims());
     2533    eq FNdimsExp.cevalCalc(VariableEvaluator evaluator) = CValueInteger.valueOf(getFExp().ndims());
    24842534   
    24852535    eq FSubscriptedExp.cevalCalc(VariableEvaluator evaluator) {
     
    24902540    eq FCardinality.cevalCalc(VariableEvaluator evaluator) {
    24912541        final int v = getFExp().cardinalityValue();
    2492         return (v <= 0) ? CValue.UNKNOWN : new CValueInteger(v);
     2542        return (v <= 0) ? CValue.UNKNOWN : CValueInteger.valueOf(v);
    24932543    }
    24942544
     
    25002550    eq FConnBoolOp.cevalCalc(VariableEvaluator evaluator) {
    25012551        if (connectionGraph != null && connectionGraph.builtTreesDone())
    2502           return new CValueBoolean(cevalFromGraph());
     2552          return CValueBoolean.valueOf(cevalFromGraph());
    25032553        else
    25042554          throw new ConstantEvaluationNotReadyException();
     
    25472597    public CValue Size.ceval(VariableEvaluator evaluator, int d) {
    25482598        int s = get(d);
    2549         return (s == Size.UNKNOWN) ? CValue.UNKNOWN : new CValueInteger(s);
     2599        return (s == Size.UNKNOWN) ? CValue.UNKNOWN : CValueInteger.valueOf(s);
    25502600    }
    25512601
     
    26142664    /** Set the value for initial() to evaluate to. */
    26152665    public static void FInitialExp.setIsInitial(boolean value) {
    2616           evaluationValue = new CValueBoolean(value);
     2666          evaluationValue = CValueBoolean.valueOf(value);
    26172667    }
    26182668
     
    26292679    eq FMaxExp.selectLesser() = false;
    26302680
    2631     eq FRealLitExp.cevalCalc(VariableEvaluator evaluator)         = new CValueReal(getValue());
    2632     eq FIntegerLitExp.cevalCalc(VariableEvaluator evaluator)      = new CValueInteger(getValue());
    2633     eq FBooleanLitExpTrue.cevalCalc(VariableEvaluator evaluator)  = new CValueBoolean(true);
    2634     eq FBooleanLitExpFalse.cevalCalc(VariableEvaluator evaluator) = new CValueBoolean(false);
     2681    eq FRealLitExp.cevalCalc(VariableEvaluator evaluator)         = CValueReal.valueOf(getValue());
     2682    eq FIntegerLitExp.cevalCalc(VariableEvaluator evaluator)      = CValueInteger.valueOf(getValue());
     2683    eq FBooleanLitExpTrue.cevalCalc(VariableEvaluator evaluator)  = CValueBoolean.TRUE;
     2684    eq FBooleanLitExpFalse.cevalCalc(VariableEvaluator evaluator) = CValueBoolean.FALSE;
    26352685    eq FStringLitExp.cevalCalc(VariableEvaluator evaluator)       = new CValueString(unEscape());
    26362686    eq FEnumLitExp.cevalCalc(VariableEvaluator evaluator)         = new CValueEnum(type(), getValue());
     
    26892739    eq FAbstractDerExp.cevalUse(VariableEvaluator evaluator) {
    26902740        if (getFAccess().variability().discreteOrLess())
    2691             return new CValueInteger(0);
     2741            return CValueInteger.valueOf(0);
    26922742        FAbstractVariable decl = myFV();
    26932743        return decl == null ? CValue.UNKNOWN : evaluator.ceval(decl);
     
    27062756    eq InstGlobalAccess.ceval(VariableEvaluator evaluator, Index i)   = getInstAccess().ceval(evaluator, i);
    27072757    eq InstNamedAccess.ceval(VariableEvaluator evaluator, Index i) {
    2708         CValue res = unknownCValue();
     2758        CValue res;
    27092759        if (myInstComponentDecl().isAssignable()) {
    27102760          Index iHere = Index.NULL;
     
    27282778              res = res.getCell(iHere);
    27292779        } else if (myInstClassDecl().isEnum()) {
    2730             res = new CValueInteger(myInstClassDecl().enumLiterals().size());
     2780            res = CValueInteger.valueOf(myInstClassDecl().enumLiterals().size());
    27312781        } else if (myInstClassDecl().isBoolean()) {
    2732             res = new CValueInteger(2);
     2782            res = CValueInteger.valueOf(2);
     2783        } else {
     2784            res = unknownCValue();
    27332785        }
    27342786        return res;
     
    27862838    eq FAbsExp.cevalCalc(VariableEvaluator evaluator)  = type().abs(getFExp().ceval(evaluator));
    27872839    eq FSignExp.cevalCalc(VariableEvaluator evaluator) = type().sign(getFExp().ceval(evaluator));
    2788     eq FSqrtExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.sqrt(getFExp().ceval(evaluator).realValue()));
     2840    eq FSqrtExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.sqrt(getFExp().ceval(evaluator).realValue()));
    27892841    eq FEnumIntegerExp.cevalCalc(VariableEvaluator evaluator) = getFExp().ceval(evaluator).convertInteger();
    27902842    eq FStringExp.cevalCalc(VariableEvaluator evaluator) {
     
    28892941    eq FIntegerFuncExp.cevalCalc(VariableEvaluator evaluator)     = getX().ceval(evaluator).convertInteger();
    28902942
    2891     eq FSinExp.cevalCalc(VariableEvaluator evaluator)   = new CValueReal(StrictMath.sin(getFExp().ceval(evaluator).realValue()));
    2892     eq FCosExp.cevalCalc(VariableEvaluator evaluator)   = new CValueReal(StrictMath.cos(getFExp().ceval(evaluator).realValue()));
    2893     eq FTanExp.cevalCalc(VariableEvaluator evaluator)   = new CValueReal(StrictMath.tan(getFExp().ceval(evaluator).realValue()));
    2894     eq FAsinExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.asin(getFExp().ceval(evaluator).realValue()));
    2895     eq FAcosExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.acos(getFExp().ceval(evaluator).realValue()));
    2896     eq FAtanExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.atan(getFExp().ceval(evaluator).realValue()));
    2897     eq FAtan2Exp.cevalCalc(VariableEvaluator evaluator) = new CValueReal(StrictMath.atan2(getFExp().ceval(evaluator).realValue(),
     2943    eq FSinExp.cevalCalc(VariableEvaluator evaluator)   = CValueReal.valueOf(StrictMath.sin(getFExp().ceval(evaluator).realValue()));
     2944    eq FCosExp.cevalCalc(VariableEvaluator evaluator)   = CValueReal.valueOf(StrictMath.cos(getFExp().ceval(evaluator).realValue()));
     2945    eq FTanExp.cevalCalc(VariableEvaluator evaluator)   = CValueReal.valueOf(StrictMath.tan(getFExp().ceval(evaluator).realValue()));
     2946    eq FAsinExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.asin(getFExp().ceval(evaluator).realValue()));
     2947    eq FAcosExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.acos(getFExp().ceval(evaluator).realValue()));
     2948    eq FAtanExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.atan(getFExp().ceval(evaluator).realValue()));
     2949    eq FAtan2Exp.cevalCalc(VariableEvaluator evaluator) = CValueReal.valueOf(StrictMath.atan2(getFExp().ceval(evaluator).realValue(),
    28982950                                                               getY().ceval(evaluator).realValue()));
    2899     eq FSinhExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.sinh(getFExp().ceval(evaluator).realValue()));
    2900     eq FCoshExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.cosh(getFExp().ceval(evaluator).realValue()));
    2901     eq FTanhExp.cevalCalc(VariableEvaluator evaluator)  = new CValueReal(StrictMath.tanh(getFExp().ceval(evaluator).realValue()));
    2902     eq FExpExp.cevalCalc(VariableEvaluator evaluator)   = new CValueReal(StrictMath.exp(getFExp().ceval(evaluator).realValue()));
    2903     eq FLogExp.cevalCalc(VariableEvaluator evaluator)   = new CValueReal(StrictMath.log(getFExp().ceval(evaluator).realValue()));
    2904     eq FLog10Exp.cevalCalc(VariableEvaluator evaluator) = new CValueReal(StrictMath.log10(getFExp().ceval(evaluator).realValue()));
     2951    eq FSinhExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.sinh(getFExp().ceval(evaluator).realValue()));
     2952    eq FCoshExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.cosh(getFExp().ceval(evaluator).realValue()));
     2953    eq FTanhExp.cevalCalc(VariableEvaluator evaluator)  = CValueReal.valueOf(StrictMath.tanh(getFExp().ceval(evaluator).realValue()));
     2954    eq FExpExp.cevalCalc(VariableEvaluator evaluator)   = CValueReal.valueOf(StrictMath.exp(getFExp().ceval(evaluator).realValue()));
     2955    eq FLogExp.cevalCalc(VariableEvaluator evaluator)   = CValueReal.valueOf(StrictMath.log(getFExp().ceval(evaluator).realValue()));
     2956    eq FLog10Exp.cevalCalc(VariableEvaluator evaluator) = CValueReal.valueOf(StrictMath.log10(getFExp().ceval(evaluator).realValue()));
    29052957
    29062958    eq FExInStream.cevalCalc(VariableEvaluator evaluator) {
     
    29312983                div += flow;
    29322984            }
    2933             return new CValueReal(sum / div);
     2985            return CValueReal.valueOf(sum / div);
    29342986        }
    29352987    }
     
    29402992    syn CValue FSubscript.ceval(VariableEvaluator evaluator) = CValue.UNSUPPORTED;
    29412993    eq FExpSubscript.ceval(VariableEvaluator evaluator)      = getFExp().ceval(evaluator);
    2942     eq FIntegerSubscript.ceval(VariableEvaluator evaluator)  = new CValueInteger(getValue());
     2994    eq FIntegerSubscript.ceval(VariableEvaluator evaluator)  = CValueInteger.valueOf(getValue());
    29432995   
    29442996    syn int FSubscript.value()   = ceval(defaultVariableEvaluator()).intValue();
     
    31773229    eq InstPrimitive.attributeCValueDefault(String name) {
    31783230        if (name.equals(FAttribute.FIXED))
    3179             return new CValueBoolean(isConstant() || isParameter() || isString());
     3231            return CValueBoolean.valueOf(isConstant() || isParameter() || isString());
    31803232        CValue res = attributeCValueDefaultMap().get(name);
    31813233        return (res == null) ? CValue.UNKNOWN : res;
     
    32033255            real.put(FAttribute.UNIT, emptyStr);
    32043256            real.put(FAttribute.DISPLAY_UNIT, emptyStr);
    3205             real.put(FAttribute.START, new CValueReal(0.0));
     3257            real.put(FAttribute.START, CValueReal.valueOf(0.0));
    32063258            // TODO: add stateSelect, but how to get type?
    32073259            REAL_DEFAULT_ATTRIBUTES = real;
    32083260            Map<String,CValue> integer = new HashMap<String,CValue>();
    32093261            integer.put(FAttribute.QUANTITY, emptyStr);
    3210             integer.put(FAttribute.START, new CValueInteger(0));
     3262            integer.put(FAttribute.START, CValueInteger.valueOf(0));
    32113263            INTEGER_DEFAULT_ATTRIBUTES = integer;
    32123264            Map<String,CValue> bool = new HashMap<String,CValue>();
     
    42314283            return CValue.UNKNOWN;
    42324284        }
    4233         return new CValueReal(v1.realValue() + v2.realValue());
     4285        return CValueReal.valueOf(v1.realValue() + v2.realValue());
    42344286    }
    42354287
     
    42384290            return CValue.UNKNOWN;
    42394291        }
    4240         return new CValueInteger(v1.intValue() + v2.intValue());
     4292        return CValueInteger.valueOf(v1.intValue() + v2.intValue());
    42414293    }
    42424294
     
    42614313            return CValue.UNKNOWN;
    42624314        }
    4263         return new CValueReal(v1.realValue() - v2.realValue());
     4315        return CValueReal.valueOf(v1.realValue() - v2.realValue());
    42644316    }
    42654317
     
    42684320            return CValue.UNKNOWN;
    42694321        }
    4270         return new CValueInteger(v1.intValue() - v2.intValue());
     4322        return CValueInteger.valueOf(v1.intValue() - v2.intValue());
    42714323    }
    42724324
     
    42844336            return CValue.UNKNOWN;
    42854337        }
    4286         return new CValueReal(v1.realValue() * v2.realValue());
     4338        return CValueReal.valueOf(v1.realValue() * v2.realValue());
    42874339    }
    42884340
     
    42914343            return CValue.UNKNOWN;
    42924344        }
    4293         return new CValueInteger(v1.intValue() * v2.intValue());
     4345        return CValueInteger.valueOf(v1.intValue() * v2.intValue());
    42944346    }
    42954347
     
    43074359            return CValue.UNKNOWN;
    43084360        }
    4309         return new CValueReal(v1.realValue() / v2.realValue());
     4361        return CValueReal.valueOf(v1.realValue() / v2.realValue());
    43104362    }
    43114363
     
    43144366            return CValue.UNKNOWN;
    43154367        }
    4316         return new CValueReal(v1.realValue() / v2.realValue());
     4368        return CValueReal.valueOf(v1.realValue() / v2.realValue());
    43174369    }
    43184370
     
    43304382            return CValue.UNKNOWN;
    43314383        }
    4332         return new CValueReal(java.lang.StrictMath.pow(v1.realValue(), v2.realValue()));
     4384        return CValueReal.valueOf(java.lang.StrictMath.pow(v1.realValue(), v2.realValue()));
    43334385    }
    43344386
     
    43404392     */
    43414393    syn CValue FType.neg(CValue v) = CValue.UNKNOWN;
    4342     eq FRealType.neg(CValue v) = v.hasRealValue() ? new CValueReal(-v.realValue()) : CValue.UNKNOWN;
    4343     eq FIntegerType.neg(CValue v) = v.hasIntValue() ? new CValueInteger(-v.intValue()) : CValue.UNKNOWN;
     4394    eq FRealType.neg(CValue v) = v.hasRealValue() ? CValueReal.valueOf(-v.realValue()) : CValue.UNKNOWN;
     4395    eq FIntegerType.neg(CValue v) = v.hasIntValue() ? CValueInteger.valueOf(-v.intValue()) : CValue.UNKNOWN;
    43444396
    43454397    /**
     
    43504402     */
    43514403    syn CValue FType.abs(CValue v) = CValue.UNKNOWN;
    4352     eq FRealType.abs(CValue v) = v.hasRealValue() ? new CValueReal(StrictMath.abs(v.realValue())) : CValue.UNKNOWN;
     4404    eq FRealType.abs(CValue v) = v.hasRealValue() ? CValueReal.valueOf(StrictMath.abs(v.realValue())) : CValue.UNKNOWN;
    43534405    eq FIntegerType.abs(CValue v) =
    4354             v.hasIntValue() ? new CValueInteger(StrictMath.abs(v.intValue())) : CValue.UNKNOWN;
     4406            v.hasIntValue() ? CValueInteger.valueOf(StrictMath.abs(v.intValue())) : CValue.UNKNOWN;
    43554407
    43564408    /**
     
    43634415
    43644416    eq FIntegerType.sign(CValue v) =
    4365             v.hasIntValue() ? new CValueInteger((int) StrictMath.signum(v.realValue())) : CValue.UNKNOWN;
     4417            v.hasIntValue() ? CValueInteger.valueOf((int) StrictMath.signum(v.realValue())) : CValue.UNKNOWN;
    43664418
    43674419    /**
     
    43734425    syn CValue FType.ceil(CValue v) = CValue.UNKNOWN;
    43744426
    4375     eq FRealType.ceil(CValue v) = v.hasRealValue() ? new CValueReal(StrictMath.ceil(v.realValue())) : CValue.UNKNOWN;
     4427    eq FRealType.ceil(CValue v) = v.hasRealValue() ? CValueReal.valueOf(StrictMath.ceil(v.realValue())) : CValue.UNKNOWN;
    43764428
    43774429    eq FIntegerType.ceil(CValue v) =
    4378             v.hasIntValue() ? new CValueInteger((int) StrictMath.ceil(v.realValue())) : CValue.UNKNOWN;
     4430            v.hasIntValue() ? CValueInteger.valueOf((int) StrictMath.ceil(v.realValue())) : CValue.UNKNOWN;
    43794431
    43804432    /**
     
    44134465            return CValue.UNKNOWN;
    44144466        }
    4415         return new CValueBoolean(v1.booleanValue() && v2.booleanValue());
     4467        return CValueBoolean.valueOf(v1.booleanValue() && v2.booleanValue());
    44164468    }
    44174469
     
    44294481            return CValue.UNKNOWN;
    44304482        }
    4431         return new CValueBoolean(v1.booleanValue() || v2.booleanValue());
     4483        return CValueBoolean.valueOf(v1.booleanValue() || v2.booleanValue());
    44324484    }
    44334485
     
    44394491     */
    44404492    syn CValue FType.not(CValue v) = CValue.UNKNOWN;
    4441     eq FBooleanType.not(CValue v) = v.isBoolean() ? new CValueBoolean(!v.booleanValue()) : CValue.UNKNOWN;
     4493    eq FBooleanType.not(CValue v) = v.isBoolean() ? CValueBoolean.valueOf(!v.booleanValue()) : CValue.UNKNOWN;
    44424494
    44434495    /* Machine epsilon */
     
    44644516            return CValue.UNKNOWN;
    44654517        }
    4466         return new CValueBoolean(v1.intValue() == v2.intValue());
     4518        return CValueBoolean.valueOf(v1.intValue() == v2.intValue());
    44674519    }
    44684520
     
    44714523            return CValue.UNKNOWN;
    44724524        }
    4473         return new CValueBoolean(almostZero(v1.realValue() - v2.realValue()));
     4525        return CValueBoolean.valueOf(almostZero(v1.realValue() - v2.realValue()));
    44744526    }
    44754527
     
    44784530            return CValue.UNKNOWN;
    44794531        }
    4480         return new CValueBoolean(v1.stringValue().compareTo(v2.stringValue()) == 0);
     4532        return CValueBoolean.valueOf(v1.stringValue().compareTo(v2.stringValue()) == 0);
    44814533    }
    44824534
     
    44944546            return CValue.UNKNOWN;
    44954547        }
    4496         return new CValueBoolean(v1.intValue() != v2.intValue());
     4548        return CValueBoolean.valueOf(v1.intValue() != v2.intValue());
    44974549    }
    44984550
     
    45014553            return CValue.UNKNOWN;
    45024554        }
    4503         return new CValueBoolean(v1.realValue() != v2.realValue());
     4555        return CValueBoolean.valueOf(v1.realValue() != v2.realValue());
    45044556    }
    45054557
     
    45084560            return CValue.UNKNOWN;
    45094561        }
    4510         return new CValueBoolean(v1.stringValue().compareTo(v2.stringValue()) != 0);
     4562        return CValueBoolean.valueOf(v1.stringValue().compareTo(v2.stringValue()) != 0);
    45114563    }
    45124564
     
    45244576            return CValue.UNKNOWN;
    45254577        }
    4526         return new CValueBoolean(v1.intValue() >= v2.intValue());
     4578        return CValueBoolean.valueOf(v1.intValue() >= v2.intValue());
    45274579    }
    45284580
     
    45314583            return CValue.UNKNOWN;
    45324584        }
    4533         return new CValueBoolean(almostGtZero(v1.realValue() - v2.realValue()));
     4585        return CValueBoolean.valueOf(almostGtZero(v1.realValue() - v2.realValue()));
    45344586    }
    45354587
     
    45384590            return CValue.UNKNOWN;
    45394591        }
    4540         return new CValueBoolean(v1.stringValue().compareTo(v2.stringValue()) >= 0);
     4592        return CValueBoolean.valueOf(v1.stringValue().compareTo(v2.stringValue()) >= 0);
    45414593    }
    45424594
     
    45544606            return CValue.UNKNOWN;
    45554607        }
    4556         return new CValueBoolean(v1.intValue() > v2.intValue());
     4608        return CValueBoolean.valueOf(v1.intValue() > v2.intValue());
    45574609    }
    45584610
     
    45614613            return CValue.UNKNOWN;
    45624614        }
    4563         return new CValueBoolean(v1.realValue() > v2.realValue());
     4615        return CValueBoolean.valueOf(v1.realValue() > v2.realValue());
    45644616    }
    45654617
     
    45684620            return CValue.UNKNOWN;
    45694621        }
    4570         return new CValueBoolean(v1.stringValue().compareTo(v2.stringValue()) > 0);
     4622        return CValueBoolean.valueOf(v1.stringValue().compareTo(v2.stringValue()) > 0);
    45714623    }
    45724624
     
    45844636            return CValue.UNKNOWN;
    45854637        }
    4586         return new CValueBoolean(v1.intValue() <= v2.intValue());
     4638        return CValueBoolean.valueOf(v1.intValue() <= v2.intValue());
    45874639    }
    45884640
     
    45914643            return CValue.UNKNOWN;
    45924644        }
    4593         return new CValueBoolean(almostLtZero(v1.realValue() - v2.realValue()));
     4645        return CValueBoolean.valueOf(almostLtZero(v1.realValue() - v2.realValue()));
    45944646    }
    45954647
     
    45984650            return CValue.UNKNOWN;
    45994651        }
    4600         return new CValueBoolean(v1.stringValue().compareTo(v2.stringValue()) <= 0);
     4652        return CValueBoolean.valueOf(v1.stringValue().compareTo(v2.stringValue()) <= 0);
    46014653    }
    46024654
     
    46144666            return CValue.UNKNOWN;
    46154667        }
    4616         return new CValueBoolean(v1.intValue() < v2.intValue());
     4668        return CValueBoolean.valueOf(v1.intValue() < v2.intValue());
    46174669    }
    46184670
     
    46214673            return CValue.UNKNOWN;
    46224674        }
    4623         return new CValueBoolean(v1.realValue() < v2.realValue());
     4675        return CValueBoolean.valueOf(v1.realValue() < v2.realValue());
    46244676    }
    46254677
     
    46284680            return CValue.UNKNOWN;
    46294681        }
    4630         return new CValueBoolean(v1.stringValue().compareTo(v2.stringValue()) < 0);
     4682        return CValueBoolean.valueOf(v1.stringValue().compareTo(v2.stringValue()) < 0);
    46314683    }
    46324684
    46334685    eq CValueUnknown.lt(CValue v1, CValue v2) = CValue.UNKNOWN;
    46344686
     4687   
     4688    public CValue CValue.absoluteValue() {
     4689        return this;
     4690    }
     4691    @Override
     4692    public CValue CValueReal.absoluteValue() {
     4693        return new CValueReal(Math.abs(realValue()));
     4694    }
     4695    @Override
     4696    public CValue CValueInteger.absoluteValue() {
     4697        return new CValueInteger(Math.abs(intValue()));
     4698    }
     4699   
    46354700}
    46364701
     
    48914956    eq SrcBooleanLitExpTrue.ceval()  = CValueBoolean.TRUE;
    48924957    eq SrcBooleanLitExpFalse.ceval() = CValueBoolean.FALSE;
    4893     eq SrcIntegerLitExp.ceval()      = new CValueInteger(Integer.parseInt(getUNSIGNED_INTEGER()));
    4894     eq SrcRealLitExp.ceval()         = new CValueReal(Double.parseDouble(getUNSIGNED_NUMBER()));
     4958    eq SrcIntegerLitExp.ceval()      = CValueInteger.valueOf(Integer.parseInt(getUNSIGNED_INTEGER()));
     4959    eq SrcRealLitExp.ceval()         = CValueReal.valueOf(Double.parseDouble(getUNSIGNED_NUMBER()));
    48954960    eq SrcArrayConstructor.ceval()   = cevalArray();
    48964961    eq SrcMatrix.ceval()             = cevalArray();
     
    48984963        CValue value = getSrcExp().ceval();
    48994964        if (value.isInteger())
    4900             return new CValueInteger(-value.intValue());
     4965            return CValueInteger.valueOf(-value.intValue());
    49014966        else if (value.isReal())
    4902             return new CValueReal(-value.realValue());
     4967            return CValueReal.valueOf(-value.realValue());
    49034968        else
    49044969            return CValue.UNKNOWN;
     
    50145079        }
    50155080       
    5016         public AlgorithmEvaluator createAlgorithmEvaluator(AbstractOptionRegistry options, Map<CommonVariableDecl, CValue> values) {
     5081        public AlgorithmEvaluator createAlgorithmEvaluator(OptionRegistry options, Map<CommonVariableDecl, CValue> values) {
    50175082            return new AlgorithmEvaluator(externalEvaluationEnabled, options, values);
    50185083        }
    50195084       
    5020         public AlgorithmEvaluator createEmptyAlgorithmEvaluator(AbstractOptionRegistry options) {
     5085        public AlgorithmEvaluator createEmptyAlgorithmEvaluator(OptionRegistry options) {
    50215086            return new AlgorithmEvaluator(true, options, Collections.<CommonVariableDecl, CValue>emptyMap());
    50225087        }
     
    50845149       
    50855150        @Override
    5086         public AlgorithmEvaluator createAlgorithmEvaluator(AbstractOptionRegistry options, Map<CommonVariableDecl, CValue> values) {
     5151        public AlgorithmEvaluator createAlgorithmEvaluator(OptionRegistry options, Map<CommonVariableDecl, CValue> values) {
    50875152            return new PartialAlgorithmEvaluator(externalEvaluationEnabled(), options, values, this);
    50885153        }
     
    51185183       
    51195184        @Override
    5120         public AlgorithmEvaluator createAlgorithmEvaluator(AbstractOptionRegistry options, Map<CommonVariableDecl, CValue> values) {
     5185        public AlgorithmEvaluator createAlgorithmEvaluator(OptionRegistry options, Map<CommonVariableDecl, CValue> values) {
    51215186            if (this.values == null) {
    51225187                this.values = values;
     
    52125277    public class AlgorithmEvaluator extends VariableEvaluator {
    52135278       
    5214         protected Map<CommonVariableDecl, CValue> values;
    5215         private AbstractOptionRegistry options;
    5216        
    5217         public AlgorithmEvaluator(boolean evaluateExternalEnabled, AbstractOptionRegistry options, Map<CommonVariableDecl, CValue> values) {
     5279        protected final Map<CommonVariableDecl, CValue> values;
     5280        private final OptionRegistry options;
     5281       
     5282        public AlgorithmEvaluator(boolean evaluateExternalEnabled, OptionRegistry options, Map<CommonVariableDecl, CValue> values) {
    52185283            super(evaluateExternalEnabled);
    52195284            this.values  = values;
     
    52225287       
    52235288        public int externalEvaluation() {
    5224             return externalEvaluationEnabled() ? options.getIntegerOption("external_constant_evaluation") : 0;
     5289            return externalEvaluationEnabled() ? options.external_constant_evaluation.getValue() : 0;
    52255290        }
    52265291       
     
    52865351        protected ArrayList<IfEvaluation> ifStack;
    52875352       
    5288         public PartialAlgorithmEvaluator(boolean evaluateExternalEnabled, AbstractOptionRegistry options,
     5353        public PartialAlgorithmEvaluator(boolean evaluateExternalEnabled, OptionRegistry options,
    52895354                Map<CommonVariableDecl, CValue> values, PartialVariableEvaluator variableEvaluator) {
    52905355            super(evaluateExternalEnabled, options, values);
     
    53035368       
    53045369        @Override
    5305         public AlgorithmEvaluator createAlgorithmEvaluator(AbstractOptionRegistry options, Map<CommonVariableDecl, CValue> values) {
     5370        public AlgorithmEvaluator createAlgorithmEvaluator(OptionRegistry options, Map<CommonVariableDecl, CValue> values) {
    53065371            return variableEvaluator.createAlgorithmEvaluator(options, values);
    53075372        }
Note: See TracChangeset for help on using the changeset viewer.