From 9226695c221dc6e0a66ff03964f0bfae02477d69 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 17 Oct 2018 16:12:46 +0300 Subject: [PATCH] Mark "top-level" classes --- Zend/zend_compile.c | 4 ++++ Zend/zend_compile.h | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c907594fadb..39ee2a1063a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -6322,6 +6322,10 @@ void zend_compile_class_decl(zend_ast *ast, zend_bool toplevel) /* {{{ */ CG(active_class_entry) = original_ce; + if (toplevel) { + ce->ce_flags |= ZEND_ACC_TOP_LEVEL; + } + if (toplevel /* We currently don't early-bind classes that implement interfaces or use traits */ && !(ce->ce_flags & (ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 4a597dd4676..acc0d9cf6f2 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -223,7 +223,7 @@ typedef struct _zend_oparray_context { /* Function has typed arguments / class has typed props | | | */ #define ZEND_ACC_HAS_TYPE_HINTS (1 << 8) /* ? | X | | */ /* | | | */ -/* Class Flags (unused: 15...) | | | */ +/* Class Flags (unused: 16...) | | | */ /* =========== | | | */ /* | | | */ /* Special class types | | | */ @@ -257,6 +257,9 @@ typedef struct _zend_oparray_context { /* User class has methods with static variables | | | */ #define ZEND_HAS_STATIC_IN_METHODS (1 << 14) /* X | | | */ /* | | | */ +/* Top-level class declaration | | | */ +#define ZEND_ACC_TOP_LEVEL (1 << 15) /* X | | | */ +/* | | | */ /* Function Flags (unused: 25...30) | | | */ /* ============== | | | */ /* | | | */