From 83618934441057bc3375adb22284688ca0559d6b Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 26 Apr 2015 16:03:58 +0200 Subject: [PATCH] Fix implementing_class handling --- Zend/tests/anon/010.phpt | 23 +++++++++++++++++++++++ Zend/zend_compile.c | 7 +++++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/anon/010.phpt diff --git a/Zend/tests/anon/010.phpt b/Zend/tests/anon/010.phpt new file mode 100644 index 0000000000..917989a7e2 --- /dev/null +++ b/Zend/tests/anon/010.phpt @@ -0,0 +1,23 @@ +--TEST-- +Trait binding after anon class +--FILE-- +m1()); + +?> +--EXPECT-- +int(42) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index eaf6978401..4adc27d724 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4923,7 +4923,9 @@ zend_class_entry *zend_compile_class_decl(zend_ast *ast) /* {{{ */ zend_class_entry *ce = zend_arena_alloc(&CG(arena), sizeof(zend_class_entry)); zend_op *opline; znode declare_node, extends_node; - zend_class_entry *active = CG(active_class_entry); + + zend_class_entry *original_ce = CG(active_class_entry); + znode original_implementing_class = FC(implementing_class); if (decl->flags & ZEND_ACC_ANON_CLASS) { decl->name = name = zend_generate_anon_class_name(); @@ -5088,7 +5090,8 @@ zend_class_entry *zend_compile_class_decl(zend_ast *ast) /* {{{ */ ce->ce_flags |= ZEND_ACC_IMPLEMENT_INTERFACES; } - CG(active_class_entry) = active; + FC(implementing_class) = original_implementing_class; + CG(active_class_entry) = original_ce; return ce; } -- 2.40.0