Changeset 12096


Ignore:
Timestamp:
Dec 6, 2018 9:15:48 AM (12 months ago)
Author:
Jonathan Kämpe
Message:

#5714 merge from trunk to dev branch

Location:
branches/dev-jk-alias
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-jk-alias

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

    r12012 r12096  
    787787        public Set<FAccessExp> getDependencies() {
    788788            return deps;
     789        }
     790    }
     791   
     792    /**
     793     * Unknown value. This class is used when an access cannot be evaluated.
     794     */
     795    public class CValueUnknownAccess extends CValueUnknown {
     796        private String access;
     797       
     798        public CValueUnknownAccess(String access) {
     799            this.access = access;
     800        }
     801       
     802        @Override
     803        public boolean isUnknownAccess() {
     804            return true;
     805        }
     806       
     807        @Override
     808        public String access() {
     809            return access;
    789810        }
    790811    }
     
    922943
    923944        @Override
     945        public boolean isUnknownAccess() {
     946            boolean res = true;
     947            for (CValue cvalue : values)
     948                res &= cvalue.isUnknownAccess();
     949            return res;
     950        }
     951
     952        @Override
    924953        public int[] intVector() {
    925954            int[] vector = new int[values.length];
     
    960989            for (int i = 0; i < values.length; i++)
    961990                vector[i] = values[i].stringValue();
     991            return vector;
     992        }
     993
     994        @Override
     995        public String[] accessVector() {
     996            String[] vector = new String[values.length];
     997            for (int i = 0; i < values.length; i++)
     998                vector[i] = values[i].access();
    962999            return vector;
    9631000        }
     
    23902427    eq FEnumLitExp.cevalCalc(VariableEvaluator evaluator)         = new CValueEnum(type(), getValue());
    23912428
     2429    syn CValue CommonAccess.unknownCValue() = new CValueUnknownAccess(name());
     2430
    23922431    syn CValue CommonAccess.ceval(VariableEvaluator evaluator);
    23932432    eq FAccess.ceval(VariableEvaluator evaluator) {
     
    24142453            }
    24152454        } else {
    2416             return CValue.UNKNOWN;
     2455            return unknownCValue();
    24172456        }
    24182457    }
     
    24532492   
    24542493   
    2455     syn CValue InstAccess.ceval(VariableEvaluator evaluator)        = ceval(evaluator, Index.NULL);
    2456     syn CValue InstAccess.ceval(VariableEvaluator evaluator, Index i) = CValue.UNKNOWN;
     2494    syn CValue InstAccess.ceval(VariableEvaluator evaluator)          = ceval(evaluator, Index.NULL);
     2495    syn CValue InstAccess.ceval(VariableEvaluator evaluator, Index i) = unknownCValue();
    24572496    eq InstDot.ceval(VariableEvaluator evaluator, Index i)            = getLastInstAccess().ceval(evaluator, i);
    24582497    eq InstGlobalAccess.ceval(VariableEvaluator evaluator, Index i)   = getInstAccess().ceval(evaluator, i);
    24592498    eq InstNamedAccess.ceval(VariableEvaluator evaluator, Index i) {
    2460         CValue res = CValue.UNKNOWN;
     2499        CValue res = unknownCValue();
    24612500        if (myInstComponentDecl().isAssignable()) {
    24622501          Index iHere = Index.NULL;
     
    45564595    syn CValue SrcExp.ceval()        = CValue.UNKNOWN;
    45574596    eq SrcStringLitExp.ceval()       = new CValueString(unEscape());
    4558     eq SrcAccessExp.ceval()          = new CValueString(getSrcAccess().name());
     4597    eq SrcAccessExp.ceval()          = new CValueUnknownAccess(getSrcAccess().name());
    45594598    eq SrcBooleanLitExpTrue.ceval()  = CValueBoolean.TRUE;
    45604599    eq SrcBooleanLitExpFalse.ceval() = CValueBoolean.FALSE;
  • branches/dev-jk-alias/Compiler/ModelicaFrontEnd/src/jastadd/util/Annotations.jrag

    r11971 r12096  
    104104    }
    105105
     106    public CValue InstExternal.ceval(SrcExp exp) {
     107      return surroundingInstClass().ceval(exp);
     108    }
     109
    106110    /**
    107111     * If exp is an access, try to look it up as a class in the scope of this node,
     
    110114    public InstLookupResult<InstClassDecl> InstNode.lookupInstClass(SrcExp exp) {
    111115        return annotationExp(exp).lookupInstClassIfAccess();
     116    }
     117
     118    public InstLookupResult<InstClassDecl> InstExternal.lookupInstClass(SrcExp exp) {
     119        return surroundingInstClass().lookupInstClass(exp);
    112120    }
    113121
     
    130138    public InstLookupResult<InstComponentDecl> InstNode.lookupInstComponent(SrcExp exp) {
    131139        return annotationExp(exp).lookupInstComponentIfAccess();
     140    }
     141
     142    public InstLookupResult<InstComponentDecl> InstExternal.lookupInstComponent(SrcExp exp) {
     143        return surroundingInstClass().lookupInstComponent(exp);
    132144    }
    133145
     
    403415     */
    404416    public interface InstContext {
    405         public CValue ceval(SrcExp exp);
    406         public InstLookupResult<InstClassDecl>     lookupInstClass(SrcExp exp);
    407         public InstLookupResult<InstComponentDecl> lookupInstComponent(SrcExp exp);
     417        CValue ceval(SrcExp exp);
     418        InstLookupResult<InstClassDecl>     lookupInstClass(SrcExp exp);
     419        InstLookupResult<InstComponentDecl> lookupInstComponent(SrcExp exp);
     420        FExp dynamicFExp(FExp exp);
    408421    }
    409422
    410423    InstNode implements InstContext;
     424    InstExternal implements InstContext;
    411425
    412426    /**
     
    443457
    444458            public InstLookupResult<InstComponentDecl> lookupInstComponent(SrcExp exp) {
     459                return null;
     460            }
     461           
     462            public FExp dynamicFExp(FExp exp) {
    445463                return null;
    446464            }
  • branches/dev-jk-alias/Compiler/ModelicaFrontEnd/src/jastadd/util/SrcAnnotations.jrag

    r11896 r12096  
    2626aspect SrcAnnotations {
    2727
     28    public SrcAnnotationNode InstComponentDecl.srcClassAnnotation(String ... path) {
     29        return myInstClass().getSrcClassDecl().srcAnnotation(new SrcAnnotationNode.InstEvaluator(this), path);
     30    }
     31
     32    public SrcAnnotationNode InstExtends.srcClassAnnotation(String ... path) {
     33        return myInstClass().getSrcClassDecl().srcAnnotation(new SrcAnnotationNode.InstEvaluator(this), path);
     34    }
     35
    2836    public SrcAnnotationNode SrcClassDecl.srcAnnotation(String ... path) {
    2937        return srcAnnotation(SrcAnnotationNode.defaultEvaluator(), path);
     
    8694        return SrcAnnotationNode.createFor(this, evaluator, path);
    8795    }
    88 
    89 
    90 
    91     class InstClassDecl     implements SrcAnnotationNode.InstEvaluator.Context {}
    92     class InstComponentDecl implements SrcAnnotationNode.InstEvaluator.Context {}
    93     class InstExtends       implements SrcAnnotationNode.InstEvaluator.Context {}
    94     class InstExternal      implements SrcAnnotationNode.InstEvaluator.Context {}
    95 
    9696
    9797
     
    164164        public static class InstEvaluator implements Evaluator<SrcExp> {
    165165           
    166             private Context context;
     166            private InstContext context;
    167167           
    168             public InstEvaluator(Context context) {
     168            public InstEvaluator(InstContext context) {
    169169                this.context = context;
    170170            }
     
    176176            }
    177177           
    178             public interface Context {
    179                 public FExp dynamicFExp(FExp exp);
    180             }
    181178        }
    182179    }
  • branches/dev-jk-alias/Compiler/ModelicaFrontEnd/src/java/org/jmodelica/util/annotations/GenericAnnotationNode.java

    r11970 r12096  
    745745        return getAndCheckConstValue(ValueType.STRING, ValueSize.VECTOR, true).stringVector();
    746746    }
     747   
     748    public boolean isUnknownAccess() {
     749        return getAndCheckConstValue(ValueType.UNKNOWN_ACCESS, ValueSize.SCALAR) != null;
     750    }
     751   
     752    public boolean isUnknownAccessVector() {
     753        return getAndCheckConstValue(ValueType.UNKNOWN_ACCESS, ValueSize.VECTOR) != null;
     754    }
     755   
     756    public String unknownAccessAsString() {
     757        return getAndCheckConstValue(ValueType.UNKNOWN_ACCESS, ValueSize.SCALAR).access();
     758    }
     759   
     760    public String[] unknownAccessVectorAsStringVector() {
     761        return getAndCheckConstValue(ValueType.UNKNOWN_ACCESS, ValueSize.VECTOR).accessVector();
     762    }
    747763
    748764    /*****************************************
     
    768784            }
    769785        },
     786        UNKNOWN_ACCESS {
     787          @Override
     788        public boolean check(ConstValue value) {
     789            return value.isUnknownAccess();
     790        } 
     791        },
    770792        REAL {
    771793            @Override
  • branches/dev-jk-alias/Compiler/ModelicaFrontEnd/src/java/org/jmodelica/util/values/ConstValue.java

    r9975 r12096  
    311311        return false;
    312312    }
     313   
     314    /**
     315     * Checks if this value is an unknown caused by an unresolvable access.
     316     */
     317    public boolean isUnknownAccess() {
     318        return false;
     319    }
     320   
     321    /**
     322     * If this value is an unknown access returns the access as a string, otherwise null.
     323     */
     324    public String access() {
     325        throw new ConstantEvaluationException(this, "get access from");
     326    }
     327   
     328    /**
     329     * If this value is an unknown access returns the access as a string, otherwise null.
     330     */
     331    public String[] accessVector() {
     332        throw new ConstantEvaluationException(this, "get access vector from");
     333    }
    313334}
  • branches/dev-jk-alias/RuntimeLibrary/src

Note: See TracChangeset for help on using the changeset viewer.