diff options
| -rw-r--r-- | Zend/zend_compile.c | 4 | ||||
| -rw-r--r-- | Zend/zend_compile.h | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index e0ccd56a5c..01049f4175 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4956,6 +4956,10 @@ static zend_uchar determine_switch_jumptable_type(zend_ast_list *cases) { } static zend_bool should_use_jumptable(zend_ast_list *cases, zend_uchar jumptable_type) { + if (CG(compiler_options) & ZEND_COMPILE_NO_JUMPTABLES) { + return 0; + } + /* Thresholds are chosen based on when the average switch time for equidistributed * input becomes smaller when using the jumptable optimization. */ if (jumptable_type == IS_LONG) { diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index a8244d6b5b..f63b3a755d 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -1048,6 +1048,9 @@ END_EXTERN_C() /* result of compilation may be stored in file cache */ #define ZEND_COMPILE_WITH_FILE_CACHE (1<<11) +/* disable jumptable optimization for switch statements */ +#define ZEND_COMPILE_NO_JUMPTABLES (1<<12) + /* The default value for CG(compiler_options) */ #define ZEND_COMPILE_DEFAULT ZEND_COMPILE_HANDLE_OP_ARRAY |
