]> granicus.if.org Git - php/commitdiff
Fix ct binding for cuf/cufa functions
authorNikita Popov <nikic@php.net>
Tue, 23 Sep 2014 19:02:32 +0000 (21:02 +0200)
committerNikita Popov <nikic@php.net>
Tue, 23 Sep 2014 19:02:32 +0000 (21:02 +0200)
It was checking against the wrong AST kind, so the binding was
never actually done.

Zend/zend_compile.c

index 73f6a8b00827786303fe87fff9cd9a46f0895433..59a5ce8207d7166196179c3b496a4c2bd0744d5c 100644 (file)
@@ -2646,7 +2646,7 @@ static int zend_try_compile_ct_bound_init_user_func(znode *result, zend_ast *nam
        zend_function *fbc;
        zend_op *opline;
 
-       if (name_ast->kind != ZEND_AST_CONST || Z_TYPE_P(zend_ast_get_zval(name_ast)) != IS_STRING) {
+       if (name_ast->kind != ZEND_AST_ZVAL || Z_TYPE_P(zend_ast_get_zval(name_ast)) != IS_STRING) {
                return FAILURE;
        }
 
@@ -2663,9 +2663,11 @@ static int zend_try_compile_ct_bound_init_user_func(znode *result, zend_ast *nam
        }
 
        opline = zend_emit_op(NULL, ZEND_INIT_FCALL, NULL, NULL TSRMLS_CC);
+       opline->extended_value = num_args;
+
        opline->op2_type = IS_CONST;
        LITERAL_STR(opline->op2, lcname);
-       opline->extended_value = num_args;
+       zend_alloc_cache_slot(opline->op2.constant TSRMLS_CC);
 
        return SUCCESS;
 }