Skip to content

Commit

Permalink
Fixed additional bugs for get and setModifierValue (MC bug #592)
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@2383 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed May 15, 2006
1 parent ac72319 commit 0c13278
Showing 1 changed file with 48 additions and 4 deletions.
52 changes: 48 additions & 4 deletions Compiler/Interactive.mo
Expand Up @@ -5584,20 +5584,37 @@ algorithm
Absyn.ComponentItem comp;
case ({},_,_,_) then {};

case ((Absyn.COMPONENTITEM(component = Absyn.COMPONENT(name = id,arrayDim = dim,modification = SOME(Absyn.CLASSMOD(args,expopt))),condition = cond,comment = cmt) :: rest),varname,Absyn.CREF_IDENT("",{}),mod)
// remove modifier.
case ((Absyn.COMPONENTITEM(component = Absyn.COMPONENT(name = id,arrayDim = dim,modification = SOME(Absyn.CLASSMOD(args,expopt))),condition = cond,comment = cmt) :: rest),varname,Absyn.CREF_IDENT("",{}),mod)
equation
equality(varname = id);
optmod = createOptModificationFromEltargs(args,NONE);
then
(Absyn.COMPONENTITEM(Absyn.COMPONENT(id,dim,optmod),cond,cmt) :: rest);


// remove modifier.
case ((Absyn.COMPONENTITEM(component = Absyn.COMPONENT(name = id,arrayDim = dim,modification = NONE),condition = cond,comment = cmt) :: rest),varname,Absyn.CREF_IDENT("",{}),mod)
equation
equality(varname = id);
then
(Absyn.COMPONENTITEM(Absyn.COMPONENT(id,dim,NONE),cond,cmt) :: rest);

case ((Absyn.COMPONENTITEM(component = Absyn.COMPONENT(name = id,arrayDim = dim,modification = SOME(Absyn.CLASSMOD(args,expopt))),condition = cond,comment = cmt) :: rest),varname,submodpath,mod)
equation
equality(varname = id);
args_1 = setSubmodifierInElementargs(args, submodpath, mod);
optmod = createOptModificationFromEltargs(args_1,expopt);
then
(Absyn.COMPONENTITEM(Absyn.COMPONENT(id,dim,optmod),cond,cmt) :: rest);

case ((Absyn.COMPONENTITEM(component = Absyn.COMPONENT(name = id,arrayDim = dim,modification = NONE),condition = cond,comment = cmt) :: rest),varname,submod,Absyn.CLASSMOD({},NONE))
equation
equality(varname = id);
then
(Absyn.COMPONENTITEM(
Absyn.COMPONENT(id,dim,NONE),cond,cmt) :: rest);


case ((Absyn.COMPONENTITEM(component = Absyn.COMPONENT(name = id,arrayDim = dim,modification = NONE),condition = cond,comment = cmt) :: rest),varname,submod,mod)
equation
equality(varname = id);
Expand Down Expand Up @@ -5672,8 +5689,10 @@ algorithm
Absyn.ElementArg m;
case ({},cref,Absyn.CLASSMOD({},NONE)) then {}; // Empty modification.
case ({},cref,mod) then {
Absyn.MODIFICATION(false,Absyn.NON_EACH(),cref,SOME(mod),NONE)}; /* empty modification, remove MODIFICATION */
case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = Absyn.CREF_IDENT(name = name,subscripts = idx),comment = cmt) :: rest),Absyn.CREF_IDENT(name = submodident),(mod as Absyn.CLASSMOD(elementArgLst = {},expOption = NONE))) /* empty modification, remove MODIFICATION */
Absyn.MODIFICATION(false,Absyn.NON_EACH(),cref,SOME(mod),NONE)};

//Clear modification
case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = Absyn.CREF_IDENT(name = name,subscripts = idx),comment = cmt) :: rest),Absyn.CREF_IDENT(name = submodident),(mod as Absyn.CLASSMOD( {}, NONE)))
equation
equality(name = submodident);
then
Expand All @@ -5683,16 +5702,41 @@ algorithm
equality(name = submodident);
then
(Absyn.MODIFICATION(f,each_,Absyn.CREF_IDENT(name,idx),SOME(mod),cmt) :: rest);

// Clear modification
case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = (cr1 as Absyn.CREF_QUAL(name = _)),comment = cmt) :: rest),cr2,Absyn.CLASSMOD({},NONE))
equation
true = Absyn.crefEqual(cr1, cr2);
then
(rest);

case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = (cr1 as Absyn.CREF_QUAL(name = _)),comment = cmt) :: rest),cr2,mod)
equation
true = Absyn.crefEqual(cr1, cr2);
then
(Absyn.MODIFICATION(f,each_,cr1,SOME(mod),cmt) :: rest);

//Clear modification
case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = Absyn.CREF_QUAL(name = name1),comment = cmt) :: rest),Absyn.CREF_IDENT(name = name2,subscripts = idx),Absyn.CLASSMOD({},NONE))
equation
equality(name1 = name2);
then
(rest);

case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = Absyn.CREF_QUAL(name = name1),comment = cmt) :: rest),Absyn.CREF_IDENT(name = name2,subscripts = idx),mod)
equation
equality(name1 = name2);
then
(Absyn.MODIFICATION(f,each_,Absyn.CREF_IDENT(name2,idx),SOME(mod),cmt) :: rest);

// Clear modification
case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = (cr as Absyn.CREF_IDENT(name = name2)),modification = SOME(Absyn.CLASSMOD(args,NONE)),comment = cmt) :: rest),Absyn.CREF_QUAL(name = name1,componentRef = cr1),Absyn.CLASSMOD({},NONE))
equation
equality(name1 = name2);
{}= setSubmodifierInElementargs(args, cr1, Absyn.CLASSMOD({},NONE));
then
(Absyn.MODIFICATION(f,each_,cr,NONE,cmt) :: rest);

case ((Absyn.MODIFICATION(finalItem = f,each_ = each_,componentReg = (cr as Absyn.CREF_IDENT(name = name2)),modification = SOME(Absyn.CLASSMOD(args,exp)),comment = cmt) :: rest),Absyn.CREF_QUAL(name = name1,componentRef = cr1),mod)
equation
equality(name1 = name2);
Expand Down

0 comments on commit 0c13278

Please sign in to comment.