Skip to content
This repository has been archived by the owner on May 18, 2019. It is now read-only.

Commit

Permalink
[NF] Allow invalid bindings on deleted components.
Browse files Browse the repository at this point in the history
  • Loading branch information
perost authored and OpenModelica-Hudson committed Oct 25, 2018
1 parent 7a86b4c commit 8a234f0
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 15 deletions.
13 changes: 13 additions & 0 deletions Compiler/NFFrontEnd/NFBinding.mo
Expand Up @@ -37,6 +37,7 @@ public
import SCode;
import Type = NFType;
import NFPrefixes.Variability;
import Error;

protected
import Dump;
Expand Down Expand Up @@ -94,6 +95,10 @@ uniontype Binding
list<InstNode> parents;
end CEVAL_BINDING;

record INVALID_BINDING
Binding binding;
list<Error.TotalMessage> errors;
end INVALID_BINDING;

public
function fromAbsyn
Expand Down Expand Up @@ -449,6 +454,9 @@ public
case RAW_BINDING() then prefix + Dump.printExpStr(binding.bindingExp);
case UNTYPED_BINDING() then prefix + Expression.toString(binding.bindingExp);
case TYPED_BINDING() then prefix + Expression.toString(binding.bindingExp);
case FLAT_BINDING() then prefix + Expression.toString(binding.bindingExp);
case CEVAL_BINDING() then prefix + Expression.toString(binding.bindingExp);
case INVALID_BINDING() then toString(binding.binding, prefix);
end match;
end toString;

Expand Down Expand Up @@ -483,6 +491,11 @@ public
case TYPED_BINDING() then makeDAEBinding(binding.bindingExp, binding.variability);
case FLAT_BINDING() then makeDAEBinding(binding.bindingExp, binding.variability);
case CEVAL_BINDING() then DAE.UNBOUND();
case INVALID_BINDING()
algorithm
Error.addTotalMessages(binding.errors);
then
fail();
else
algorithm
Error.assertion(false, getInstanceName() + " got untyped binding", sourceInfo());
Expand Down
6 changes: 6 additions & 0 deletions Compiler/NFFrontEnd/NFFlatten.mo
Expand Up @@ -796,6 +796,12 @@ algorithm
// evaluation and no longer needed after flattening.
case Binding.CEVAL_BINDING() then NFBinding.EMPTY_BINDING;

case Binding.INVALID_BINDING()
algorithm
Error.addTotalMessages(binding.errors);
then
fail();

else
algorithm
Error.assertion(false, getInstanceName() + " got untyped binding.", sourceInfo());
Expand Down
42 changes: 27 additions & 15 deletions Compiler/NFFrontEnd/NFTyping.mo
Expand Up @@ -752,21 +752,33 @@ algorithm
case Component.TYPED_COMPONENT(binding = Binding.UNTYPED_BINDING())
algorithm
name := InstNode.name(component);
checkBindingEach(c.binding);
binding := typeBinding(c.binding, intBitOr(origin, ExpOrigin.BINDING));

binding := TypeCheck.matchBinding(binding, c.ty, name, node);
comp_var := Component.variability(c);
comp_eff_var := Prefixes.effectiveVariability(comp_var);
bind_var := Prefixes.effectiveVariability(Binding.variability(binding));

if bind_var > comp_eff_var and intBitAnd(origin, ExpOrigin.FUNCTION) == 0 then
Error.addSourceMessage(Error.HIGHER_VARIABILITY_BINDING, {
name, Prefixes.variabilityString(comp_eff_var),
"'" + Binding.toString(c.binding) + "'", Prefixes.variabilityString(bind_var)},
Binding.getInfo(binding));
fail();
end if;
binding := c.binding;

ErrorExt.setCheckpoint(getInstanceName());
try
checkBindingEach(c.binding);
binding := typeBinding(binding, intBitOr(origin, ExpOrigin.BINDING));

binding := TypeCheck.matchBinding(binding, c.ty, name, node);
comp_var := Component.variability(c);
comp_eff_var := Prefixes.effectiveVariability(comp_var);
bind_var := Prefixes.effectiveVariability(Binding.variability(binding));

if bind_var > comp_eff_var and intBitAnd(origin, ExpOrigin.FUNCTION) == 0 then
Error.addSourceMessage(Error.HIGHER_VARIABILITY_BINDING, {
name, Prefixes.variabilityString(comp_eff_var),
"'" + Binding.toString(c.binding) + "'", Prefixes.variabilityString(bind_var)},
Binding.getInfo(binding));
fail();
end if;
else
if Binding.isBound(c.condition) then
binding := Binding.INVALID_BINDING(binding, ErrorExt.getMessages());
else
fail();
end if;
end try;
ErrorExt.delCheckpoint(getInstanceName());

c.binding := binding;

Expand Down

0 comments on commit 8a234f0

Please sign in to comment.