Skip to content

Commit

Permalink
Implemented inner/outer for components (inner/outer classes not impl.…
Browse files Browse the repository at this point in the history
… yet) testcases InnerOuter1.mo InnerOuter2.mo

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@2679 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed Feb 2, 2007
1 parent abd5bd5 commit 96610ee
Show file tree
Hide file tree
Showing 12 changed files with 949 additions and 228 deletions.
34 changes: 17 additions & 17 deletions Compiler/Builtin.mo
Expand Up @@ -82,68 +82,68 @@ public constant SCode.Class boolType=SCode.CLASS("BooleanType",false,false,SCode
protected constant SCode.Class enumType=SCode.CLASS("EnumType",false,false,SCode.R_PREDEFINED_ENUM(),
SCode.PARTS({},{},{},{},{},NONE));

protected constant SCode.Element unit=SCode.COMPONENT("unit",false,false,true,false,false,
protected constant SCode.Element unit=SCode.COMPONENT("unit",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("StringType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.STRING(""),false))),NONE,NONE) "This `unit\' component is used in several places below, and it is
declared once here to make the definitions below easier to read." ;

protected constant SCode.Element quantity=SCode.COMPONENT("quantity",false,false,true,false,false,
protected constant SCode.Element quantity=SCode.COMPONENT("quantity",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("StringType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.STRING(""),false))),NONE,NONE);

protected constant SCode.Element displayUnit=SCode.COMPONENT("displayUnit",false,false,true,false,false,
protected constant SCode.Element displayUnit=SCode.COMPONENT("displayUnit",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("StringType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.STRING(""),false))),NONE,NONE);

protected constant SCode.Element min=SCode.COMPONENT("min",false,false,true,false,false,
protected constant SCode.Element min=SCode.COMPONENT("min",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("RealType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.REAL(-1e+099),false))),NONE,NONE);

protected constant SCode.Element max=SCode.COMPONENT("max",false,false,true,false,false,
protected constant SCode.Element max=SCode.COMPONENT("max",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("RealType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.REAL(1e+099),false))),NONE,NONE);

protected constant SCode.Element realStart=SCode.COMPONENT("start",false,false,true,false,false,
protected constant SCode.Element realStart=SCode.COMPONENT("start",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("RealType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.REAL(0.0),false))),NONE,NONE);

protected constant SCode.Element integerStart=SCode.COMPONENT("start",false,false,true,false,false,
protected constant SCode.Element integerStart=SCode.COMPONENT("start",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("IntegerType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.INTEGER(0),false))),NONE,NONE);

protected constant SCode.Element stringStart=SCode.COMPONENT("start",false,false,true,false,false,
protected constant SCode.Element stringStart=SCode.COMPONENT("start",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("StringType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.STRING(""),false))),NONE,NONE);

protected constant SCode.Element booleanStart=SCode.COMPONENT("start",false,false,true,false,false,
protected constant SCode.Element booleanStart=SCode.COMPONENT("start",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("BooleanType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.BOOL(false),false))),NONE,NONE);

protected constant SCode.Element fixed=SCode.COMPONENT("fixed",false,false,true,false,false,
protected constant SCode.Element fixed=SCode.COMPONENT("fixed",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("BooleanType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},SOME((Absyn.BOOL(false),false))),NONE,NONE) "Should be true for variables" ;

protected constant SCode.Element nominal=SCode.COMPONENT("nominal",false,false,true,false,false,
protected constant SCode.Element nominal=SCode.COMPONENT("nominal",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("RealType"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},NONE),NONE,NONE);

protected constant SCode.Element stateSelect=SCode.COMPONENT("stateSelect",false,false,true,false,false,
protected constant SCode.Element stateSelect=SCode.COMPONENT("stateSelect",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RW(),SCode.PARAM(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("StateSelect"),NONE),
SCode.MOD(false,Absyn.NON_EACH(),{},
SOME((
Absyn.CREF(
Absyn.CREF_QUAL("StateSelect",{},Absyn.CREF_IDENT("default",{}))),false))),NONE,NONE);

protected constant list<SCode.Element> stateSelectComps={
SCode.COMPONENT("never",false,false,true,false,false,
SCode.COMPONENT("never",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RO(),SCode.CONST(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("EnumType"),NONE),SCode.NOMOD(),NONE,NONE),
SCode.COMPONENT("avoid",false,false,true,false,false,
SCode.COMPONENT("avoid",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RO(),SCode.CONST(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("EnumType"),NONE),SCode.NOMOD(),NONE,NONE),
SCode.COMPONENT("default",false,false,true,false,false,
SCode.COMPONENT("default",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RO(),SCode.CONST(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("EnumType"),NONE),SCode.NOMOD(),NONE,NONE),
SCode.COMPONENT("prefer",false,false,true,false,false,
SCode.COMPONENT("prefer",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RO(),SCode.CONST(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("EnumType"),NONE),SCode.NOMOD(),NONE,NONE),
SCode.COMPONENT("always",false,false,true,false,false,
SCode.COMPONENT("always",Absyn.UNSPECIFIED(),true,false,false,
SCode.ATTR({},false,SCode.RO(),SCode.CONST(),Absyn.BIDIR()),Absyn.TPATH(Absyn.IDENT("EnumType"),NONE),SCode.NOMOD(),NONE,NONE)} "The StateSelect enumeration" ;

protected constant SCode.Class stateSelectType=SCode.CLASS("StateSelect",false,false,SCode.R_ENUMERATION(),
Expand Down
11 changes: 7 additions & 4 deletions Compiler/Codegen.mo
Expand Up @@ -2918,6 +2918,8 @@ algorithm
Option<Absyn.Comment> comment;
Context context;
Exp.Exp e;
Types.Type tp;
Absyn.InnerOuter io;
case ((var as DAE.VAR(componentRef = id,varible = vk,variable = vd,input_ = typ,one = NONE,binding = inst_dims,dimension = start,value = flow_,flow_ = class_,variableAttributesOption = dae_var_attr,absynCommentOption = comment)),tnr,context)
equation
is_a = isArray(var);
Expand All @@ -2933,11 +2935,11 @@ algorithm
cfn = cAddVariables(cEmptyFunction, {decl_str});
then
(cfn,tnr);
case ((var as DAE.VAR(componentRef = id,varible = vk,variable = vd,input_ = typ,one = SOME(e),binding = inst_dims,dimension = start,value = flow_,flow_ = class_,variableAttributesOption = dae_var_attr,absynCommentOption = comment)),tnr,context)
case ((var as DAE.VAR(componentRef = id,varible = vk,variable = vd,input_ = typ,one = SOME(e),binding = inst_dims,dimension = start,value = flow_,flow_ = class_,variableAttributesOption = dae_var_attr,absynCommentOption = comment,innerOuter=io,fullType=tp)),tnr,context)
equation
(cfn,tnr1) = generateVarDecl(
DAE.VAR(id,vk,vd,typ,NONE,inst_dims,start,flow_,class_,
dae_var_attr,comment), tnr, context);
dae_var_attr,comment,io,tp), tnr, context);
then
(cfn,tnr1);
case (e,_,_)
Expand Down Expand Up @@ -5249,15 +5251,16 @@ algorithm
DAE.Element extvar,var;
CFunction fn,restfn,resfn;
list<DAE.Element> rest;
Types.Type tp;
case ({},tnr) then (cEmptyFunction,tnr);
case ((var :: rest),tnr)
equation
DAE.VAR(componentRef = cref,varible = vk,variable = vd,input_ = ty,one = value,binding = dims,dimension = start) = var;
DAE.VAR(componentRef = cref,varible = vk,variable = vd,input_ = ty,one = value,binding = dims,dimension = start,fullType=tp) = var;
true = isArray(var);
cref_1 = varNameExternalCref(cref);
dims_1 = listReverse(dims);
extvar = DAE.VAR(cref_1,vk,vd,ty,value,dims_1,NONE,DAE.NON_FLOW(),{},NONE,
NONE);
NONE,Absyn.UNSPECIFIED(),tp);
(fn,tnr_1) = generateVarDecl(extvar, tnr, CONTEXT(FUNCTION(),NORMAL()));
(restfn,tnr_3) = generateExtcallCopydeclsF77(rest, tnr_1);
resfn = cMergeFn(fn, restfn);
Expand Down

0 comments on commit 96610ee

Please sign in to comment.