Skip to content

Commit

Permalink
- Create external objects one by one and free the stack after each ob…
Browse files Browse the repository at this point in the history
…ject has been initialized

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@8847 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed May 6, 2011
1 parent b11b429 commit 640ba8c
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions Compiler/susan_codegen/SimCode/SimCodeC.tpl
Expand Up @@ -855,15 +855,20 @@ match extObjInfo
case EXTOBJINFO(__) then
let &funDecls = buffer "" /*BUFD*/
let &varDecls = buffer "" /*BUFD*/
let &preExp = buffer "" /*BUFD*/
let ctorCalls = (constructors |> (var, fnName, args) =>
let &preExp = buffer "" /*BUFD*/
let argsStr = (args |> arg =>
daeExternalCExp(arg, contextOther, &preExp /*BUFC*/, &varDecls /*BUFD*/)
;separator=", ")
let typesStr = (args |> arg => extType(typeof(arg),true,false) ; separator=", ")
let &funDecls += 'extern void* <%fnName%>(<%typesStr%>);<%\n%>'
/* Restore the memory state after each object has been initialized. Then we can
* initalize a really large number of external objects that play with strings :)
*/
<<
<%preExp%>
<%cref(var)%> = <%fnName%>(<%argsStr%>);
restore_memory_state(mem_state);
>>
;separator="\n")
<<
Expand All @@ -873,7 +878,8 @@ case EXTOBJINFO(__) then
}
void callExternalObjectConstructors(DATA* localData) {
<%varDecls%>
<%preExp%>
state mem_state;
mem_state = get_memory_state();
<%ctorCalls%>
<%aliases |> (var1, var2) => '<%cref(var1)%> = <%cref(var2)%>;' ;separator="\n"%>
}
Expand Down

0 comments on commit 640ba8c

Please sign in to comment.