blob: 5249f1bb23b25a2aafb8e37862942c58e364f808 [file] [log] [blame]
/*
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;
struct parser_rule_context;
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,
parser_rule_context* 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 */