diff options
author | Dmitry Stogov <dmitry@zend.com> | 2021-03-16 20:31:36 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2021-03-16 20:31:36 +0300 |
commit | c732ab400af92c54eee47c487a56009f1d79dd5d (patch) | |
tree | 083d31748450932114a7667aae9235cde030efcb /Zend/zend_language_scanner.l | |
parent | 9bbeb0555b6b842ebd44e08510ff3f3226237544 (diff) | |
download | php-git-c732ab400af92c54eee47c487a56009f1d79dd5d.tar.gz |
Change Zend Stream API to use zend_string* instead of char*.
This allows to eliminate re-calculation of string lenght and hash value.
See the detailed list of changes in UPGRADING.INTERNALS.
Diffstat (limited to 'Zend/zend_language_scanner.l')
-rw-r--r-- | Zend/zend_language_scanner.l | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index c639fa3209..02714b4e1f 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -297,16 +297,6 @@ ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state) RESET_DOC_COMMENT(); } -ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle) -{ - zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles); - /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */ - file_handle->opened_path = NULL; - if (file_handle->free_filename) { - file_handle->filename = NULL; - } -} - ZEND_API zend_result zend_lex_tstring(zval *zv, unsigned char *ident) { unsigned char *end = ident; @@ -542,11 +532,13 @@ ZEND_API zend_result open_file_for_scanning(zend_file_handle *file_handle) if (zend_stream_fixup(file_handle, &buf, &size) == FAILURE) { /* Still add it to open_files to make destroy_file_handle work */ zend_llist_add_element(&CG(open_files), file_handle); + file_handle->in_list = 1; return FAILURE; } ZEND_ASSERT(!EG(exception) && "stream_fixup() should have failed"); zend_llist_add_element(&CG(open_files), file_handle); + file_handle->in_list = 1; /* Reset the scanner for scanning the new file */ SCNG(yy_in) = file_handle; @@ -584,7 +576,7 @@ ZEND_API zend_result open_file_for_scanning(zend_file_handle *file_handle) if (file_handle->opened_path) { compiled_filename = zend_string_copy(file_handle->opened_path); } else { - compiled_filename = zend_string_init(file_handle->filename, strlen(file_handle->filename), 0); + compiled_filename = zend_string_copy(file_handle->filename); } zend_set_compiled_filename(compiled_filename); @@ -655,9 +647,9 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type) if (open_file_for_scanning(file_handle)==FAILURE) { if (!EG(exception)) { if (type==ZEND_REQUIRE) { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename); + zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, ZSTR_VAL(file_handle->filename)); } else { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename); + zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, ZSTR_VAL(file_handle->filename)); } } } else { @@ -715,7 +707,7 @@ zend_op_array *compile_filename(int type, zval *filename) ZVAL_STR(&tmp, zval_get_string(filename)); filename = &tmp; } - zend_stream_init_filename(&file_handle, Z_STRVAL_P(filename)); + zend_stream_init_filename_ex(&file_handle, Z_STR_P(filename)); retval = zend_compile_file(&file_handle, type); if (retval && file_handle.handle.stream.handle) { @@ -837,6 +829,7 @@ zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *sy zend_save_lexical_state(&original_lex_state); if (open_file_for_scanning(&file_handle)==FAILURE) { zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename); + zend_destroy_file_handle(&file_handle); zend_restore_lexical_state(&original_lex_state); return FAILURE; } |