Skip to content

Commit

Permalink
[NF] Emit error when scalarizeVariable fails.
Browse files Browse the repository at this point in the history
  • Loading branch information
perost committed Jan 21, 2020
1 parent 6fa1e68 commit 441a17b
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 28 deletions.
10 changes: 9 additions & 1 deletion OMCompiler/Compiler/NFFrontEnd/NFBinding.mo
Expand Up @@ -359,7 +359,15 @@ public
input Binding binding;
output Type ty;
algorithm
TYPED_BINDING(bindingType = ty) := binding;
ty := match binding
case UNBOUND() then Type.UNKNOWN();
case RAW_BINDING() then Type.UNKNOWN();
case UNTYPED_BINDING() then Type.UNKNOWN();
case TYPED_BINDING() then binding.bindingType;
case FLAT_BINDING() then Expression.typeOf(binding.bindingExp);
case CEVAL_BINDING() then Expression.typeOf(binding.bindingExp);
case INVALID_BINDING() then getType(binding.binding);
end match;
end getType;

function isEach
Expand Down
3 changes: 2 additions & 1 deletion OMCompiler/Compiler/NFFrontEnd/NFFlatModel.mo
Expand Up @@ -53,6 +53,7 @@ public

function toString
input FlatModel flatModel;
input Boolean printBindingTypes = false;
output String str;
protected
IOStream.IOStream s;
Expand All @@ -62,7 +63,7 @@ public
s := IOStream.append(s, "class " + flatModel.name + "\n");

for v in flatModel.variables loop
s := Variable.toStream(v, " ", s);
s := Variable.toStream(v, " ", printBindingTypes, s);
s := IOStream.append(s, ";\n");
end for;

Expand Down
55 changes: 30 additions & 25 deletions OMCompiler/Compiler/NFFrontEnd/NFScalarize.mo
Expand Up @@ -102,32 +102,37 @@ protected
Variability bind_var;
algorithm
if Type.isArray(var.ty) then
Variable.VARIABLE(name, ty, binding, vis, attr, ty_attr, cmt, info) := var;
crefs := ComponentRef.scalarize(name);

if listEmpty(crefs) then
return;
end if;

ty := Type.arrayElementType(ty);
(ty_attr_names, ty_attr_iters) := scalarizeTypeAttributes(ty_attr);

if Binding.isBound(binding) then
binding_iter := ExpressionIterator.fromExp(expandComplexCref(Binding.getTypedExp(binding)));
bind_var := Binding.variability(binding);

for cr in crefs loop
(binding_iter, exp) := ExpressionIterator.next(binding_iter);
binding := Binding.FLAT_BINDING(exp, bind_var);
ty_attr := nextTypeAttributes(ty_attr_names, ty_attr_iters);
vars := Variable.VARIABLE(cr, ty, binding, vis, attr, ty_attr, cmt, info) :: vars;
end for;
try
Variable.VARIABLE(name, ty, binding, vis, attr, ty_attr, cmt, info) := var;
crefs := ComponentRef.scalarize(name);

if listEmpty(crefs) then
return;
end if;

ty := Type.arrayElementType(ty);
(ty_attr_names, ty_attr_iters) := scalarizeTypeAttributes(ty_attr);

if Binding.isBound(binding) then
binding_iter := ExpressionIterator.fromExp(expandComplexCref(Binding.getTypedExp(binding)));
bind_var := Binding.variability(binding);

for cr in crefs loop
(binding_iter, exp) := ExpressionIterator.next(binding_iter);
binding := Binding.FLAT_BINDING(exp, bind_var);
ty_attr := nextTypeAttributes(ty_attr_names, ty_attr_iters);
vars := Variable.VARIABLE(cr, ty, binding, vis, attr, ty_attr, cmt, info) :: vars;
end for;
else
for cr in crefs loop
ty_attr := nextTypeAttributes(ty_attr_names, ty_attr_iters);
vars := Variable.VARIABLE(cr, ty, binding, vis, attr, ty_attr, cmt, info) :: vars;
end for;
end if;
else
for cr in crefs loop
ty_attr := nextTypeAttributes(ty_attr_names, ty_attr_iters);
vars := Variable.VARIABLE(cr, ty, binding, vis, attr, ty_attr, cmt, info) :: vars;
end for;
end if;
Error.assertion(false, getInstanceName() + " failed on " +
Variable.toString(var, printBindingType = true), var.info);
end try;
else
var.binding := Binding.mapExp(var.binding, expandComplexCref_traverser);
vars := var :: vars;
Expand Down
11 changes: 10 additions & 1 deletion OMCompiler/Compiler/NFFrontEnd/NFVariable.mo
Expand Up @@ -130,19 +130,21 @@ public
function toString
input Variable var;
input String indent = "";
input Boolean printBindingType = false;
output String str;
protected
IOStream.IOStream s;
algorithm
s := IOStream.create(getInstanceName(), IOStream.IOStreamType.LIST());
s := toStream(var, indent, s);
s := toStream(var, indent, printBindingType, s);
str := IOStream.string(s);
IOStream.delete(s);
end toString;

function toStream
input Variable var;
input String indent = "";
input Boolean printBindingType = false;
input output IOStream.IOStream s;
protected
Boolean first;
Expand Down Expand Up @@ -186,6 +188,13 @@ public

if Binding.isBound(var.binding) then
s := IOStream.append(s, " = ");

if printBindingType then
s := IOStream.append(s, "(");
s := IOStream.append(s, Type.toString(Binding.getType(var.binding)));
s := IOStream.append(s, ") ");
end if;

s := IOStream.append(s, Binding.toString(var.binding));
end if;
end toStream;
Expand Down

0 comments on commit 441a17b

Please sign in to comment.