Skip to content

Commit

Permalink
- Re-enabled the check for functions defining all slots
Browse files Browse the repository at this point in the history
  - FunctionArg now stores the default expression in it so we can use it very fast


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@9988 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Oct 3, 2011
1 parent 8707c5b commit d402436
Show file tree
Hide file tree
Showing 15 changed files with 316 additions and 198 deletions.
6 changes: 3 additions & 3 deletions Compiler/BackEnd/Derive.mo
Expand Up @@ -966,8 +966,8 @@ algorithm
(falst1,_) = List.splitOnBoolList(falst,blst);
falst2 = listAppend(falst,falst1);
// compare with derivative function inputs
tlst = List.map(falst2,Util.tuple32);
dtlst = List.map(dfalst,Util.tuple32);
tlst = List.map(falst2,Util.tuple42);
dtlst = List.map(dfalst,Util.tuple42);
ret = List.isEqualOnTrue(tlst,dtlst,Types.equivtypes);
then
(ret,tlst);
Expand Down Expand Up @@ -1004,7 +1004,7 @@ algorithm
case (inFuncName,DAE.FUNCTION_DER_MAPPER(derivativeFunction=inDFuncName,derivativeOrder=derivativeOrder,conditionRefs=cr),(DAE.T_FUNCTION(funcArg=funcArg),_),expl,inVarsandFuncs)
equation
true = intEq(1,derivativeOrder);
tplst = List.map(funcArg,Util.tuple32);
tplst = List.map(funcArg,Util.tuple42);
bl = List.map(tplst,Types.isRealOrSubTypeReal);
bl1 = checkDerFunctionConds(bl,cr,expl,inVarsandFuncs);
then
Expand Down
2 changes: 1 addition & 1 deletion Compiler/BackEnd/PartFn.mo
Expand Up @@ -1167,7 +1167,7 @@ protected function isNotFunctionType
output Boolean outBoolean;
algorithm
outBoolean := matchcontinue(inFuncArg)
case((_,(DAE.T_FUNCTION(funcArg = _),_),_)) then false;
case((_,(DAE.T_FUNCTION(funcArg = _),_),_,_)) then false;
case(_) then true;
end matchcontinue;
end isNotFunctionType;
Expand Down
10 changes: 5 additions & 5 deletions Compiler/BackEnd/SimCode.mo
Expand Up @@ -1859,27 +1859,27 @@ algorithm
list<Variable> var_args;
list<DAE.Type> tys;

case ((name, tty as (DAE.T_FUNCTION(funcArg = args, funcResultType = (DAE.T_TUPLE(tys),_)), _),_))
case ((name, tty as (DAE.T_FUNCTION(funcArg = args, funcResultType = (DAE.T_TUPLE(tys),_)), _),_,_))
equation
var_args = List.map(args, typesSimFunctionArg);
etys = List.map(tys, Types.elabType);
then
FUNCTION_PTR(name, etys, var_args);

case ((name, tty as (DAE.T_FUNCTION(funcArg = args, funcResultType = (DAE.T_NORETCALL(),_)), _),_))
case ((name, tty as (DAE.T_FUNCTION(funcArg = args, funcResultType = (DAE.T_NORETCALL(),_)), _),_,_))
equation
var_args = List.map(args, typesSimFunctionArg);
then
FUNCTION_PTR(name, {}, var_args);

case ((name, tty as (DAE.T_FUNCTION(funcArg = args, funcResultType = res_ty), _),_))
case ((name, tty as (DAE.T_FUNCTION(funcArg = args, funcResultType = res_ty), _),_,_))
equation
expType = Types.elabType(res_ty);
var_args = List.map(args, typesSimFunctionArg);
then
FUNCTION_PTR(name, {expType}, var_args);

case ((name,tty,_))
case ((name,tty,_,_))
equation
expType = Types.elabType(tty);
cref_ = ComponentReference.makeCrefIdent(name, expType, {});
Expand All @@ -1904,7 +1904,7 @@ algorithm
Variable var;
case (DAE.VAR(componentRef = DAE.CREF_IDENT(ident=name),ty = daeType as (DAE.T_FUNCTION(funcArg=_),_)))
equation
var = typesSimFunctionArg((name,daeType,DAE.C_VAR()));
var = typesSimFunctionArg((name,daeType,DAE.C_VAR(),NONE()));
then var;

case (DAE.VAR(componentRef = id,
Expand Down
70 changes: 35 additions & 35 deletions Compiler/FrontEnd/Builtin.mo
Expand Up @@ -278,120 +278,120 @@ protected constant DAE.Var timeVar=DAE.TYPES_VAR("time",
protected constant DAE.Type stringIntInt2string=(
DAE.T_FUNCTION(
{
("x",DAE.T_STRING_DEFAULT,DAE.C_VAR()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR()),
("z",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())
("x",DAE.T_STRING_DEFAULT,DAE.C_VAR(),NONE()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE()),
("z",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())
},
DAE.T_STRING_DEFAULT,
DAE.FUNCTION_ATTRIBUTES_BUILTIN),
NONE());

protected constant DAE.Type real2real=(
DAE.T_FUNCTION({("x",DAE.T_REAL_DEFAULT,DAE.C_VAR())},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
DAE.T_FUNCTION({("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type realReal2real=(
DAE.T_FUNCTION(
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR()),("y",DAE.T_REAL_DEFAULT,DAE.C_VAR())},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),("y",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type int2int=(
DAE.T_FUNCTION({("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},
DAE.T_FUNCTION({("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},
DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type int2bool=(
DAE.T_FUNCTION({("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},
DAE.T_FUNCTION({("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},
DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type enumeration2int=(
DAE.T_FUNCTION({("x",(DAE.T_ENUMERATION(NONE(), Absyn.IDENT(""), {}, {}, {}),NONE()),DAE.C_VAR())},
DAE.T_FUNCTION({("x",(DAE.T_ENUMERATION(NONE(), Absyn.IDENT(""), {}, {}, {}),NONE()),DAE.C_VAR(),NONE())},
DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type intInt2int=(
DAE.T_FUNCTION(
{("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
{("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type intInt2bool=(
DAE.T_FUNCTION(
{("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
{("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type bool2bool=(
DAE.T_FUNCTION({("x",DAE.T_BOOL_DEFAULT,DAE.C_VAR())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
DAE.T_FUNCTION({("x",DAE.T_BOOL_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type real2bool=(
DAE.T_FUNCTION({("x",DAE.T_REAL_DEFAULT,DAE.C_VAR())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
DAE.T_FUNCTION({("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type realReal2bool=(
DAE.T_FUNCTION(
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR()),("y",DAE.T_REAL_DEFAULT,DAE.C_VAR())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),("y",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_BOOL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type realRealReal2Real=(
DAE.T_FUNCTION(
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR()),("y",DAE.T_REAL_DEFAULT,DAE.C_VAR()),("z",DAE.T_REAL_DEFAULT,DAE.C_VAR())},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),("y",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),("z",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type anyNonExpandableConnector2int=(
DAE.T_FUNCTION(
{
("x",
(DAE.T_ANYTYPE(SOME(ClassInf.CONNECTOR(Absyn.IDENT("$dummy$"),false))),NONE()),DAE.C_VAR())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
(DAE.T_ANYTYPE(SOME(ClassInf.CONNECTOR(Absyn.IDENT("$dummy$"),false))),NONE()),DAE.C_VAR(),NONE())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type anyExpandableConnector2int=(
DAE.T_FUNCTION(
{
("x",
(DAE.T_ANYTYPE(SOME(ClassInf.CONNECTOR(Absyn.IDENT("$dummy$"),true))),NONE()),DAE.C_VAR())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
(DAE.T_ANYTYPE(SOME(ClassInf.CONNECTOR(Absyn.IDENT("$dummy$"),true))),NONE()),DAE.C_VAR(),NONE())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type vectorVector2int=(
DAE.T_FUNCTION(
{
("x",
T_INT_ARRAY_1_DEFAULT,DAE.C_VAR()),
T_INT_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE()),
("y",
T_INT_ARRAY_1_DEFAULT,DAE.C_VAR())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
T_INT_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type vectorVector2real=(
DAE.T_FUNCTION({("x", T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR()), ("y", T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR())},
DAE.T_FUNCTION({("x", T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE()), ("y", T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE())},
DAE.T_REAL_DEFAULT, DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type intInt2vectorreal=(
DAE.T_FUNCTION(
{("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},
{("x",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE()),
("y",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},
T_REAL_ARRAY_1_DEFAULT, DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type realRealInt2vectorreal=(
DAE.T_FUNCTION(
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR()),
("y",DAE.T_REAL_DEFAULT,DAE.C_VAR()),
("n",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},
{("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),
("y",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),
("n",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},
T_REAL_ARRAY_DEFAULT, DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type array2real=(
DAE.T_FUNCTION(
{
("x",
T_INT_ARRAY_1_DEFAULT,DAE.C_VAR())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE()) "T_ARRAY is appearently not constant. To bad!" ;
T_INT_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE()) "T_ARRAY is appearently not constant. To bad!" ;

protected constant DAE.Type int2boxed = (
DAE.T_FUNCTION({("index",DAE.T_INTEGER_DEFAULT,DAE.C_VAR())},DAE.T_BOXED_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
DAE.T_FUNCTION({("index",DAE.T_INTEGER_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_BOXED_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type string2string=(
DAE.T_FUNCTION({("x",DAE.T_STRING_DEFAULT,DAE.C_VAR())},DAE.T_STRING_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
DAE.T_FUNCTION({("x",DAE.T_STRING_DEFAULT,DAE.C_VAR(),NONE())},DAE.T_STRING_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

protected constant DAE.Type array1dimrealarray1dimrealarray1dimreal2array1dimreal=(
DAE.T_FUNCTION(
{
("x",T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR()),
("y",T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR()),
("z",T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR())
("x",T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE()),
("y",T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE()),
("z",T_REAL_ARRAY_1_DEFAULT,DAE.C_VAR(),NONE())
},
T_REAL_ARRAY_1_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());
protected constant DAE.Type realrealreal2real=(
DAE.T_FUNCTION(
{
("x",DAE.T_REAL_DEFAULT,DAE.C_VAR()),
("y",DAE.T_REAL_DEFAULT,DAE.C_VAR()),
("z",DAE.T_REAL_DEFAULT,DAE.C_VAR())
("x",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),
("y",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE()),
("z",DAE.T_REAL_DEFAULT,DAE.C_VAR(),NONE())
},DAE.T_REAL_DEFAULT,DAE.FUNCTION_ATTRIBUTES_BUILTIN),NONE());

public function variableIsBuiltin "Returns true if cref is a builtin variable.
Expand Down
2 changes: 1 addition & 1 deletion Compiler/FrontEnd/DAE.mo
Expand Up @@ -866,7 +866,7 @@ public uniontype DimensionBinding
end DimensionBinding;

public
type FuncArg = tuple<Ident, Type, Const> "- Function Argument" ;
type FuncArg = tuple<Ident, Type, Const, Option<Exp>> "Function Argument; name, type, variability and default binding (should probably be constant)" ;

public
uniontype Const "The degree of constantness of an expression is determined by the Const
Expand Down
15 changes: 15 additions & 0 deletions Compiler/FrontEnd/DAEUtil.mo
Expand Up @@ -5668,4 +5668,19 @@ algorithm
DAE.VAR(componentRef=DAE.CREF_IDENT(ident=name)) := var;
end varName;

public function bindingExp
"help function to instBinding, returns the expression of a binding"
input DAE.Binding bind;
output Option<DAE.Exp> exp;
algorithm
exp := match(bind)
local DAE.Exp e; Values.Value v;
case(DAE.UNBOUND()) then NONE();
case(DAE.EQBOUND(exp=e)) then SOME(e);
case(DAE.VALBOUND(valBound=v)) equation
e = ValuesUtil.valueExp(v);
then SOME(e);
end match;
end bindingExp;

end DAEUtil;
17 changes: 1 addition & 16 deletions Compiler/FrontEnd/Inst.mo
Expand Up @@ -13027,7 +13027,7 @@ algorithm
equation
true = stringEq(name, bind_name);
then
bindingExp(binding);
DAEUtil.bindingExp(binding);

case (mod,_::varLst,etype,index_list,bind_name,useConstValue)
then instBinding(mod,varLst,etype,index_list,bind_name,useConstValue);
Expand All @@ -13037,21 +13037,6 @@ algorithm
end matchcontinue;
end instBinding;

protected function bindingExp
"help function to instBinding, returns the expression of a binding"
input DAE.Binding bind;
output Option<DAE.Exp> exp;
algorithm
exp := match(bind)
local DAE.Exp e; Values.Value v;
case(DAE.UNBOUND()) then NONE();
case(DAE.EQBOUND(exp=e)) then SOME(e);
case(DAE.VALBOUND(valBound=v)) equation
e = ValuesUtil.valueExp(v);
then SOME(e);
end match;
end bindingExp;

protected function instBinding2
"function: instBinding2
This function investigates a modification and extracts the <...>
Expand Down
8 changes: 4 additions & 4 deletions Compiler/FrontEnd/Lookup.mo
Expand Up @@ -128,14 +128,14 @@ algorithm
// Special handling for Connections.isRoot
case (cache,env,Absyn.QUALIFIED("Connections", Absyn.IDENT("isRoot")),msg)
equation
t = (DAE.T_FUNCTION({("x", (DAE.T_ANYTYPE(NONE()),NONE()),DAE.C_VAR())}, DAE.T_BOOL_DEFAULT, DAE.FUNCTION_ATTRIBUTES_DEFAULT),NONE());
t = (DAE.T_FUNCTION({("x", (DAE.T_ANYTYPE(NONE()),NONE()),DAE.C_VAR(),NONE())}, DAE.T_BOOL_DEFAULT, DAE.FUNCTION_ATTRIBUTES_DEFAULT),NONE());
then
(cache, t, env);

// Special handling for MultiBody 3.x rooted() operator
case (cache,env,Absyn.IDENT("rooted"),msg)
equation
t = (DAE.T_FUNCTION({("x", (DAE.T_ANYTYPE(NONE()),NONE()),DAE.C_VAR())}, DAE.T_BOOL_DEFAULT, DAE.FUNCTION_ATTRIBUTES_DEFAULT),NONE());
t = (DAE.T_FUNCTION({("x", (DAE.T_ANYTYPE(NONE()),NONE()),DAE.C_VAR(),NONE())}, DAE.T_BOOL_DEFAULT, DAE.FUNCTION_ATTRIBUTES_DEFAULT),NONE());
then
(cache, t, env);

Expand Down Expand Up @@ -1701,9 +1701,9 @@ algorithm
local list<Env.Frame> env;
/* function_name cardinality */
case (env,"cardinality")
then {(DAE.T_FUNCTION({("x",(DAE.T_COMPLEX(ClassInf.CONNECTOR(Absyn.IDENT("$$"),false),{},NONE(),NONE()),NONE()),DAE.C_VAR())},
then {(DAE.T_FUNCTION({("x",(DAE.T_COMPLEX(ClassInf.CONNECTOR(Absyn.IDENT("$$"),false),{},NONE(),NONE()),NONE()),DAE.C_VAR(),NONE())},
DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_DEFAULT),NONE()),
(DAE.T_FUNCTION({("x",(DAE.T_COMPLEX(ClassInf.CONNECTOR(Absyn.IDENT("$$"),true),{},NONE(),NONE()),NONE()),DAE.C_VAR())},
(DAE.T_FUNCTION({("x",(DAE.T_COMPLEX(ClassInf.CONNECTOR(Absyn.IDENT("$$"),true),{},NONE(),NONE()),NONE()),DAE.C_VAR(),NONE())},
DAE.T_INTEGER_DEFAULT,DAE.FUNCTION_ATTRIBUTES_DEFAULT),NONE())};

end match;
Expand Down
4 changes: 2 additions & 2 deletions Compiler/FrontEnd/MetaUtil.mo
Expand Up @@ -657,8 +657,8 @@ algorithm
then (names,types);
case ((DAE.T_FUNCTION(fargs,(DAE.T_COMPLEX(complexClassType = ClassInf.RECORD(_)),_),_),_))
equation
names = List.map(fargs, Util.tuple31);
types = List.map(fargs, Util.tuple32);
names = List.map(fargs, Util.tuple41);
types = List.map(fargs, Util.tuple42);
then (names,types);
end matchcontinue;
end constructorCallTypeToNamesAndTypes;
Expand Down

0 comments on commit d402436

Please sign in to comment.