From d238ab6c83ecc66dbe6aecdf972cdf1e10051c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=96stlund?= Date: Wed, 26 Apr 2023 18:07:05 +0200 Subject: [PATCH] Add qualifyPath() API call (#10617) --- .../Compiler/FrontEnd/ModelicaBuiltin.mo | 10 +++++++ .../Compiler/NFFrontEnd/NFModelicaBuiltin.mo | 10 +++++++ .../Compiler/Script/CevalScriptBackend.mo | 3 +++ testsuite/openmodelica/instance-API/Makefile | 1 + .../instance-API/QualifyPath1.mos | 26 +++++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 testsuite/openmodelica/instance-API/QualifyPath1.mos diff --git a/OMCompiler/Compiler/FrontEnd/ModelicaBuiltin.mo b/OMCompiler/Compiler/FrontEnd/ModelicaBuiltin.mo index 4f1a7a8a4cc..0d92f1d2aa4 100644 --- a/OMCompiler/Compiler/FrontEnd/ModelicaBuiltin.mo +++ b/OMCompiler/Compiler/FrontEnd/ModelicaBuiltin.mo @@ -4460,6 +4460,16 @@ annotation(preferredView="text",Documentation(info=" ")); end restoreAST; +function qualifyPath + input TypeName classPath; + input TypeName path; + output TypeName qualifiedPath; +external "builtin"; +annotation(preferredView="text",Documentation(info=" +

Returns the fully qualified path for the given path in a class.

+")); +end qualifyPath; + // OMSimulator API calls type oms_system = enumeration(oms_system_none,oms_system_tlm, oms_system_wc,oms_system_sc); type oms_causality = enumeration(oms_causality_input, oms_causality_output, oms_causality_parameter, oms_causality_bidir, oms_causality_undefined); diff --git a/OMCompiler/Compiler/NFFrontEnd/NFModelicaBuiltin.mo b/OMCompiler/Compiler/NFFrontEnd/NFModelicaBuiltin.mo index acb19988e17..f3c2fac6d3a 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFModelicaBuiltin.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFModelicaBuiltin.mo @@ -4713,6 +4713,16 @@ annotation(preferredView="text",Documentation(info=" ")); end restoreAST; +function qualifyPath + input TypeName classPath; + input TypeName path; + output TypeName qualifiedPath; +external "builtin"; +annotation(preferredView="text",Documentation(info=" +

Returns the fully qualified path for the given path in a class.

+")); +end qualifyPath; + // OMSimulator API calls type oms_system = enumeration(oms_system_none,oms_system_tlm, oms_system_wc,oms_system_sc); type oms_causality = enumeration(oms_causality_input, oms_causality_output, oms_causality_parameter, oms_causality_bidir, oms_causality_undefined); diff --git a/OMCompiler/Compiler/Script/CevalScriptBackend.mo b/OMCompiler/Compiler/Script/CevalScriptBackend.mo index 1ac6b78ae5e..869e46c19e7 100644 --- a/OMCompiler/Compiler/Script/CevalScriptBackend.mo +++ b/OMCompiler/Compiler/Script/CevalScriptBackend.mo @@ -3111,6 +3111,9 @@ algorithm case ("restoreAST", {Values.INTEGER(integer = n)}) then Values.BOOL(SymbolTable.restoreAST(n)); + case ("qualifyPath", {Values.CODE(Absyn.C_TYPENAME(classpath)), Values.CODE(Absyn.C_TYPENAME(path))}) + then Values.STRING(AbsynUtil.pathString(NFApi.mkFullyQual(SymbolTable.getAbsyn(), classpath, path))); + end matchcontinue; end cevalInteractiveFunctions4; diff --git a/testsuite/openmodelica/instance-API/Makefile b/testsuite/openmodelica/instance-API/Makefile index 985b4335120..c6099ba9873 100644 --- a/testsuite/openmodelica/instance-API/Makefile +++ b/testsuite/openmodelica/instance-API/Makefile @@ -54,6 +54,7 @@ GetModelInstanceReplaceable3.mos \ GetModelInstanceReplaceable4.mos \ GetModelInstanceStateMachine1.mos \ ModifierToJSON1.mos \ +QualifyPath1.mos \ # test that currently fail. Move up when fixed. diff --git a/testsuite/openmodelica/instance-API/QualifyPath1.mos b/testsuite/openmodelica/instance-API/QualifyPath1.mos new file mode 100644 index 00000000000..1515ca005cb --- /dev/null +++ b/testsuite/openmodelica/instance-API/QualifyPath1.mos @@ -0,0 +1,26 @@ +// name: QualifyPath1 +// keywords: +// status: correct +// cflags: -d=newInst +// +// + +loadString(" + package P + model A + end A; + + model B + A a; + end B; + end P; +"); + +qualifyPath(P.B, A); +getErrorString(); + +// Result: +// true +// "P.A" +// "" +// endResult