1
- /* Generated by re2c 0.13.5 on Tue Jun 29 22:47:47 2010 */
1
+ /* Generated by re2c 0.13.5 on Tue Jun 29 23:34:41 2010 */
2
2
#line 1 "Zend/zend_language_scanner.l"
3
3
/*
4
4
+----------------------------------------------------------------------+
@@ -141,8 +141,10 @@ static void yy_pop_state(TSRMLS_D)
141
141
static void yy_scan_buffer (char * str , unsigned int len TSRMLS_DC )
142
142
{
143
143
YYCURSOR = (YYCTYPE * )str ;
144
- SCNG (yy_start ) = YYCURSOR ;
145
144
YYLIMIT = YYCURSOR + len ;
145
+ if (!SCNG (yy_start )) {
146
+ SCNG (yy_start ) = YYCURSOR ;
147
+ }
146
148
}
147
149
148
150
void startup_scanner (TSRMLS_D )
@@ -243,7 +245,14 @@ ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
243
245
ZEND_API int open_file_for_scanning (zend_file_handle * file_handle TSRMLS_DC )
244
246
{
245
247
char * file_path = NULL , * buf ;
246
- size_t size ;
248
+ size_t size , offset = 0 ;
249
+
250
+ /* The shebang line was read, get the current position to obtain the buffer start */
251
+ if (CG (start_lineno ) == 2 && file_handle -> type == ZEND_HANDLE_FP && file_handle -> handle .fp ) {
252
+ if ((offset = ftell (file_handle -> handle .fp )) == -1 ) {
253
+ offset = 0 ;
254
+ }
255
+ }
247
256
248
257
if (zend_stream_fixup (file_handle , & buf , & size TSRMLS_CC ) == FAILURE ) {
249
258
return FAILURE ;
@@ -259,6 +268,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
259
268
260
269
/* Reset the scanner for scanning the new file */
261
270
SCNG (yy_in ) = file_handle ;
271
+ SCNG (yy_start ) = NULL ;
262
272
263
273
if (size != -1 ) {
264
274
#ifdef ZEND_MULTIBYTE
@@ -277,9 +287,10 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
277
287
} else {
278
288
SCNG (input_filter )(& SCNG (script_filtered ), & SCNG (script_filtered_size ), SCNG (script_org ), SCNG (script_org_size ) TSRMLS_CC );
279
289
}
280
-
290
+ SCNG ( yy_start ) = SCNG ( script_filtered ) - offset ;
281
291
yy_scan_buffer ((char * )SCNG (script_filtered ), SCNG (script_filtered_size ) TSRMLS_CC );
282
292
#else /* !ZEND_MULTIBYTE */
293
+ SCNG (yy_start ) = buf - offset ;
283
294
yy_scan_buffer (buf , size TSRMLS_CC );
284
295
#endif /* ZEND_MULTIBYTE */
285
296
} else {
@@ -421,6 +432,7 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
421
432
memset (str -> value .str .val + str -> value .str .len , 0 , ZEND_MMAP_AHEAD );
422
433
423
434
SCNG (yy_in )= NULL ;
435
+ SCNG (yy_start ) = NULL ;
424
436
425
437
#ifdef ZEND_MULTIBYTE
426
438
SCNG (script_org ) = (unsigned char * )estrdup (str -> value .str .val );
@@ -3514,7 +3526,7 @@ int lex_scan(zval *zendlval TSRMLS_DC)
3514
3526
++ YYCURSOR ;
3515
3527
YYDEBUG (246 , * YYCURSOR );
3516
3528
yyleng = YYCURSOR - SCNG (yy_text );
3517
- #line 1291 "Zend/zend_language_scanner.l"
3529
+ #line 1303 "Zend/zend_language_scanner.l"
3518
3530
{
3519
3531
return T_SR_EQUAL ;
3520
3532
}
0 commit comments