diff options
author | Felipe Pena <felipe@php.net> | 2008-03-28 14:35:01 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2008-03-28 14:35:01 +0000 |
commit | f66f55edc5460c7105c43ede5b0d1d3d1bf2b8c8 (patch) | |
tree | 9749ebc166981924bf9a9c2112caaef47d34cd3d /Zend/zend_vm_execute.h | |
parent | 9d9468e9f41233f60e2720badfac088e43c26566 (diff) | |
download | php-git-f66f55edc5460c7105c43ede5b0d1d3d1bf2b8c8.tar.gz |
MFH: Implemented "jump label" operator (limited "goto")
[DOC]
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r-- | Zend/zend_vm_execute.h | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index f6c3f6359d..8c5223cc47 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -773,6 +773,28 @@ static int ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); } +static int ZEND_GOTO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + zend_op *brk_opline; + zend_op *opline = EX(opline); + zend_brk_cont_element *el; + + el = zend_brk_cont(&opline->op2.u.constant, opline->extended_value, + EX(op_array), EX(Ts) TSRMLS_CC); + + brk_opline = EX(op_array)->opcodes + el->brk; + + switch (brk_opline->opcode) { + case ZEND_SWITCH_FREE: + zend_switch_free(&EX_T(brk_opline->op1.u.var), brk_opline->op1.op_type, brk_opline->extended_value TSRMLS_CC); + break; + case ZEND_FREE: + zendi_zval_dtor(EX_T(brk_opline->op1.u.var).tmp_var); + break; + } + ZEND_VM_JMP(opline->op1.u.jmp_addr); +} + static int ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); @@ -31806,27 +31828,27 @@ void zend_init_opcodes_handlers(void) ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, + ZEND_GOTO_SPEC_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, + ZEND_GOTO_SPEC_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, + ZEND_GOTO_SPEC_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, + ZEND_GOTO_SPEC_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, + ZEND_GOTO_SPEC_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, |