diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2013-03-28 00:08:11 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2013-03-28 00:08:11 +0400 |
| commit | 6e8aa096964e1d723a9cae3572b2f0affa4e53c0 (patch) | |
| tree | a81fec559fdb8c46aa451bdc5834ec216160d2e3 | |
| parent | 391a41e16701dc3a92a4af6dc4a7e23c98a0e314 (diff) | |
| parent | 85e5e60777209c13c71785da31af86a5e0a98d92 (diff) | |
| download | php-git-6e8aa096964e1d723a9cae3572b2f0affa4e53c0.tar.gz | |
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4:
Fixed bug #64529 (Ran out of opcode space)
Conflicts:
NEWS
Zend/zend_execute_API.c
Zend/zend_language_scanner.c
Zend/zend_language_scanner_defs.h
| -rw-r--r-- | Zend/zend_compile.c | 7 | ||||
| -rw-r--r-- | Zend/zend_compile.h | 2 | ||||
| -rw-r--r-- | Zend/zend_execute_API.c | 2 | ||||
| -rw-r--r-- | Zend/zend_language_scanner.c | 4 | ||||
| -rw-r--r-- | Zend/zend_language_scanner.l | 4 |
5 files changed, 10 insertions, 9 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 6df3defb1e..7680790918 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1809,7 +1809,7 @@ void zend_do_end_function_declaration(const znode *function_token TSRMLS_DC) /* zend_do_return(NULL, 0 TSRMLS_CC); pass_two(CG(active_op_array) TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); if (CG(active_class_entry)) { zend_check_magic_method_implementation(CG(active_class_entry), (zend_function*)CG(active_op_array), E_COMPILE_ERROR TSRMLS_CC); @@ -2391,13 +2391,14 @@ void zend_do_goto(const znode *label TSRMLS_DC) /* {{{ */ } /* }}} */ -void zend_release_labels(TSRMLS_D) /* {{{ */ +void zend_release_labels(int temporary TSRMLS_DC) /* {{{ */ { if (CG(context).labels) { zend_hash_destroy(CG(context).labels); FREE_HASHTABLE(CG(context).labels); + CG(context).labels = NULL; } - if (!zend_stack_is_empty(&CG(context_stack))) { + if (!temporary && !zend_stack_is_empty(&CG(context_stack))) { zend_compiler_context *ctx; zend_stack_top(&CG(context_stack), (void**)&ctx); diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 2295cffab9..9c55b5ebe8 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -643,7 +643,7 @@ void zend_do_resolve_class_name(znode *result, znode *class_name, int is_static void zend_do_label(znode *label TSRMLS_DC); void zend_do_goto(const znode *label TSRMLS_DC); void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2 TSRMLS_DC); -void zend_release_labels(TSRMLS_D); +void zend_release_labels(int temporary TSRMLS_DC); ZEND_API void function_add_ref(zend_function *function); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index f099784a42..8739e21c2b 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1295,7 +1295,7 @@ void execute_new_code(TSRMLS_D) /* {{{ */ opline++; } - zend_release_labels(TSRMLS_C); + zend_release_labels(1 TSRMLS_CC); EG(return_value_ptr_ptr) = NULL; EG(active_op_array) = CG(active_op_array); diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index f2ba6bf9d4..9a62a9c045 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -597,7 +597,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR CG(active_op_array) = original_active_op_array; if (compilation_successful) { pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); } else { efree(op_array); retval = NULL; @@ -772,7 +772,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) zend_do_return(NULL, 0 TSRMLS_CC); CG(active_op_array) = original_active_op_array; pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); retval = op_array; } } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index d44ba20e1b..23a2f472c0 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -595,7 +595,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR CG(active_op_array) = original_active_op_array; if (compilation_successful) { pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); } else { efree(op_array); retval = NULL; @@ -770,7 +770,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) zend_do_return(NULL, 0 TSRMLS_CC); CG(active_op_array) = original_active_op_array; pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); retval = op_array; } } |
