﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
2800	Improve Expression traversal	Martin Sjölund	Martin Sjölund	"We need to improve expression traversal performance in a few steps.

Do not pass everything as a tuple. This causes stress on the GC. The functions should instead have the prototype:
{{{#!mo
partial function FuncExpType
  input DAE.Exp inExp;
  input Type_a inTypeA;
  output DAE.Exp outExp;
  output Type_a outA;
end FuncExpType;
}}}

We need to remove some duplicate code like traverseExpWithoutRelations. If traverseExp needs more functionality, pass it as an extra argument (keep traverseExp as it is; use intermediate functions instead).

If possible, add support for functions that do not modify the expressions or extra arguments, like:
{{{#!mo
partial function FuncExpType2
  input DAE.Exp inExp;
  input Type_a inTypeA;
  output DAE.Exp outExp;
end FuncExpType2;
}}}
or
{{{#!mo
partial function FuncExpType3
  input DAE.Exp inExp;
  input Type_a inTypeA;
  output DAE.Exp outExp;
end FuncExpType3;
}}}
or
{{{#!mo
partial function FuncExpType4
  input DAE.Exp inExp;
  output DAE.Exp outExp;
end FuncExpType4;
}}}
This can be done by passing additional arguments to the worker function."	defect	closed	high	1.16.0	Frontend	trunk	fixed		Adrian Pop leonardo Per Östlund
