]> granicus.if.org Git - php/commitdiff
Fixed ZEND_VM_DEFINE_OP build when --without-specializer
authorXinchen Hui <laruence@php.net>
Sun, 28 Jun 2015 13:16:08 +0000 (21:16 +0800)
committerXinchen Hui <laruence@php.net>
Sun, 28 Jun 2015 13:16:08 +0000 (21:16 +0800)
Zend/zend_vm_gen.php

index 316eb55a11c54d6a7982c448f699fc8d41359c50..ff181ce1e7608ed63d5b3585a4f777f3b5f02acb 100644 (file)
@@ -866,8 +866,11 @@ function gen_labels($f, $spec, $kind, $prolog) {
                                $next++;
                        }
                        $next = $num+1;
-                 // Emit pointer to unspecialized handler
-                       switch ($kind) {
+
+                       //ugly trick for ZEND_VM_DEFINE_OP
+                       if ($dsc["code"]) {
+                               // Emit pointer to unspecialized handler
+                               switch ($kind) {
                                case ZEND_VM_KIND_CALL:
                                        out($f,$prolog.$dsc["op"]."_HANDLER,\n");
                                        break;
@@ -877,6 +880,19 @@ function gen_labels($f, $spec, $kind, $prolog) {
                                case ZEND_VM_KIND_GOTO:
                                        out($f,$prolog."(void*)&&".$dsc["op"]."_HANDLER,\n");
                                        break;
+                               }
+                       } else {
+                               switch ($kind) {
+                                       case ZEND_VM_KIND_CALL:
+                                               out($f,$prolog."ZEND_NULL_HANDLER,\n");
+                                               break;
+                                       case ZEND_VM_KIND_SWITCH:
+                                               out($f,$prolog."(void*)(uintptr_t)-1,\n");
+                                               break;
+                                       case ZEND_VM_KIND_GOTO:
+                                               out($f,$prolog."(void*)&&ZEND_NULL_HANDLER,\n");
+                                               break;
+                               }
                        }
                }
        }