I have never tried PEP0523 before so I have just did a quick look and pushed what I got to https://github.com/sklam/etude_py36_custom_jit .If you run https://github.com/sklam/etude_py36_custom_jit/blob/ , you should get the following printouts:master/test.py Hello
Hey
Yes
** myjit is evaluating frame=0x10c623048 lasti=-1 lineno=10
Enter apple()
** myjit is evaluating frame=0x7f9a74e02178 lasti=-1 lineno=16
Enter orange()
Exit orange()
Exit apple()
** myjit is evaluating frame=0x10c460d48 lasti=-1 lineno=27The frame is different for each method.Can you try your implementation with my test so we can compare?On Thu, Mar 30, 2017 at 11:46 PM Yuheng Zou <zouyuheng1998@gmail.com> wrote:______________________________I am building a Python JIT, so I want to change the
interp->eval_frame
to my own function.I built a C++ library which contains
EvalFrame
function, and then usedlopen
anddlsym
to use it. It looks like this:extern "C" PyObject *EvalFrame(PyFrameObject *f, int throwflag) { return _PyEval_EvalFrameDefault(f, throwflag); }
I added following code to
Python/pylifecycle.c
at function_Py_InitializeEx_
(Python version is 3.6.1):Private void *pyjit = NULL; pyjit = dlopen("../cmake-build-debug/
libPubbon.dylib" , 0); if (pyjit != NULL) { interp->eval_frame = (_PyFrameEvalFunction)dlsym(pyjit , "EvalFrame"); //interp->eval_frame = _PyEval_EvalFrameDefault; }Then something strange happened. I used LLDB to trace the variables. When it ran at
EvalFrame
, the address off
pointer didn't change, butf->f_lineno
changed.Why the address of the pointer didn't change, but the context change?
I am working on Mac OS X and Python 3.6.1. I want to know how to replace _PyEval_EvalFrameDefault in interp->eval_frame with my own function.
_________________
Python-compilers mailing list
Python-compilers@python.org
https://mail.python.org/mailman/listinfo/python- compilers
--Siu Kwan LamSoftware EngineerContinuum Analytics