3#define CPYCPPYY_INTERNAL 1
5#undef CPYCPPYY_INTERNAL
43 static bool isInitialized =
false;
47 if (!Py_IsInitialized()) {
49#if PY_VERSION_HEX < 0x03020000
53#if PY_VERSION_HEX >= 0x03020000
58 if (!Py_IsInitialized()) {
60 std::cerr <<
"Error: python has not been intialized; returning." << std::endl;
65#if PY_VERSION_HEX < 0x03000000
66 char* argv[] = {
const_cast<char*
>(
"cppyy")};
68 wchar_t* argv[] = {
const_cast<wchar_t*
>(
L"cppyy")};
70 PySys_SetArgv(
sizeof(argv)/
sizeof(argv[0]), argv);
73 PyRun_SimpleString(
const_cast<char*
>(
"import cppyy"));
79 PyImport_AddModule(
const_cast<char*
>(
"__main__")));
108 void* addr,
const std::string& classname,
bool python_owns)
176 if (pyobject->ob_refcnt <= 1 && (((
CPPInstance*)pyobject)->fFlags & CPPInstance::kIsOwner))
212 PyObject* mod = PyImport_ImportModule(mod_name.c_str());
220 PyModule_AddObject(
gThisModule, mod_name.c_str(), mod);
226 PyObject* dct = PyModule_GetDict(mod);
229 PyObject* values = PyDict_Values(dct);
230 for (
int i = 0; i < PyList_GET_SIZE(values); ++i) {
231 PyObject* value = PyList_GET_ITEM(values, i);
238 if (PyErr_Occurred())
242 std::string fullname = mod_name;
250 Py_XDECREF(pyClName);
259 if (PyErr_Occurred())
277 std::cerr <<
"Error: no file name specified." << std::endl;
281 FILE* fp = fopen(
name.c_str(),
"r");
283 std::cerr <<
"Error: could not open file \"" <<
name <<
"\"." << std::endl;
288 PyObject* oldargv = PySys_GetObject(
const_cast<char*
>(
"argv"));
292 PyObject*
l = PyList_New(PyList_GET_SIZE(oldargv));
293 for (
int i = 0; i < PyList_GET_SIZE(oldargv); ++i) {
294 PyObject* item = PyList_GET_ITEM(oldargv, i);
296 PyList_SET_ITEM(
l, i, item);
302#if PY_VERSION_HEX < 0x03000000
303 int argc = args.size() + 1;
304 const char** argv =
new const char*[argc];
305 for (
int i = 1; i < argc; ++i) argv[i] = args[i-1].c_str();
306 argv[0] = Py_GetProgramName();
307 PySys_SetArgv(argc,
const_cast<char**
>(argv));
317 PyRun_FileEx(fp,
const_cast<char*
>(
name.c_str()), Py_file_input, gbl, gbl, 1);
325 PySys_SetObject(
const_cast<char*
>(
"argv"), oldargv);
375 PyFloat_Check(result) || PyLong_Check(result) || PyInt_Check(result))
395 void* klass =
nullptr;
414 PyRun_InteractiveLoop(stdin,
const_cast<char*
>(
"\0"));
static PyObject * gMainDict
#define CPyCppyy_PyText_AsString
typedef void((*Func_t)())
CPYCPPYY_EXTERN bool Instance_CheckExact(PyObject *pyobject)
CPYCPPYY_EXTERN void Prompt()
CPYCPPYY_EXTERN bool Overload_Check(PyObject *pyobject)
CPYCPPYY_EXTERN bool Overload_CheckExact(PyObject *pyobject)
CPYCPPYY_EXTERN bool Import(const std::string &name)
CPYCPPYY_EXTERN void ExecScript(const std::string &name, const std::vector< std::string > &args)
CPYCPPYY_EXTERN bool Instance_IsLively(PyObject *pyobject)
PyObject * BindCppObjectNoCast(Cppyy::TCppObject_t object, Cppyy::TCppType_t klass, const unsigned flags=0)
bool CPPOverload_Check(T *object)
bool CPPScope_Check(T *object)
CPYCPPYY_EXTERN bool Instance_Check(PyObject *pyobject)
CPYCPPYY_EXTERN PyObject * Instance_FromVoidPtr(void *addr, const std::string &classname, bool python_owns=false)
CPYCPPYY_EXTERN bool Scope_CheckExact(PyObject *pyobject)
bool CPPInstance_Check(T *object)
bool CPPInstance_CheckExact(T *object)
bool CPPScope_CheckExact(T *object)
CPYCPPYY_EXTERN void * Instance_AsVoidPtr(PyObject *pyobject)
CPYCPPYY_EXTERN bool Scope_Check(PyObject *pyobject)
CPYCPPYY_EXTERN bool Exec(const std::string &cmd)
bool CPPOverload_CheckExact(T *object)
CPYCPPYY_EXTERN const PyResult Eval(const std::string &expr)
RPY_EXPORTED TCppScope_t GetScope(const std::string &scope_name)
static constexpr double L
void Initialize(Bool_t useTMVAStyle=kTRUE)