--- /dev/null
+--TEST--
+active_class_entry must be always correct (__METHOD__ should not depend on declaring function ce)
+--FILE--
+<?php
+
+namespace Baz;
+
+class Foo {
+ public static function bar() {
+ function foo() {
+ var_dump(__FUNCTION__);
+ var_dump(__METHOD__);
+ }
+
+ foo();
+
+ var_dump(__FUNCTION__);
+ var_dump(__METHOD__);
+ }
+}
+
+Foo::bar();
+
+?>
+--EXPECT--
+string(7) "Baz\foo"
+string(7) "Baz\foo"
+string(3) "bar"
+string(12) "Baz\Foo::bar"
zend_bool is_method = decl->kind == ZEND_AST_METHOD;
zend_op_array *orig_op_array = CG(active_op_array);
+ zend_class_entry *orig_ce = CG(active_class_entry);
zend_op_array *op_array = zend_arena_alloc(&CG(arena), sizeof(zend_op_array));
zend_oparray_context orig_oparray_context;
}
CG(active_op_array) = op_array;
+
+ if (!is_method) {
+ CG(active_class_entry) = NULL;
+ }
+
zend_oparray_context_begin(&orig_oparray_context);
if (CG(compiler_options) & ZEND_COMPILE_EXTENDED_INFO) {
/* Pop the loop variable stack separator */
zend_stack_del_top(&CG(loop_var_stack));
+ CG(active_class_entry) = orig_ce;
CG(active_op_array) = orig_op_array;
}
/* }}} */