summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2001-08-01 02:36:05 +0000
committerZeev Suraski <zeev@php.net>2001-08-01 02:36:05 +0000
commitf93bfc47dfd09a271ef5b96cd4430722e40d0085 (patch)
treeb00ad67675e3881b26ef3814cff10f8b02f9f381
parent0ccc2fd9eff3718ad560a2dd6dc0cd313235491c (diff)
downloadphp-git-f93bfc47dfd09a271ef5b96cd4430722e40d0085.tar.gz
Implement fast scanning in the multithreaded environment
-rw-r--r--Zend/flex.skl39
-rw-r--r--Zend/zend_language_scanner.l2
2 files changed, 17 insertions, 24 deletions
diff --git a/Zend/flex.skl b/Zend/flex.skl
index 50be07a40f..fb60c3ec9f 100644
--- a/Zend/flex.skl
+++ b/Zend/flex.skl
@@ -693,34 +693,29 @@ void yyFlexLexer::switch_streams( istream* new_in, ostream* new_out )
yyout = new_out;
}
-#ifdef YY_INTERACTIVE
-int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
-#else
int yyFlexLexer::LexerInput( char* buf, int max_size )
-#endif
{
- if ( yyin->eof() || yyin->fail() )
- return 0;
+ if ( yyin->eof() || yyin->fail() )
+ return 0;
-#ifdef YY_INTERACTIVE
- yyin->get( buf[0] );
+ if (yy_current_buffer->yy_is_interactive) {
+ yyin->get( buf[0] );
- if ( yyin->eof() )
- return 0;
-
- if ( yyin->bad() )
- return -1;
+ if ( yyin->eof() )
+ return 0;
- return 1;
+ if ( yyin->bad() )
+ return -1;
-#else
- (void) yyin->read( buf, max_size );
+ return 1;
+ } else {
+ (void) yyin->read( buf, max_size );
- if ( yyin->bad() )
- return -1;
- else
- return yyin->gcount();
-#endif
+ if ( yyin->bad() )
+ return -1;
+ else
+ return yyin->gcount();
+ }
}
void yyFlexLexer::LexerOutput( const char* buf, int size )
@@ -1213,7 +1208,7 @@ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, istream* file )
#endif
#endif
%+
- b->yy_is_interactive = 0;
+ b->yy_is_interactive = (file == (istream *) &cin) ? 1 : 0;
%*
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 71e63d1820..9b19423fc2 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -78,8 +78,6 @@
#define YY_DECL int lex_scan(zval *zendlval TSRMLS_DC)
#endif
-#define YY_INTERACTIVE
-
#define ECHO { ZEND_WRITE( yytext, yyleng ); }
#ifdef ZTS