| /* | |
| Copyright 2019 Alain Dargelas | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| */ | |
| /* | |
| * File: PythonAPI.h | |
| * Author: alain | |
| * | |
| * Created on May 13, 2017, 4:42 PM | |
| */ | |
| #ifndef PYTHONAPI_H | |
| #define PYTHONAPI_H | |
| #include "Python.h" | |
| namespace SURELOG { | |
| class SV3_1aPythonListener; | |
| class FileContent; | |
| class Design; | |
| class PythonAPI { | |
| public: | |
| PythonAPI(); | |
| PythonAPI(const PythonAPI& orig); | |
| virtual ~PythonAPI(); | |
| /* Main interpreter (in main thread) */ | |
| static void init(int argc, const char** argv); | |
| static void shutdown(); | |
| static PyThreadState* getMainInterp() { return m_mainThreadState; } | |
| /* Per thread interpreters */ | |
| static PyThreadState* initNewInterp(); | |
| static void shutdown(PyThreadState* interp); | |
| static bool loadScript(std::string name, bool check = false); | |
| static std::string evalScript(std::string module, std::string function, | |
| std::vector<std::string> args, | |
| PyThreadState* interp); | |
| static void evalScript(std::string function, SV3_1aPythonListener* listener, | |
| ParserRuleContext* ctx); | |
| static std::string getInvalidScriptString() { return m_invalidScriptResult; } | |
| static bool isListenerLoaded() { return m_listenerLoaded; } | |
| static std::string getListenerScript() { return m_listenerScript; } | |
| static void setListenerScript(std::string script) { | |
| m_listenerScript = script; | |
| } | |
| static bool evalScriptPerFile(std::string script, ErrorContainer* errors, | |
| FileContent* fC, PyThreadState* interp); | |
| static bool evalScript(std::string script, Design* design); | |
| static void setStrictMode(bool mode) { m_strictMode = mode; } | |
| private: | |
| static void loadScriptsInInterp_(); | |
| static bool loadScript_(std::string name, bool check = false); | |
| static std::string m_invalidScriptResult; | |
| static PyThreadState* m_mainThreadState; | |
| static std::string m_programPath; | |
| static bool m_listenerLoaded; | |
| static std::string m_listenerScript; | |
| static bool m_strictMode; | |
| static std::string m_builtinPath; | |
| }; | |
| }; // namespace SURELOG | |
| #endif /* PYTHONAPI_H */ |