| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| Expand Up | @@ -566,7 +566,13 @@ de_instrument(PyCodeObject *code, int i, int event) | |
| _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; | ||
| uint8_t *opcode_ptr = &instr->op.code; | ||
| int opcode = *opcode_ptr; | ||
| assert(opcode != ENTER_EXECUTOR); | ||
| if (opcode == ENTER_EXECUTOR) { | ||
| int oparg = instr->op.arg; | ||
| _PyExecutorObject *exec = code->co_executors->executors[oparg]; | ||
| opcode_ptr = &exec->vm_data.opcode; | ||
| opcode = *opcode_ptr; | ||
| assert(opcode != ENTER_EXECUTOR); | ||
| } | ||
| if (opcode == INSTRUMENTED_LINE) { | ||
| opcode_ptr = &code->_co_monitoring->lines[i].original_opcode; | ||
| opcode = *opcode_ptr; | ||
| Expand Down Expand Up | @@ -711,7 +717,22 @@ remove_tools(PyCodeObject * code, int offset, int event, int tools) | |
| assert(event != PY_MONITORING_EVENT_LINE); | ||
| assert(event != PY_MONITORING_EVENT_INSTRUCTION); | ||
| assert(PY_MONITORING_IS_INSTRUMENTED_EVENT(event)); | ||
| assert(opcode_has_event(_Py_GetBaseOpcode(code, offset))); | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityThis is also correct, provided the assertion assert(PY_MONITORING_IS_INSTRUMENTED_EVENT(event)) is true.
Sorry, something went wrong.
All reactions
Copy link
Copy Markdown
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityHmm, it will guarantee that the opcode is not ENTER_EXECUTOR?
Sorry, something went wrong.
All reactions
|
||
| #ifndef NDEBUG | ||
| _Py_CODEUNIT co_instr = _PyCode_CODE(code)[offset]; | ||
| uint8_t opcode = co_instr.op.code; | ||
| uint8_t oparg = co_instr.op.arg; | ||
| if (opcode == ENTER_EXECUTOR) { | ||
| _PyExecutorObject *exec = code->co_executors->executors[oparg]; | ||
| assert(exec->vm_data.opcode != ENTER_EXECUTOR); | ||
| opcode = _PyOpcode_Deopt[exec->vm_data.opcode]; | ||
| opcode = exec->vm_data.oparg; | ||
| } | ||
| else { | ||
| opcode = _Py_GetBaseOpcode(code, offset); | ||
| } | ||
| assert(opcode != ENTER_EXECUTOR); | ||
| assert(opcode_has_event(opcode)); | ||
| #endif | ||
| _PyCoMonitoringData *monitoring = code->_co_monitoring; | ||
| if (monitoring && monitoring->tools) { | ||
| monitoring->tools[offset] &= ~tools; | ||
| Expand Down Expand Up | @@ -1282,9 +1303,16 @@ initialize_tools(PyCodeObject *code) | |
| for (int i = 0; i < code_len; i++) { | ||
| _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; | ||
| int opcode = instr->op.code; | ||
| if (opcode == INSTRUMENTED_LINE) { | ||
| int oparg = instr->op.arg; | ||
| if (opcode == ENTER_EXECUTOR) { | ||
| _PyExecutorObject *exec = code->co_executors->executors[oparg]; | ||
| opcode = exec->vm_data.opcode; | ||
| oparg = exec->vm_data.oparg; | ||
| } | ||
| else if (opcode == INSTRUMENTED_LINE) { | ||
| opcode = code->_co_monitoring->lines[i].original_opcode; | ||
| } | ||
| assert(opcode != ENTER_EXECUTOR); | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityThis assert should be moved before the original if (opcode == INSTRUMENTED_LINE) {, we shouldn't get here with and ENTER_EXECUTOR present.
Sorry, something went wrong.
All reactions
Copy link
Copy Markdown
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityMove it to L1310 will be enough?
Sorry, something went wrong.
All reactions
|
||
| bool instrumented = is_instrumented(opcode); | ||
| if (instrumented) { | ||
| opcode = DE_INSTRUMENT[opcode]; | ||
| Expand All | @@ -1295,7 +1323,7 @@ initialize_tools(PyCodeObject *code) | |
| if (instrumented) { | ||
| int8_t event; | ||
| if (opcode == RESUME) { | ||
| event = instr->op.arg != 0; | ||
| event = oparg != 0; | ||
| } | ||
| else { | ||
| event = EVENT_FOR_OPCODE[opcode]; | ||
| Expand Down | ||
| Back | FazBrowse Home | New Git URL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityThis assertion is correct. Please don't remove assertions, unless you are really sure that they are incorrect.
ENTER_EXECUTOR should never have associated instrumentation.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityIt was moved to L574, it will be the same effect no?
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.