Merge branch 'PHP-5.4' into PHP-5.5
authorDmitry Stogov <dmitry@zend.com>
Mon, 2 Dec 2013 07:02:40 +0000 (11:02 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 2 Dec 2013 07:02:40 +0000 (11:02 +0400)
* PHP-5.4:
  Fixed ability to build non-specialized GOTO VM

Conflicts:
Zend/zend_vm_gen.php

1  2 
Zend/zend_vm_gen.php

index 9b2877b9968f9bb16099d95fe6f606b2f058a702,37deae865768b2398c0f23d29a2f63d63226af68..f29b3c4533fc3c70936bb07904b2d8dd1f4ffd76
@@@ -884,13 -886,20 +884,19 @@@ function gen_executor($f, $skl, $spec, 
                                                        out($f,"#undef CHECK_EXCEPTION\n");
                                                        out($f,"#undef HANDLE_EXCEPTION\n");
                                                        out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
-                                                       out($f,"#define CHECK_EXCEPTION() if (UNEXPECTED(EG(exception) != NULL)) goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
-                                                       out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
-                                                       out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
+                                                       if (ZEND_VM_SPEC) {
+                                                               out($f,"#define CHECK_EXCEPTION() if (UNEXPECTED(EG(exception) != NULL)) goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
+                                                               out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
+                                                               out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
+                                                       } else {
+                                                               out($f,"#define CHECK_EXCEPTION() if (UNEXPECTED(EG(exception) != NULL)) goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
+                                                               out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
+                                                               out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
+                                                       }
 -                                                      
 -                                                      out($f,"#define LOAD_REGS()                do {Ts = EX(Ts); CVs = EX(CVs);} while (0)\n");
 +                                                      out($f,"#define LOAD_REGS()\n");
                                                        out($f,"#define ZEND_VM_CONTINUE() goto *(void**)(OPLINE->handler)\n");
                                                        out($f,"#define ZEND_VM_RETURN()   EG(in_execution) = original_in_execution; return\n");
 -                                                      out($f,"#define ZEND_VM_ENTER()    op_array = EG(active_op_array); goto zend_vm_enter\n");
 +                                                      out($f,"#define ZEND_VM_ENTER()    goto zend_vm_enter\n");
                                                        out($f,"#define ZEND_VM_LEAVE()    ZEND_VM_CONTINUE()\n");
                                                        out($f,"#define ZEND_VM_DISPATCH(opcode, opline) goto *(void**)(zend_vm_get_opcode_handler(opcode, opline));\n\n");
                                                        out($f,"#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL execute_data TSRMLS_CC\n");