Skip to content

Commit e4d39c3

Browse files
committed
- Fixes FMIImport on the bootstrapped compiler
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@14140 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 5eb3d3d commit e4d39c3

File tree

4 files changed

+19
-16
lines changed

4 files changed

+19
-16
lines changed

Compiler/Script/CevalScript.mo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,7 +1505,7 @@ algorithm
15051505
true = System.regularFileExists(filename);
15061506
workdir = Util.if_(System.directoryExists(workdir), workdir, System.pwd());
15071507
/* Initialize FMI objects */
1508-
(b, fmiContext, fmiInstance, fmiInfo, fmiExperimentAnnotation, fmiModelVariablesInstance, fmiModelVariablesList) = FMIExt.initializeFMIImport(filename, workdir, fmiLogLevel);
1508+
(b, SOME(fmiContext), SOME(fmiInstance), fmiInfo, fmiExperimentAnnotation, SOME(fmiModelVariablesInstance), fmiModelVariablesList) = FMIExt.initializeFMIImport(filename, workdir, fmiLogLevel);
15091509
true = b; /* if something goes wrong while initializing */
15101510
fmiModelVariablesList1 = listReverse(fmiModelVariablesList);
15111511
s1 = System.tolower(System.platform());
@@ -1518,7 +1518,7 @@ algorithm
15181518
filename_1 = Util.if_(b1,stringAppendList({workdir,pd,str1,"_",str2,"_FMU.mo"}),stringAppendList({str1,"_",str2,"_FMU.mo"}));
15191519
System.writeFile(outputFile, str);
15201520
/* Release FMI objects */
1521-
FMIExt.releaseFMIImport(fmiModelVariablesInstance, fmiInstance, fmiContext);
1521+
FMIExt.releaseFMIImport(SOME(fmiModelVariablesInstance), SOME(fmiInstance), SOME(fmiContext));
15221522
then
15231523
(cache,Values.STRING(filename_1),st);
15241524

Compiler/Util/FMIExt.mo

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,20 @@ public function initializeFMIImport
4040
input String inWorkingDirectory;
4141
input Integer inFMILogLevel;
4242
output Boolean result;
43-
output Integer outFMIContext;
44-
output Integer outFMIInstance;
43+
output Option<Integer> outFMIContext "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
44+
output Option<Integer> outFMIInstance "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
4545
output FMI.Info outFMIInfo;
4646
output FMI.ExperimentAnnotation outExperimentAnnotation;
47-
output Integer outModelVariablesInstance;
47+
output Option<Integer> outModelVariablesInstance "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
4848
output list<FMI.ModelVariables> outModelVariablesList;
4949
external "C" result=FMIImpl__initializeFMIImport(inFileName, inWorkingDirectory, inFMILogLevel, outFMIContext, outFMIInstance, outFMIInfo, outExperimentAnnotation,
5050
outModelVariablesInstance, outModelVariablesList) annotation(Library = {"omcruntime","fmilib"});
5151
end initializeFMIImport;
5252

5353
public function releaseFMIImport
54-
input Integer inFMIModelVariablesInstance;
55-
input Integer inFMIInstance;
56-
input Integer inFMIContext;
54+
input Option<Integer> inFMIModelVariablesInstance "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
55+
input Option<Integer> inFMIInstance "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
56+
input Option<Integer> inFMIContext "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
5757
external "C" FMIImpl__releaseFMIImport(inFMIModelVariablesInstance, inFMIInstance, inFMIContext) annotation(Library = {"omcruntime","fmilib"});
5858
end releaseFMIImport;
5959

Compiler/runtime/FMIImpl.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ int FMIImpl__initializeFMIImport(const char* file_name, const char* working_dire
242242
callback_functions.freeMemory = free;
243243
}
244244
fmi_import_context_t* context = fmi_import_allocate_context(&callbacks);
245-
*fmiContext = context;
245+
*fmiContext = mk_some(context);
246246
// extract the fmu file and read the version
247247
fmi_version_enu_t version;
248248
version = fmi_import_get_fmi_version(context, file_name, working_directory);
@@ -260,7 +260,7 @@ int FMIImpl__initializeFMIImport(const char* file_name, const char* working_dire
260260
c_add_message(-1, ErrorType_scripting, ErrorLevel_error, gettext("Error parsing the modelDescription.xml file."), NULL, 0);
261261
return 0;
262262
}
263-
*fmiInstance = fmi;
263+
*fmiInstance = mk_some(fmi);
264264
// Load the binary (dll/so)
265265
jm_status_enu_t status;
266266
status = fmi1_import_create_dllfmu(fmi, callback_functions, 0);
@@ -315,7 +315,7 @@ int FMIImpl__initializeFMIImport(const char* file_name, const char* working_dire
315315
*experimentAnnotation = FMI__EXPERIMENTANNOTATION(mk_rcon(experimentStartTime), mk_rcon(experimentStopTime), mk_rcon(experimentTolerance));
316316
/* Read the model variables from the FMU's modelDescription.xml file and create a list of it. */
317317
fmi1_import_variable_list_t* model_variables_list = fmi1_import_get_variable_list(fmi);
318-
*modelVariablesInstance = model_variables_list;
318+
*modelVariablesInstance = mk_some(model_variables_list);
319319
size_t model_variables_list_size = fmi1_import_get_variable_list_size(model_variables_list);
320320
/* get model variables value reference list */
321321
const fmi1_value_reference_t* model_variables_value_reference_list = fmi1_import_get_value_referece_list(model_variables_list);
@@ -375,8 +375,11 @@ int FMIImpl__initializeFMIImport(const char* file_name, const char* working_dire
375375
* Releases all the instances of FMI Import.
376376
* From FMIL docs; Free a variable list. Note that variable lists are allocated dynamically and must be freed when not needed any longer.
377377
*/
378-
void FMIImpl__releaseFMIImport(intptr_t fmiModeVariablesInstance, intptr_t fmiInstance, intptr_t fmiContext)
378+
void FMIImpl__releaseFMIImport(void *ptr1, void *ptr2, void *ptr3)
379379
{
380+
intptr_t fmiModeVariablesInstance = RML_FETCH(RML_OFFSET(RML_UNTAGPTR(ptr1),1));
381+
intptr_t fmiInstance = RML_FETCH(RML_OFFSET(RML_UNTAGPTR(ptr2),1));
382+
intptr_t fmiContext = RML_FETCH(RML_OFFSET(RML_UNTAGPTR(ptr3),1));
380383
free((fmi1_import_variable_list_t*)fmiModeVariablesInstance);
381384
fmi1_import_t* fmi = (fmi1_import_t*)fmiInstance;
382385
fmi1_import_destroy_dllfmu(fmi);

Compiler/runtime/FMI_rml.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,19 @@ RML_BEGIN_LABEL(FMIExt__initializeFMIImport)
4949
void* modelVariablesList;
5050
rmlA0 = FMIImpl__initializeFMIImport(filename, workingDirectory, RML_UNTAGFIXNUM(rmlA2), &fmiContext, &fmiInstance, &fmiInfo, &experimentAnnotation,
5151
&modelVariablesInstance, &modelVariablesList) ? RML_TRUE : RML_FALSE;
52-
rmlA1 = (void*) mk_icon(fmiContext);
53-
rmlA2 = (void*) mk_icon(fmiInstance);
52+
rmlA1 = (void*) fmiContext;
53+
rmlA2 = (void*) fmiInstance;
5454
rmlA3 = fmiInfo;
5555
rmlA4 = experimentAnnotation;
56-
rmlA5 = (void*) mk_icon(modelVariablesInstance);
56+
rmlA5 = (void*) modelVariablesInstance;
5757
rmlA6 = modelVariablesList;
5858
RML_TAILCALLK(rmlSC);
5959
}
6060
RML_END_LABEL
6161

6262
RML_BEGIN_LABEL(FMIExt__releaseFMIImport)
6363
{
64-
FMIImpl__releaseFMIImport(RML_UNTAGFIXNUM(rmlA0), RML_UNTAGFIXNUM(rmlA1), RML_UNTAGFIXNUM(rmlA2));
64+
FMIImpl__releaseFMIImport(rmlA0, rmlA1, rmlA2);
6565
RML_TAILCALLK(rmlSC);
6666
}
6767
RML_END_LABEL

0 commit comments

Comments
 (0)