From f35a0e242d35adcd0cbaf63dee6908b0d5f60b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=96stlund?= Date: Wed, 13 Apr 2016 11:08:58 +0200 Subject: [PATCH] Clean up DAEUtil.splitElements. - Clean up DAEUtil.splitElements. - Move DAEDump.dumpDAEList -> DAEUtil.splitComponent --- Compiler/FrontEnd/DAEDump.mo | 39 +--- Compiler/FrontEnd/DAEUtil.mo | 334 ++++++++++++----------------------- 2 files changed, 115 insertions(+), 258 deletions(-) diff --git a/Compiler/FrontEnd/DAEDump.mo b/Compiler/FrontEnd/DAEDump.mo index 794f3e05132..9829ae6fe27 100644 --- a/Compiler/FrontEnd/DAEDump.mo +++ b/Compiler/FrontEnd/DAEDump.mo @@ -2530,7 +2530,7 @@ protected algorithm DAE.DAE(elementLst = daelist) := inDAElist; funList := dumpFunctionList(functionTree); - fixedDae := List.map(daelist, dumpDAEList); + fixedDae := List.map(daelist, DAEUtil.splitComponent); outString := Tpl.tplString2(DAEDumpTpl.dumpDAE, fixedDae, funList); end dumpStr; @@ -2621,43 +2621,6 @@ algorithm end match; end dumpStream; -public function dumpDAEList " returns split DAE elements(Mainly important for template based DAE unparser) : - variables, initial equations, initial algorithms, - equations, algorithms, constraints and external objects" - input DAE.Element inElement; - output compWithSplitElements outCompWSplElem; -algorithm - (outCompWSplElem) := match (inElement) - local - String n; - list l; - Option c; - - list v; - list ie; - list ia; - list e; - list a; - list co; - list o; - list ca; - list sm; - splitElements loc_splelem; - - compWithSplitElements compWSplElem; - - - case (DAE.COMP(ident = n,dAElist = l,comment = c)) - equation - (v,ie,ia,e,a,ca,co,o,sm) = DAEUtil.splitElements(l); - loc_splelem = SPLIT_ELEMENTS(v,ie,ia,e,a,ca,co,o,sm); - compWSplElem = COMP_WITH_SPLIT(n, loc_splelem, c); - then - (compWSplElem); - - end match; -end dumpDAEList; - public function dumpFunctionList " returns sorted functions and record constructors in alphabetical order (mainly important for template based DAE unparser)." input DAE.FunctionTree functionTree; diff --git a/Compiler/FrontEnd/DAEUtil.mo b/Compiler/FrontEnd/DAEUtil.mo index 57385d7c1ca..e8b90b3d906 100644 --- a/Compiler/FrontEnd/DAEUtil.mo +++ b/Compiler/FrontEnd/DAEUtil.mo @@ -4992,23 +4992,121 @@ algorithm end joinDaeLst; public function splitElements -"@author: adrpo - This function will split DAE elements into: - variables, initial equations, initial algorithms, - equations, algorithms, constraints and external objects" - input list inElements; - output list v; - output list ie; - output list ia; - output list e; - output list a; - output list ca; - output list co; - output list o; - output list sm; -algorithm - (v,ie,ia,e,a,ca,co,o,sm) := splitElements_dispatch(inElements,{},{},{},{},{},{},{},{},{}); + "This functions splits DAE elements into multiple groups." + input list elements; + output list variables = {}; + output list initialEquations = {}; + output list initialAlgorithms = {}; + output list equations = {}; + output list algorithms = {}; + output list classAttributes = {}; + output list constraints = {}; + output list externalObjects = {}; + output list stateMachineComps = {}; +protected + DAEDump.compWithSplitElements split_comp; +algorithm + for e in elements loop + _ := match e + case DAE.VAR() + algorithm variables := e :: variables; then (); + case DAE.INITIALEQUATION() + algorithm initialEquations := e :: initialEquations; then (); + case DAE.INITIAL_ARRAY_EQUATION() + algorithm initialEquations := e :: initialEquations; then (); + case DAE.INITIAL_COMPLEX_EQUATION() + algorithm initialEquations := e :: initialEquations; then (); + case DAE.INITIALDEFINE() + algorithm initialEquations := e :: initialEquations; then (); + case DAE.INITIAL_IF_EQUATION() + algorithm initialEquations := e :: initialEquations; then (); + case DAE.EQUATION() + algorithm equations := e :: equations; then (); + case DAE.EQUEQUATION() + algorithm equations := e :: equations; then (); + case DAE.ARRAY_EQUATION() + algorithm equations := e :: equations; then (); + case DAE.COMPLEX_EQUATION() + algorithm equations := e :: equations; then (); + case DAE.DEFINE() + algorithm equations := e :: equations; then (); + case DAE.ASSERT() + algorithm equations := e :: equations; then (); + case DAE.IF_EQUATION() + algorithm equations := e :: equations; then (); + case DAE.WHEN_EQUATION() + algorithm equations := e :: equations; then (); + case DAE.REINIT() + algorithm equations := e :: equations; then (); + case DAE.NORETCALL() + algorithm equations := e :: equations; then (); + case DAE.INITIAL_NORETCALL() + algorithm initialEquations := e :: initialEquations; then (); + case DAE.INITIALALGORITHM() + algorithm initialAlgorithms := e :: initialAlgorithms; then (); + case DAE.ALGORITHM() + algorithm algorithms := e :: algorithms; then (); + case DAE.CONSTRAINT() + algorithm constraints := e :: constraints; then (); + case DAE.CLASS_ATTRIBUTES() + algorithm classAttributes := e :: classAttributes; then (); + case DAE.EXTOBJECTCLASS() + algorithm externalObjects := e :: externalObjects; then (); + case DAE.COMP() + algorithm variables := listAppend(e.dAElist, variables); then (); + case DAE.FLAT_SM() + algorithm + split_comp := splitComponent(DAE.COMP(e.ident, e.dAElist, + DAE.emptyElementSource, SOME(SCode.COMMENT(NONE(), SOME("stateMachine"))))); + stateMachineComps := split_comp :: stateMachineComps; + then + (); + case DAE.SM_COMP() + algorithm + split_comp := splitComponent(DAE.COMP(ComponentReference.crefStr(e.componentRef), + e.dAElist, DAE.emptyElementSource, SOME(SCode.COMMENT(NONE(), SOME("state"))))); + stateMachineComps := split_comp :: stateMachineComps; + then + (); + else + algorithm + Error.addInternalError("DAEUtil.splitElements got unknown element.", Absyn.dummyInfo); + then + fail(); + end match; + end for; + + variables := listReverse(variables); + initialEquations := listReverse(initialEquations); + initialAlgorithms := listReverse(initialAlgorithms); + equations := listReverse(equations); + algorithms := listReverse(algorithms); + classAttributes := listReverse(classAttributes); + constraints := listReverse(constraints); + externalObjects := listReverse(externalObjects); + stateMachineComps := listReverse(stateMachineComps); end splitElements; + +public function splitComponent + "Transforms a DAE.COMP to a DAEDump.COMP_WITH_SPLIT." + input DAE.Element component; + output DAEDump.compWithSplitElements splitComponent; +protected + list v, ie, ia, e, a, co, o, ca; + list sm; +protected + DAEDump.splitElements split_el; +algorithm + splitComponent := match component + case DAE.COMP() + algorithm + (v, ie, ia, e, a, co, o, ca, sm) := splitElements(component.dAElist); + split_el := DAEDump.SPLIT_ELEMENTS(v, ie, ia, e, a, co, o, ca, sm); + then + DAEDump.COMP_WITH_SPLIT(component.ident, split_el, component.comment); + end match; +end splitComponent; + protected function isIfEquation "Succeeds if Element is an if-equation. " input DAE.Element inElement; @@ -5020,210 +5118,6 @@ algorithm end match; end isIfEquation; -public function splitElements_dispatch -"@author: adrpo - This function will split DAE elements into: - variables, initial equations, initial algorithms, - equations, algorithms, constraints, external objects and state machines" - input list inElements; - input list in_v_acc; // variables - input list in_ie_acc; // initial equations - input list in_ia_acc; // initial algorithms - input list in_e_acc; // equations - input list in_a_acc; // algorithms - input list in_ca_acc; // class Attribute - input list in_co_acc; // constraints - input list in_o_acc; - input list in_sm_acc; // state machine components - output list v; - output list ie; - output list ia; - output list e; - output list a; - output list ca; - output list co; - output list o; - output list sm; -algorithm - (v,ie,ia,e,a,ca,co,o,sm) := match(inElements,in_v_acc,in_ie_acc,in_ia_acc,in_e_acc,in_a_acc,in_ca_acc,in_co_acc,in_o_acc,in_sm_acc) - local - DAE.Element el; - list rest, ell, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc; - list sm_acc,sm2; - list v2,ie2,ia2,e2,a2,ca2,co2,o2; - DAEDump.splitElements loc_splelem; - DAEDump.compWithSplitElements compWSplElem; - DAE.ComponentRef cref; - DAE.Ident n; - - // handle empty case - case ({}, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - then (listReverse(v_acc),listReverse(ie_acc),listReverse(ia_acc),listReverse(e_acc),listReverse(a_acc),listReverse(ca_acc),listReverse(co_acc),listReverse(o_acc),listReverse(sm_acc)); - - // variables - case ((el as DAE.VAR())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, el::v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // initial equations - case ((el as DAE.INITIALEQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,el::ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.INITIAL_ARRAY_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,el::ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.INITIAL_COMPLEX_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,el::ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.INITIALDEFINE())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,el::ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.INITIAL_IF_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,el::ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // equations - case ((el as DAE.EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.EQUEQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.ARRAY_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.COMPLEX_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.DEFINE())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.ASSERT())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.IF_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.WHEN_EQUATION())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.REINIT())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.NORETCALL())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,el::e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - case ((el as DAE.INITIAL_NORETCALL())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,el::ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // initial algorithms - case ((el as DAE.INITIALALGORITHM())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,el::ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // algorithms - case ((el as DAE.ALGORITHM())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,e_acc,el::a_acc,ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // constraints - case ((el as DAE.CONSTRAINT())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,el::co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // ClassAttributes - case ((el as DAE.CLASS_ATTRIBUTES())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,e_acc,a_acc,el::ca_acc,co_acc,o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - // external objects - case ((el as DAE.EXTOBJECTCLASS())::rest,v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) = splitElements_dispatch(rest, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,el::o_acc,sm_acc); - then - (v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc); - - case ((DAE.COMP(dAElist = ell))::rest, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - v_acc = listAppend(ell, v_acc); - (v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,sm_acc) = - splitElements_dispatch(rest, v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,sm_acc); - then - (v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,sm_acc); - - // state machine - case ((DAE.FLAT_SM(ident = n,dAElist = ell))::rest, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - (v2,ie2,ia2,e2,a2,ca2,co2,o2,sm2) = DAEUtil.splitElements(ell); - loc_splelem = DAEDump.SPLIT_ELEMENTS(v2,ie2,ia2,e2,a2,ca2,co2,o2,sm2); - /* Hack: Encode FLAT_SM kind into comment ("stateMachine") */ - compWSplElem = DAEDump.COMP_WITH_SPLIT(n, loc_splelem, SOME(SCode.COMMENT(NONE(),SOME("stateMachine")))); - - (v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,sm_acc) = - splitElements_dispatch(rest, v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,compWSplElem::sm_acc); - then - (v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc, sm_acc); - - // state machine components - case ((DAE.SM_COMP(componentRef = cref,dAElist = ell))::rest, v_acc,ie_acc,ia_acc,e_acc,a_acc,ca_acc,co_acc,o_acc,sm_acc) - equation - n = ComponentReference.crefStr(cref); - (v2,ie2,ia2,e2,a2,ca2,co2,o2,sm2) = DAEUtil.splitElements(ell); - loc_splelem = DAEDump.SPLIT_ELEMENTS(v2,ie2,ia2,e2,a2,ca2,co2,o2,sm2); - /* Hack: Encode SM_COMP kind into comment ("state") */ - compWSplElem = DAEDump.COMP_WITH_SPLIT(n, loc_splelem, SOME(SCode.COMMENT(NONE(),SOME("state")))); - - (v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,sm_acc) = - splitElements_dispatch(rest, v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc,compWSplElem::sm_acc); - then - (v_acc, ie_acc, ia_acc, e_acc, a_acc,ca_acc,co_acc, o_acc, sm_acc); - - end match; -end splitElements_dispatch; - public function collectLocalDecls "Used to traverse expressions and collect all local declarations" input DAE.Exp e;