version 1.3, 2018/09/08 05:04:34 |
version 1.7, 2022/01/02 02:54:00 |
|
|
/* $OpenXM: OpenXM/src/ox_python/ox_python.c,v 1.2 2018/09/08 03:05:19 takayama Exp $ |
/* $OpenXM: OpenXM/src/ox_python/ox_python.c,v 1.6 2022/01/02 00:23:25 takayama Exp $ |
*/ |
*/ |
|
|
#include <stdio.h> |
#include <stdio.h> |
Line 152 cmo *make_error2(const char *reason,const char *fname, |
|
Line 152 cmo *make_error2(const char *reason,const char *fname, |
|
cmo **argv; |
cmo **argv; |
int n; |
int n; |
char *s; |
char *s; |
|
char s_tmp[256]; |
|
s = s_tmp; |
n = 5; |
n = 5; |
argv = (cmo **) GC_malloc(sizeof(cmo *)*n); |
argv = (cmo **) GC_malloc(sizeof(cmo *)*n); |
ms = (cmo *)new_cmo_string("Error"); argv[0] = ms; |
ms = (cmo *)new_cmo_string("error"); argv[0] = ms; |
if (reason != NULL) {s = (char *)GC_malloc(strlen(reason)+1); strcpy(s,reason); |
if (reason != NULL) {s = (char *)GC_malloc(strlen(reason)+3); |
}else strcpy(s,""); |
strcpy(s,"\"");strcat(s,reason);strcat(s,"\""); |
|
}else strcpy(s,"0"); |
ms = (cmo *) new_cmo_string(s); argv[1] = ms; |
ms = (cmo *) new_cmo_string(s); argv[1] = ms; |
if (fname != NULL) {s = (char *)GC_malloc(strlen(fname)+1); strcpy(s,fname); |
if (fname != NULL) {s = (char *)GC_malloc(strlen(fname)+3); |
}else strcpy(s,""); |
strcpy(s,"\"");strcat(s,fname);strcat(s,"\""); |
|
}else strcpy(s,"0"); |
ms = (cmo *) new_cmo_string(s); argv[2] = ms; |
ms = (cmo *) new_cmo_string(s); argv[2] = ms; |
err = (cmo *)new_cmo_int32(line); argv[3] = err; |
err = (cmo *)new_cmo_int32(line); argv[3] = err; |
err = (cmo *)new_cmo_int32(code); argv[4] = err; |
err = (cmo *)new_cmo_int32(code); argv[4] = err; |
Line 374 int sm_executeFunction() |
|
Line 378 int sm_executeFunction() |
|
}else if (strcmp(func->s,"PyRun_String")==0) { |
}else if (strcmp(func->s,"PyRun_String")==0) { |
my_PyRun_String(); |
my_PyRun_String(); |
}else if (strcmp(func->s,"eval")==0) { |
}else if (strcmp(func->s,"eval")==0) { |
my_eval2b(); |
my_eval2(); |
}else { |
}else { |
push(make_error2("sm_executeFunction, unknown function",NULL,0,-1)); |
push(make_error2("sm_executeFunction, unknown function",NULL,0,-1)); |
return -1; |
return -1; |
Line 390 int sm_executeStringByLocalParser() |
|
Line 394 int sm_executeStringByLocalParser() |
|
push(make_error2("sm_executeStringByLocalParser, not CMO_STRING",NULL,0,-1)); |
push(make_error2("sm_executeStringByLocalParser, not CMO_STRING",NULL,0,-1)); |
return -1; |
return -1; |
} |
} |
|
/*** {FILE *fp; fp=fopen("tmp-debug.txt","a"); fprintf(fp,"strlen=%d\n%s\n",strlen(cmd->s),cmd->s);fclose(fp); } ***/ |
status=PyRun_SimpleString(cmd->s); |
status=PyRun_SimpleString(cmd->s); |
// push(make_error2("sm_executeStringByLocalParser",NULL,0,-1)); |
// push(make_error2("sm_executeStringByLocalParser",NULL,0,-1)); |
push((cmo *)new_cmo_int32(status)); |
push((cmo *)new_cmo_int32(status)); |
Line 477 void push_error_from_file() { |
|
Line 482 void push_error_from_file() { |
|
FILE *fp; |
FILE *fp; |
#define BUF_SIZE 1024 |
#define BUF_SIZE 1024 |
char logname[BUF_SIZE]; |
char logname[BUF_SIZE]; |
char cmd[BUF_SIZE]; |
char cmd[BUF_SIZE+256]; |
char file[BUF_SIZE]; |
char file[BUF_SIZE]; |
char reason[BUF_SIZE]; |
char reason[BUF_SIZE]; |
int gsl_errno, line; |
int gsl_errno, line; |
Line 526 int main(int argc,char *argv[]) |
|
Line 531 int main(int argc,char *argv[]) |
|
#endif |
#endif |
|
|
/* Initialize python */ |
/* Initialize python */ |
Py_SetProgramName(argv[0]); /* optional but recommended */ |
Py_SetProgramName((wchar_t *) argv[0]); /* optional but recommended */ |
Py_Initialize(); |
Py_Initialize(); |
|
|
|
|
Line 590 int my_PyRun_String() { |
|
Line 595 int my_PyRun_String() { |
|
if (py_main == NULL) py_main = PyImport_AddModule("__main__"); |
if (py_main == NULL) py_main = PyImport_AddModule("__main__"); |
if (py_dict == NULL) py_dict = PyModule_GetDict(py_main); |
if (py_dict == NULL) py_dict = PyModule_GetDict(py_main); |
// pyRes = PyRun_String(cmd,Py_single_input,py_dict,py_dict); |
// pyRes = PyRun_String(cmd,Py_single_input,py_dict,py_dict); |
pyRes = PyRun_String(cmd,Py_single_input,py_dict,py_dict); |
pyRes = PyRun_String(cmd,Py_eval_input,py_dict,py_dict); |
if (pyRes==NULL) { |
if (pyRes==NULL) { |
push(make_error2("PyRun_String: exception",NULL,0,-1)); |
push(make_error2("PyRun_String: exception",NULL,0,-1)); |
PyRun_SimpleString("\n"); |
PyRun_SimpleString("\n"); |
Line 602 int my_PyRun_String() { |
|
Line 607 int my_PyRun_String() { |
|
} |
} |
|
|
int push_python_result(PyObject *pyRes) { |
int push_python_result(PyObject *pyRes) { |
if (PyString_Check(pyRes)) { |
if (PyUnicode_Check(pyRes)) { |
push((cmo *)new_cmo_string(PyString_AsString(pyRes))); |
push((cmo *)new_cmo_string(PyBytes_AsString(PyUnicode_AsEncodedString(pyRes,"UTF-8","strict")))); |
return(0); |
return(0); |
}else if (PyInt_Check(pyRes)) { |
}else if (PyLong_Check(pyRes)) { |
push((cmo *)new_cmo_int32((int) PyInt_AS_LONG(pyRes))); |
push((cmo *)new_cmo_int32((int) PyLong_AsLong(pyRes))); |
return(0); |
return(0); |
}else { |
}else { |
push((cmo *)new_cmo_string(PyString_AsString(PyObject_Str(pyRes)))); |
push((cmo *)new_cmo_string(PyBytes_AsString(PyUnicode_AsEncodedString(PyObject_Str(pyRes),"UTF-8","strict")))); |
return(0); |
return(0); |
|
/* push((cmo *)new_cmo_string(PyBytes_AsString(PyObject_Str(pyRes)))); |
|
return(0); */ |
// push(make_error2("PyRun_String returns an object which as not been implemented.",NULL,0,-1)); |
// push(make_error2("PyRun_String returns an object which as not been implemented.",NULL,0,-1)); |
// return(-1); |
// return(-1); |
} |
} |
|
|
printf("my_eval cmd=%s\n",cmd); |
printf("my_eval cmd=%s\n",cmd); |
|
|
// code from https://docs.python.jp/2.7/extending/embedding.html |
// code from https://docs.python.jp/2.7/extending/embedding.html |
if (pName==NULL) pName = PyString_FromString("__builtin__"); |
if (pName==NULL) pName = PyBytes_FromString("__builtin__"); |
if (pModule==NULL) pModule = PyImport_Import(pName); |
if (pModule==NULL) pModule = PyImport_Import(pName); |
|
|
if (pModule != NULL) { |
if (pModule != NULL) { |
if (pFunc==NULL) pFunc = PyObject_GetAttrString(pModule, "eval"); |
if (pFunc==NULL) pFunc = PyObject_GetAttrString(pModule, "eval"); |
if (pFunc && PyCallable_Check(pFunc)) { |
if (pFunc && PyCallable_Check(pFunc)) { |
pArgs = PyTuple_New(3); |
pArgs = PyTuple_New(3); |
PyTuple_SetItem(pArgs,0,PyString_FromString(cmd)); |
PyTuple_SetItem(pArgs,0,PyBytes_FromString(cmd)); |
PyTuple_SetItem(pArgs,1,PyEval_GetGlobals()); |
PyTuple_SetItem(pArgs,1,PyEval_GetGlobals()); |
PyTuple_SetItem(pArgs,2,PyEval_GetLocals()); |
PyTuple_SetItem(pArgs,2,PyEval_GetLocals()); |
pValue = PyObject_CallObject(pFunc, pArgs); |
pValue = PyObject_CallObject(pFunc, pArgs); |
Line 698 int my_eval2() { |
|
Line 705 int my_eval2() { |
|
if (pModule != NULL) { |
if (pModule != NULL) { |
if (pFunc && PyCallable_Check(pFunc)) { |
if (pFunc && PyCallable_Check(pFunc)) { |
pArgs = PyTuple_New(1); |
pArgs = PyTuple_New(1); |
PyTuple_SetItem(pArgs,0,PyString_FromString(cmd)); |
PyTuple_SetItem(pArgs,0,PyBytes_FromString(cmd)); |
pValue = PyObject_CallObject(pFunc, pArgs); |
pValue = PyObject_CallObject(pFunc, pArgs); |
Py_DECREF(pArgs); |
Py_DECREF(pArgs); |
if (pValue != NULL) { |
if (pValue != NULL) { |