Skip to content

Commit

Permalink
- Fix scoping issue for MatchDotNotation (wrong component env)
Browse files Browse the repository at this point in the history
- Added the new language extensions to Basic-Exercise-MetaModelica.onb


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19665 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Mar 21, 2014
1 parent 5dfb5d0 commit 0d881d0
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
13 changes: 12 additions & 1 deletion Compiler/FrontEnd/Lookup.mo
Expand Up @@ -2658,7 +2658,7 @@ algorithm
(outCache,outAttributes,outType,outBinding,constOfForIteratorRange,splicedExpData,outComponentEnv,name) :=
matchcontinue (inCache,inBinTree,inComponentRef)
local
String id;
String id,id2;
SCode.ConnectorType ct;
SCode.Parallelism prl;
SCode.Variability vt,vt2;
Expand All @@ -2681,6 +2681,7 @@ algorithm
Option<DAE.Const> cnstForRange;
SCode.Visibility vis;
DAE.Attributes attr;
list<DAE.Var> fields;

// Simple identifier
case (cache,ht,ids as DAE.CREF_IDENT(ident = id,subscriptLst = ss) )
Expand Down Expand Up @@ -2726,6 +2727,16 @@ algorithm
vt = SCode.variabilityOr(vt,vt2);
then
(cache,DAE.ATTR(ct,prl,vt,di,io,vis),ty,binding,cnstForRange,InstTypes.SPLICEDEXPDATA(NONE(),idTp),componentEnv,name);

// Qualified componentname without spliced Expression.
case (cache,ht,xCref as (DAE.CREF_QUAL(ident = id,subscriptLst = {},componentRef = DAE.CREF_IDENT(ident=id2,subscriptLst={}))))
equation
true = Config.acceptMetaModelicaGrammar();
(cache,DAE.TYPES_VAR(ty=DAE.T_METARECORD(fields=fields)),_,_,_,componentEnv) = lookupVar2(cache,ht, id);
DAE.TYPES_VAR(name,attr,ty,binding,cnstForRange) = listGet(fields,Types.findVarIndex(id2,fields)+1);
then
(cache,attr,ty,binding,cnstForRange,InstTypes.SPLICEDEXPDATA(NONE(),ty),componentEnv,name);

end matchcontinue;
end lookupVarF;

Expand Down
4 changes: 2 additions & 2 deletions Compiler/FrontEnd/Patternm.mo
Expand Up @@ -2285,7 +2285,7 @@ algorithm
equation
path = Absyn.stripLast(name);
ty = DAE.T_METARECORD(path,index,fields,knownSingleton,{name});
env = Env.extendFrameV(env, DAE.TYPES_VAR(id,attr,ty,DAE.UNBOUND(),NONE()), SCode.COMPONENT(id,SCode.defaultPrefixes,SCode.defaultVarAttr,Absyn.TPATH(name,NONE()),SCode.NOMOD(),SCode.noComment,NONE(),Absyn.dummyInfo), DAE.NOMOD(), Env.VAR_DAE(), env);
env = Env.extendFrameV(env, DAE.TYPES_VAR(id,attr,ty,DAE.UNBOUND(),NONE()), SCode.COMPONENT(id,SCode.defaultPrefixes,SCode.defaultVarAttr,Absyn.TPATH(name,NONE()),SCode.NOMOD(),SCode.noComment,NONE(),Absyn.dummyInfo), DAE.NOMOD(), Env.VAR_DAE(), Env.emptyEnv);
then ((pat,env));
else inTpl;
end match;
Expand Down Expand Up @@ -2361,7 +2361,7 @@ algorithm
case (env,ty::_,(id::rest)::aliases,_)
equation
attr = DAE.dummyAttrInput;
env = Env.extendFrameV(env, DAE.TYPES_VAR(id,attr,ty,DAE.UNBOUND(),NONE()), SCode.COMPONENT(id,SCode.defaultPrefixes,SCode.defaultVarAttr,Absyn.TPATH(Absyn.IDENT("$dummy"),NONE()),SCode.NOMOD(),SCode.noComment,NONE(),info), DAE.NOMOD(), Env.VAR_DAE(), env);
env = Env.extendFrameV(env, DAE.TYPES_VAR(id,attr,ty,DAE.UNBOUND(),NONE()), SCode.COMPONENT(id,SCode.defaultPrefixes,SCode.defaultVarAttr,Absyn.TPATH(Absyn.IDENT("$dummy"),NONE()),SCode.NOMOD(),SCode.noComment,NONE(),info), DAE.NOMOD(), Env.VAR_DAE(), Env.emptyEnv);
then addAliasesToEnv(env,inTypes,rest::aliases,info);
end match;
end addAliasesToEnv;
Expand Down
2 changes: 1 addition & 1 deletion Compiler/Template/CodegenC.tpl
Expand Up @@ -8737,7 +8737,7 @@ template daeExpCall(Exp call, Context context, Text &preExp /*BUFP*/, Text &varD

case CALL(path=IDENT(name="print"), expLst={e1}) then
let var1 = daeExp(e1, context, &preExp, &varDecls)
if acceptMetaModelicaGrammar() then 'print(<%var1%>)' else 'puts(<%var1%>)'
if acceptMetaModelicaGrammar() then 'print(<%var1%>)' else 'fputs(<%var1%>,stdout)'

case CALL(path=IDENT(name="max"), attr=CALL_ATTR(ty = T_REAL(__)), expLst={e1,e2}) then
let var1 = daeExp(e1, context, &preExp, &varDecls)
Expand Down

0 comments on commit 0d881d0

Please sign in to comment.