From a458b4f6bdfba09d1812858aa4b28ae96eaefbd1 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Fri, 23 Apr 1999 10:21:00 +0000 Subject: [PATCH] Support eval() and highlight_string() in the C++ scanner --- Zend/zend-scanner.h | 1 + Zend/zend-scanner.l | 30 +++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Zend/zend-scanner.h b/Zend/zend-scanner.h index d20d923556..d97817c89d 100644 --- a/Zend/zend-scanner.h +++ b/Zend/zend-scanner.h @@ -22,6 +22,7 @@ class ZendFlexLexer : public yyFlexLexer { public: int lex_scan(zval *zendlval CLS_DC); + void BeginState(int state); }; #endif /* ZTS */ diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index 49239c7ccc..cf61b96288 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -36,6 +36,7 @@ #ifdef ZTS #include +#include #endif #include "zend.h" @@ -178,14 +179,13 @@ inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC) BEGIN(INITIAL); zend_set_compiled_filename(file_handle->filename); - return SUCCESS; #else ifstream *input_file = new ifstream(file_handle->filename); CG(ZFL) = new ZendFlexLexer; CG(ZFL)->switch_streams(input_file, &cout); - return SUCCESS; #endif + return SUCCESS; } END_EXTERN_C() @@ -273,15 +273,21 @@ zend_op_array *compile_filename(zval *filename CLS_DC) } -static inline int prepare_string_for_scanning(zval *str) +static inline int prepare_string_for_scanning(zval *str CLS_DC) { #ifndef ZTS /* enforce two trailing NULLs for flex... */ str->value.str.val = (char *) erealloc(str->value.str.val,str->value.str.len+2); + str->value.str.val[str->value.str.len+1]=0; yyin=NULL; yy_scan_buffer(str->value.str.val, str->value.str.len+2); +#else + istrstream *input_stream = new istrstream(str->value.str.val, str->value.str.len); + CG(ZFL) = new ZendFlexLexer; + + CG(ZFL)->switch_streams(input_stream, &cout); #endif return SUCCESS; } @@ -289,7 +295,6 @@ static inline int prepare_string_for_scanning(zval *str) zend_op_array *compile_string(zval *source_string CLS_DC) { -#ifndef ZTS zend_lex_state original_lex_state; zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); zend_op_array *original_active_op_array = CG(active_op_array); @@ -303,13 +308,17 @@ zend_op_array *compile_string(zval *source_string CLS_DC) init_op_array(op_array, INITIAL_OP_ARRAY_SIZE); save_lexical_state(&original_lex_state CLS_CC); - if (prepare_string_for_scanning(source_string)==FAILURE) { + if (prepare_string_for_scanning(source_string CLS_CC)==FAILURE) { destroy_op_array(op_array); efree(op_array); retval = NULL; } else { CG(active_op_array) = op_array; +#ifndef ZTS BEGIN(IN_SCRIPTING); +#else + CG(ZFL)->BeginState(IN_SCRIPTING); +#endif if (zendparse(CLS_C)==1) { retval = NULL; } else { @@ -324,9 +333,6 @@ zend_op_array *compile_string(zval *source_string CLS_DC) zval_dtor(&tmp); return retval; -#else - return NULL; -#endif } @@ -390,7 +396,7 @@ int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ str = &tmp; zval_copy_ctor(str); save_lexical_state(&original_lex_state CLS_CC); - if (prepare_string_for_scanning(str)==FAILURE) { + if (prepare_string_for_scanning(str CLS_CC)==FAILURE) { return FAILURE; } zend_highlight(syntax_highlighter_ini); @@ -407,6 +413,12 @@ int lex_scan(zval *zendlval CLS_DC) } +void ZendFlexLexer::BeginState(int state) +{ + BEGIN(state); +} + + int yyFlexLexer::yylex() { fprintf(stderr, "Error: yyFlexLexer::yylex() called\n"); -- 2.50.1