rfc:zend-vm-pause-api
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:zend-vm-pause-api [2017/11/01 01:14] – created lvht | rfc:zend-vm-pause-api [2017/11/01 01:25] – lvht | ||
---|---|---|---|
Line 11: | Line 11: | ||
So it is impossible to change the Zend VM's execute flow in an zend extension. As a result, any feature, like Fiber, | So it is impossible to change the Zend VM's execute flow in an zend extension. As a result, any feature, like Fiber, | ||
- | related to Zend VM's execute flow cannot be implemented by a standalone. | + | related to Zend VM's execute flow cannot be implemented by a standalone |
===== Proposal ===== | ===== Proposal ===== | ||
Line 80: | Line 80: | ||
You will see that we want to make the Zend VM execute the EG(pause_op) by changing the EX(prev_execute_data)-> | You will see that we want to make the Zend VM execute the EG(pause_op) by changing the EX(prev_execute_data)-> | ||
+ | However, it does not work out of box. The reason is under the ZEND_DO_FCALL' | ||
<code c> | <code c> | ||
ZEND_VM_HOT_HANDLER(60, | ZEND_VM_HOT_HANDLER(60, | ||
Line 92: | Line 93: | ||
} else if (EXPECTED(fbc-> | } else if (EXPECTED(fbc-> | ||
// ... | // ... | ||
+ | | ||
// the extension' | // the extension' | ||
// after its execution, we changed the EG(current_execute_data).opline | // after its execution, we changed the EG(current_execute_data).opline | ||
// However, as the value of EG(current_execute_data).opline has already been loade into the opline | // However, as the value of EG(current_execute_data).opline has already been loade into the opline | ||
- | // We need to reload the opline | ||
| | ||
+ | // We need to reload the opline | ||
LOAD_OPLINE(); | LOAD_OPLINE(); | ||
rfc/zend-vm-pause-api.txt · Last modified: 2017/11/21 10:56 by lvht