on master help sign in
prybar/languages/python2/pry_python2.c
60 lines 1.3 kB history raw
1#include "pry_python2.h"
3int pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
4{
5 const char *xargv[argn + 1];
6 const char *ptr = argv;
7 for (int i = 0; i < argn; ++i)
8 {
9 xargv[i] = ptr;
10 ptr += strlen(ptr) + 1;
11 }
12 xargv[argn] = NULL;
13 PySys_SetArgvEx(argn, xargv, 1);
14 return PyRun_AnyFile(f, file);
17const char *pry_eval(const char *code, int start)
20 PyObject *m, *d, *s, *v;
21 PyObject *c;
22 m = PyImport_AddModule("__main__");
24 if (m == NULL)
25 return NULL;
27 d = PyModule_GetDict(m);
28 c = Py_CompileString(code, "(eval)", start);
29 if (c == NULL)
30 {
31 PyErr_Print();
32 return NULL;
33 }
34 v = PyEval_EvalCode(c, d, d);
35 if (v == NULL)
36 {
37 PyErr_Print();
38 return NULL;
39 }
40 s = PyObject_Str(v);
41 if (s == NULL)
42 {
43 PyErr_Print();
44 return NULL;
45 }
46 char *str = PyBytes_AS_STRING(s);
47 Py_DECREF(v);
48 Py_DECREF(s);
49 return str;
52void pry_set_prompts(const char *ps1, const char *ps2)
54 PyObject *po1 = PyString_FromString(ps1);
55 PyObject *po2 = PyString_FromString(ps2);
56 PySys_SetObject("ps1", po1);
57 PySys_SetObject("ps2", po2);
58 Py_DECREF(po1);
59 Py_DECREF(po2);