Skip to content

Commit

Permalink
All changes from PDE branch from svn in one commit.
Browse files Browse the repository at this point in the history
(Cherry-pick of f374870b28a3de9426910072e3efbb5aaeedf454)

Conflicts:
	Compiler/FrontEnd/InstFunction.mo
	Compiler/Util/Flags.mo
  • Loading branch information
Jan Šilar authored and OpenModelica-Hudson committed Feb 10, 2016
1 parent 748d6d5 commit 8d38966
Show file tree
Hide file tree
Showing 24 changed files with 305 additions and 153 deletions.
16 changes: 8 additions & 8 deletions Compiler/FFrontEnd/FBuiltin.mo
Expand Up @@ -133,9 +133,9 @@ protected constant SCode.Prefixes commonPrefixesNotFinal =
SCode.NOT_REPLACEABLE());

protected
constant SCode.Attributes attrConst = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.CONST(),Absyn.BIDIR());
constant SCode.Attributes attrParam = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR());
constant SCode.Attributes attrParamVectorNoDim = SCode.ATTR({Absyn.NOSUB()},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR());
constant SCode.Attributes attrConst = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.CONST(),Absyn.BIDIR(),Absyn.NONFIELD());
constant SCode.Attributes attrParam = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR(),Absyn.NONFIELD());
constant SCode.Attributes attrParamVectorNoDim = SCode.ATTR({Absyn.NOSUB()},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR(),Absyn.NONFIELD());

//
// The primitive types
Expand Down Expand Up @@ -487,39 +487,39 @@ protected constant SCode.Element timeComp =
SCode.COMPONENT(
"time",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element startTimeComp =
SCode.COMPONENT(
"startTime",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element finalTimeComp =
SCode.COMPONENT(
"finalTime",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element objectiveIntegrandComp =
SCode.COMPONENT(
"objectiveIntegrand",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element objectiveVarComp =
SCode.COMPONENT(
"objectiveVar",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

Expand Down
2 changes: 1 addition & 1 deletion Compiler/FFrontEnd/FGraph.mo
Expand Up @@ -600,7 +600,7 @@ algorithm
c = SCode.COMPONENT(
name,
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.CONST(), Absyn.BIDIR()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.CONST(), Absyn.BIDIR(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT(""), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);
v = DAE.TYPES_VAR(
Expand Down
24 changes: 22 additions & 2 deletions Compiler/FrontEnd/Absyn.mo
Expand Up @@ -35,7 +35,7 @@ encapsulated package Absyn
package: Absyn
description: Abstract syntax

RCS: $Id$
RCS: $Id: Absyn.mo 25819 2015-04-29 11:33:05Z jansilar $

This file defines the abstract syntax for Modelica in MetaModelica Compiler (MMC). It mainly
contains uniontypes for constructing the abstract syntax tree
Expand Down Expand Up @@ -627,10 +627,17 @@ uniontype ElementAttributes "Element attributes"
Parallelism parallelism "for OpenCL/CUDA parglobal, parlocal ...";
Variability variability "parameter, constant etc.";
Direction direction "input/output";
IsField isField "non-field / field";
ArrayDim arrayDim "array dimensions";
end ATTR;
end ATTR;
end ElementAttributes;

public
uniontype IsField "Is field"
record NONFIELD "variable is not a field" end NONFIELD;
record FIELD "variable is a field" end FIELD;
end IsField;

public
uniontype Parallelism "Parallelism"
record PARGLOBAL "Global variables for CUDA and OpenCL" end PARGLOBAL;
Expand Down Expand Up @@ -5351,6 +5358,19 @@ algorithm
end match;
end directionEqual;

public function isFieldEqual
input IsField isField1;
input IsField isField2;
output Boolean outEqual;
algorithm
outEqual := match(isField1, isField2)
case (NONFIELD(), NONFIELD()) then true;
case (FIELD(), FIELD()) then true;
else false;
end match;
end isFieldEqual;


public function pathLt
input Path path1;
input Path path2;
Expand Down
18 changes: 9 additions & 9 deletions Compiler/FrontEnd/Builtin.mo
Expand Up @@ -34,7 +34,7 @@ encapsulated package Builtin
package: Builtin
description: Builting tyepes and variables

RCS: $Id$
RCS: $Id: Builtin.mo 25318 2015-03-30 14:09:51Z jansilar $

This module defines the builtin types, variables and functions in Modelica.

Expand Down Expand Up @@ -134,9 +134,9 @@ protected constant SCode.Prefixes commonPrefixesNotFinal =
SCode.NOT_REPLACEABLE());

protected
constant SCode.Attributes attrConst = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.CONST(),Absyn.BIDIR());
constant SCode.Attributes attrParam = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR());
constant SCode.Attributes attrParamVectorNoDim = SCode.ATTR({Absyn.NOSUB()},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR());
constant SCode.Attributes attrConst = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.CONST(),Absyn.BIDIR(), Absyn.NONFIELD());
constant SCode.Attributes attrParam = SCode.ATTR({},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR(), Absyn.NONFIELD());
constant SCode.Attributes attrParamVectorNoDim = SCode.ATTR({Absyn.NOSUB()},SCode.POTENTIAL(),SCode.NON_PARALLEL(),SCode.PARAM(),Absyn.BIDIR(), Absyn.NONFIELD());

//
// The primitive types
Expand Down Expand Up @@ -473,39 +473,39 @@ protected constant SCode.Element timeComp =
SCode.COMPONENT(
"time",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element startTimeComp =
SCode.COMPONENT(
"startTime",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element finalTimeComp =
SCode.COMPONENT(
"finalTime",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element objectiveIntegrandComp =
SCode.COMPONENT(
"objectiveIntegrand",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

protected constant SCode.Element objectiveVarComp =
SCode.COMPONENT(
"objectiveVar",
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.INPUT(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT("Real"), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo);

Expand Down
6 changes: 3 additions & 3 deletions Compiler/FrontEnd/CevalFunction.mo
Expand Up @@ -35,7 +35,7 @@ encapsulated package CevalFunction
description: This module constant evaluates DAE.Function objects, i.e.
modelica functions defined by the user.

RCS: $Id$
RCS: $Id: CevalFunction.mo 25312 2015-03-30 08:35:17Z jansilar $

TODO:
* Implement evaluation of MetaModelica statements.
Expand Down Expand Up @@ -1705,7 +1705,7 @@ algorithm
SCode.COMPONENT(
inName,
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT(""), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo),
DAE.NOMOD(),
Expand All @@ -1727,7 +1727,7 @@ algorithm
SCode.COMPONENT(
inName,
SCode.defaultPrefixes,
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR()),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT(""), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo),
DAE.NOMOD(),
Expand Down
23 changes: 21 additions & 2 deletions Compiler/FrontEnd/Dump.mo
Expand Up @@ -34,7 +34,7 @@ encapsulated package Dump
package: Dump
description: debug printing

RCS: $Id$
RCS: $Id: Dump.mo 25312 2015-03-30 08:35:17Z jansilar $

Printing routines for debugging of the AST. These functions do
nothing but print the data structures to the standard output.
Expand Down Expand Up @@ -4247,7 +4247,8 @@ algorithm
Absyn.Variability variability;
Absyn.Direction direction;
Absyn.ArrayDim arrayDim;
case Absyn.ATTR(flowPrefix,streamPrefix,parallelism,variability,direction,arrayDim)
Absyn.IsField isField;
case Absyn.ATTR(flowPrefix,streamPrefix,parallelism,variability,direction,isField,arrayDim)
equation
Print.printBuf("record Absyn.ATTR flowPrefix = ");
Print.printBuf(boolString(flowPrefix));
Expand All @@ -4259,6 +4260,8 @@ algorithm
printVariabilityAsCorbaString(variability);
Print.printBuf(", direction = ");
printDirectionAsCorbaString(direction);
Print.printBuf(", isField = ");
printIsFieldAsCorbaString(isField);
Print.printBuf(", arrayDim = ");
printArrayDimAsCorbaString(arrayDim);
Print.printBuf(" end Absyn.ATTR;");
Expand Down Expand Up @@ -4327,6 +4330,22 @@ algorithm
end match;
end printDirectionAsCorbaString;

protected function printIsFieldAsCorbaString
input Absyn.IsField isf;
algorithm
_ := match isf
case Absyn.NONFIELD()
equation
Print.printBuf("record Absyn.NONFIELD end Absyn.NONFIELD;");
then ();
case Absyn.FIELD()
equation
Print.printBuf("record Absyn.FIELD end Absyn.FIELD;");
then ();
end match;
end printIsFieldAsCorbaString;


protected function printElementArgAsCorbaString
input Absyn.ElementArg arg;
algorithm
Expand Down
6 changes: 3 additions & 3 deletions Compiler/FrontEnd/Inst.mo
Expand Up @@ -34,7 +34,7 @@ encapsulated package Inst
package: Inst
description: Model instantiation

RCS: $Id$
RCS: $Id: Inst.mo 25819 2015-04-29 11:33:05Z jansilar $

This module is responsible for instantiation of Modelica models.
The instantation is the process of instantiating model components,
Expand Down Expand Up @@ -2739,7 +2739,7 @@ algorithm
SCode.R_TYPE(),
SCode.DERIVED(
tSpec,SCode.NOMOD(),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR())),
SCode.ATTR({}, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR(), Absyn.NONFIELD())),
SCode.noComment,
Absyn.dummyInfo);
(cache,_,ih,_,_,csets,ty,_,oDA,_)=instClass(cache,env,ih,UnitAbsyn.noStore,DAE.NOMOD(),pre,c,dims,impl,InstTypes.INNER_CALL(), ConnectionGraph.EMPTY, inSets);
Expand Down Expand Up @@ -3654,7 +3654,7 @@ algorithm

cls = SCode.CLASS(id, SCode.defaultPrefixes, SCode.NOT_ENCAPSULATED(),
SCode.NOT_PARTIAL(), SCode.R_TYPE(), SCode.DERIVED(ts, SCode.NOMOD(),
SCode.ATTR(ad, ct, SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR())), SCode.noComment, info);
SCode.ATTR(ad, ct, SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR(), Absyn.NONFIELD())), SCode.noComment, info);

// The variable declaration and the (optional) equation modification are inspected for array dimensions.
// Gather all the dimensions
Expand Down
11 changes: 6 additions & 5 deletions Compiler/FrontEnd/InstExtends.mo
Expand Up @@ -34,7 +34,7 @@ encapsulated package InstExtends
package: InstExtends
description: Model instantiation

RCS: $Id$
RCS: $Id: InstExtends.mo 25315 2015-03-30 13:26:21Z jansilar $

This module is responsible for instantiation of the extends and
class extends constructs in Modelica models.
Expand Down Expand Up @@ -998,13 +998,14 @@ algorithm
SCode.Variability var;
SCode.Parallelism prl;
Absyn.Direction dir;
Absyn.IsField isf;
FCore.Cache cache;
FCore.Graph env;
HashTableStringToPath.HashTable ht;
SCode.Element elt;

case (cache,env,SCode.COMPONENT(name, prefixes as SCode.PREFIXES(replaceablePrefix = SCode.REPLACEABLE(_)),
SCode.ATTR(ad, ct, prl, var, dir), typeSpec, modifications, comment, condition, info),ht)
SCode.ATTR(ad, ct, prl, var, dir, isf), typeSpec, modifications, comment, condition, info),ht)
equation
//fprintln(Flags.DEBUG,"fix comp " + SCodeDump.unparseElementStr(elt,SCodeDump.defaultOptions));
// lookup as it might have been redeclared!!!
Expand All @@ -1014,17 +1015,17 @@ algorithm
(cache,typeSpec) = fixTypeSpec(cache,env,typeSpec,ht);
(cache,SOME(ad)) = fixArrayDim(cache, env, SOME(ad), ht);
then
(cache,SCode.COMPONENT(name, prefixes, SCode.ATTR(ad, ct, prl, var, dir), typeSpec, modifications, comment, condition, info));
(cache,SCode.COMPONENT(name, prefixes, SCode.ATTR(ad, ct, prl, var, dir, isf), typeSpec, modifications, comment, condition, info));

// we failed above
case (cache,env,SCode.COMPONENT(name, prefixes, SCode.ATTR(ad, ct, prl, var, dir), typeSpec, modifications, comment, condition, info),ht)
case (cache,env,SCode.COMPONENT(name, prefixes, SCode.ATTR(ad, ct, prl, var, dir, isf), typeSpec, modifications, comment, condition, info),ht)
equation
//fprintln(Flags.DEBUG,"fix comp " + SCodeDump.unparseElementStr(elt,SCodeDump.defaultOptions));
(cache,modifications) = fixModifications(cache,env,modifications,ht);
(cache,typeSpec) = fixTypeSpec(cache,env,typeSpec,ht);
(cache,SOME(ad)) = fixArrayDim(cache, env, SOME(ad), ht);
then
(cache,SCode.COMPONENT(name, prefixes, SCode.ATTR(ad, ct, prl, var, dir), typeSpec, modifications, comment, condition, info));
(cache,SCode.COMPONENT(name, prefixes, SCode.ATTR(ad, ct, prl, var, dir, isf), typeSpec, modifications, comment, condition, info));

case (cache,env,SCode.CLASS(name, prefixes as SCode.PREFIXES(replaceablePrefix = SCode.REPLACEABLE(_)),
SCode.ENCAPSULATED(), partialPrefix, restriction, classDef, comment, info),ht)
Expand Down
8 changes: 4 additions & 4 deletions Compiler/FrontEnd/InstSection.mo
Expand Up @@ -34,7 +34,7 @@ encapsulated package InstSection
package: InstSection
description: Model instantiation

RCS: $Id$
RCS: $Id: InstSection.mo 25819 2015-04-29 11:33:05Z jansilar $

This module is responsible for instantiation of Modelica equation
and algorithm sections (including connect equations)."
Expand Down Expand Up @@ -3296,7 +3296,7 @@ algorithm
SCode.COMPONENT(
componentName,
SCode.defaultPrefixes,
SCode.ATTR(arrDims, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR()),
SCode.ATTR(arrDims, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR(),Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT(""), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo),
DAE.NOMOD(),
Expand Down Expand Up @@ -3383,7 +3383,7 @@ algorithm
SCode.COMPONENT(
componentName,
SCode.defaultPrefixes,
SCode.ATTR(arrDims, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR()),
SCode.ATTR(arrDims, SCode.POTENTIAL(), SCode.NON_PARALLEL(), SCode.VAR(), Absyn.BIDIR(), Absyn.NONFIELD()),
Absyn.TPATH(Absyn.IDENT(""), NONE()), SCode.NOMOD(),
SCode.noComment, NONE(), Absyn.dummyInfo),
DAE.NOMOD(),
Expand Down Expand Up @@ -3437,7 +3437,7 @@ algorithm
c1_2,
state,
ty1,
SCode.ATTR(arrDims, ct1, prl1, vt1, Absyn.BIDIR()),
SCode.ATTR(arrDims, ct1, prl1, vt1, Absyn.BIDIR(), Absyn.NONFIELD()),
vis1,
io1,
source);
Expand Down
5 changes: 3 additions & 2 deletions Compiler/FrontEnd/InstUtil.mo
Expand Up @@ -7354,14 +7354,15 @@ algorithm
Absyn.Direction dir;
SCode.Parallelism prl;
SCode.Variability vt;
Absyn.IsField isf;

// if classprefix is variable, keep component variability
case (_,Prefix.PREFIX(_,Prefix.CLASSPRE(SCode.VAR()))) then attr;
// if variability is constant, do not override it!
case(SCode.ATTR(variability = SCode.CONST()),_) then attr;
// if classprefix is parameter or constant, override component variability
case(SCode.ATTR(ad,ct,prl,_,dir),Prefix.PREFIX(_,Prefix.CLASSPRE(vt)))
then SCode.ATTR(ad,ct,prl,vt,dir);
case(SCode.ATTR(ad,ct,prl,_,dir,isf),Prefix.PREFIX(_,Prefix.CLASSPRE(vt)))
then SCode.ATTR(ad,ct,prl,vt,dir,isf);
// anything else
else attr;
end matchcontinue;
Expand Down

0 comments on commit 8d38966

Please sign in to comment.