diff options
-rw-r--r-- | Zend/zend_API.c | 2 | ||||
-rw-r--r-- | Zend/zend_compile.h | 2 | ||||
-rw-r--r-- | Zend/zend_language_scanner.h | 2 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 21 | ||||
-rw-r--r-- | ext/tokenizer/tokenizer.c | 4 |
5 files changed, 16 insertions, 15 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 2e89bddc47..5f558c4930 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -4530,7 +4530,7 @@ static zend_result get_default_via_ast(zval *default_value_zval, const char *def zend_string *code = zend_string_concat3( "<?php ", sizeof("<?php ") - 1, default_value, strlen(default_value), ";", 1); - ast = zend_compile_string_to_ast(code, &ast_arena, ""); + ast = zend_compile_string_to_ast(code, &ast_arena, ZSTR_EMPTY_ALLOC()); zend_string_release(code); if (!ast) { diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index b91e0038a4..13d7883edb 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -798,7 +798,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type); ZEND_API zend_op_array *compile_string(zend_string *source_string, const char *filename); ZEND_API zend_op_array *compile_filename(int type, zval *filename); ZEND_API zend_ast *zend_compile_string_to_ast( - zend_string *code, struct _zend_arena **ast_arena, const char *filename); + zend_string *code, struct _zend_arena **ast_arena, zend_string *filename); ZEND_API int zend_execute_scripts(int type, zval *retval, int file_count, ...); ZEND_API int open_file_for_scanning(zend_file_handle *file_handle); ZEND_API void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size); diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index e3897c69a8..c6ac8eb387 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -75,7 +75,7 @@ typedef struct _zend_nest_location { BEGIN_EXTERN_C() ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state); ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state); -ZEND_API void zend_prepare_string_for_scanning(zval *str, const char *filename); +ZEND_API void zend_prepare_string_for_scanning(zval *str, zend_string *filename); ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding); ZEND_API zend_result zend_multibyte_set_filter(const zend_encoding *onetime_encoding); ZEND_API zend_result zend_lex_tstring(zval *zv, zend_lexer_ident_ref ident_ref); diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 2679acf7fe..4452d7d000 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -669,7 +669,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type) } ZEND_API zend_ast *zend_compile_string_to_ast( - zend_string *code, zend_arena **ast_arena, const char *filename) { + zend_string *code, zend_arena **ast_arena, zend_string *filename) { zval code_zv; bool original_in_compilation; zend_lex_state original_lex_state; @@ -737,11 +737,10 @@ zend_op_array *compile_filename(int type, zval *filename) return retval; } -ZEND_API void zend_prepare_string_for_scanning(zval *str, const char *filename) +ZEND_API void zend_prepare_string_for_scanning(zval *str, zend_string *filename) { char *buf; size_t size, old_len; - zend_string *new_compiled_filename; /* enforce ZEND_MMAP_AHEAD trailing NULLs for flex... */ old_len = Z_STRLEN_P(str); @@ -773,10 +772,7 @@ ZEND_API void zend_prepare_string_for_scanning(zval *str, const char *filename) } yy_scan_buffer(buf, size); - - new_compiled_filename = zend_string_init(filename, strlen(filename), 0); - zend_set_compiled_filename(new_compiled_filename); - zend_string_release_ex(new_compiled_filename, 0); + zend_set_compiled_filename(filename); CG(zend_lineno) = 1; CG(increment_lineno) = 0; RESET_DOC_COMMENT(); @@ -809,6 +805,7 @@ zend_op_array *compile_string(zend_string *source_string, const char *filename) zend_lex_state original_lex_state; zend_op_array *op_array = NULL; zval tmp; + zend_string *filename_str; if (ZSTR_LEN(source_string) == 0) { return NULL; @@ -817,7 +814,9 @@ zend_op_array *compile_string(zend_string *source_string, const char *filename) ZVAL_STR_COPY(&tmp, source_string); zend_save_lexical_state(&original_lex_state); - zend_prepare_string_for_scanning(&tmp, filename); + filename_str = zend_string_init(filename, strlen(filename), 0); + zend_prepare_string_for_scanning(&tmp, filename_str); + zend_string_release(filename_str); BEGIN(ST_IN_SCRIPTING); op_array = zend_compile(ZEND_EVAL_CODE); @@ -851,13 +850,15 @@ zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *sy return SUCCESS; } -void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name) +void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *filename) { zend_lex_state original_lex_state; zval str_zv; + zend_string *filename_str = zend_string_init(filename, strlen(filename), 0); ZVAL_STR_COPY(&str_zv, str); zend_save_lexical_state(&original_lex_state); - zend_prepare_string_for_scanning(&str_zv, str_name); + zend_prepare_string_for_scanning(&str_zv, filename_str); + zend_string_release(filename_str); BEGIN(INITIAL); zend_highlight(syntax_highlighter_ini); if (SCNG(script_filtered)) { diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index 43296760e4..fba4c0a126 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -358,7 +358,7 @@ static bool tokenize(zval *return_value, zend_string *source, zend_class_entry * ZVAL_STR_COPY(&source_zval, source); zend_save_lexical_state(&original_lex_state); - zend_prepare_string_for_scanning(&source_zval, ""); + zend_prepare_string_for_scanning(&source_zval, ZSTR_EMPTY_ALLOC()); LANG_SCNG(yy_state) = yycINITIAL; zend_hash_init(&interned_strings, 0, NULL, NULL, 0); @@ -493,7 +493,7 @@ static bool tokenize_parse( CG(in_compilation) = 1; zend_save_lexical_state(&original_lex_state); - zend_prepare_string_for_scanning(&source_zval, ""); + zend_prepare_string_for_scanning(&source_zval, ZSTR_EMPTY_ALLOC()); array_init(&token_stream); ctx.tokens = &token_stream; |