]> granicus.if.org Git - php/commitdiff
Remove unnecessary ZEND_FETCH_CLASS together with ZEND_DECLARE_INHERITED_CLASS
authorDmitry Stogov <dmitry@php.net>
Tue, 21 Jun 2005 12:05:23 +0000 (12:05 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 21 Jun 2005 12:05:23 +0000 (12:05 +0000)
in case of early binding

Zend/zend_compile.c

index 16b24ca17a9f0e61a803ac82244f34d3ff316008..67a6d27e1cbf40b95a176ef02e8edff8a2d6f306 100644 (file)
@@ -2190,6 +2190,19 @@ void zend_do_early_binding(TSRMLS_D)
                                        if (do_bind_inherited_class(opline, CG(class_table), *pce, 1 TSRMLS_CC) == NULL) {
                                                return;
                                        }
+                                       /* clear unnecessary ZEND_FETCH_CLASS opcode */
+                                       if (opline > CG(active_op_array)->opcodes &&
+                                           (opline-1)->opcode == ZEND_FETCH_CLASS) {
+                                         zend_op *fetch_class_opline = opline-1;
+
+                                               zval_dtor(&fetch_class_opline->op2.u.constant);
+                                               fetch_class_opline->opcode = ZEND_NOP;
+                                               memset(&fetch_class_opline->op1, 0, sizeof(znode));
+                                               memset(&fetch_class_opline->op2, 0, sizeof(znode));
+                                               SET_UNUSED(fetch_class_opline->op1);
+                                               SET_UNUSED(fetch_class_opline->op2);
+                                               SET_UNUSED(fetch_class_opline->result);
+                                       }
                                } else {
                                        /* We currently don't early-bind classes that implement interfaces */
                                        return;