Skip to content

Commit

Permalink
- Fixed extension of basic type in new instantiation.
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@17815 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
perost committed Oct 22, 2013
1 parent 61e7453 commit 2d5d6f8
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 13 deletions.
36 changes: 26 additions & 10 deletions Compiler/FrontEnd/NFEnv.mo
Expand Up @@ -912,23 +912,39 @@ public function isEqual
input Env inEnv2;
output Boolean outIsEqual;
algorithm
outIsEqual := matchcontinue(inEnv1, inEnv2)
outIsEqual := List.isEqualOnTrue(inEnv1, inEnv2, isFrameEqual);
end isEqual;

protected function isFrameEqual
input Frame inFrame1;
input Frame inFrame2;
output Boolean outIsEqual;
algorithm
outIsEqual := match(inFrame1, inFrame2)
local
String n1, n2;
Env rest1, rest2;
ScopeType st1, st2;

case (NFInstTypes.FRAME(name = SOME(n1)) :: _, NFInstTypes.FRAME(name = SOME(n2)) :: _)
equation
false = stringEq(n1, n2);
then
false;
case (NFInstTypes.FRAME(name = SOME(n1)),
NFInstTypes.FRAME(name = SOME(n2)))
then stringEq(n1, n2);

case ({}, {}) then true;
case (_ :: rest1, _ :: rest2) then isEqual(rest1, rest2);
case (NFInstTypes.FRAME(name = NONE(), scopeType = st1),
NFInstTypes.FRAME(name = NONE(), scopeType = st2))
then scopeTypeEqual(st1, st2);

end matchcontinue;
else false;
end match;
end isEqual;

protected function scopeTypeEqual
input ScopeType inScopeType1;
input ScopeType inScopeType2;
output Boolean outIsEqual;
algorithm
outIsEqual := valueEq(inScopeType1, inScopeType2);
end scopeTypeEqual;

public function isPrefix
"Checks if one environment is a prefix of another."
input Env inPrefixEnv;
Expand Down
14 changes: 11 additions & 3 deletions Compiler/FrontEnd/NFLookup.mo
Expand Up @@ -129,22 +129,30 @@ public function lookupBaseClassName
output Entry outEntry;
output Env outEnv;
algorithm
(outEntry, outEnv) := match(inName, inEnv, inInfo)
(outEntry, outEnv) := matchcontinue(inName, inEnv, inInfo)
local
Env env;
Entry entry;
String name;
LookupState state;

// Extending a builtin type.
case (Absyn.IDENT(name = name), _, _)
equation
(entry, env) = lookupBuiltinType(name, inEnv);
then
(entry, env);

// Normal baseclass.
case (_, _, _)
else
equation
(entry, env, state) = lookupName(inName, inEnv, STATE_BEGIN(), inInfo,
SOME(Error.LOOKUP_BASECLASS_ERROR));
validateEndState(state, STATE_CLASS(), inName, inInfo);
then
(entry, env);

end match;
end matchcontinue;
end lookupBaseClassName;

public function lookupVariableName
Expand Down

0 comments on commit 2d5d6f8

Please sign in to comment.