-/* Generated by re2c 0.13.5 on Tue Jun 29 22:47:47 2010 */
+/* Generated by re2c 0.13.5 on Tue Jun 29 23:34:41 2010 */
#line 1 "Zend/zend_language_scanner.l"
/*
+----------------------------------------------------------------------+
static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC)
{
YYCURSOR = (YYCTYPE*)str;
- SCNG(yy_start) = YYCURSOR;
YYLIMIT = YYCURSOR + len;
+ if (!SCNG(yy_start)) {
+ SCNG(yy_start) = YYCURSOR;
+ }
}
void startup_scanner(TSRMLS_D)
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
{
char *file_path = NULL, *buf;
- size_t size;
+ size_t size, offset = 0;
+
+ /* The shebang line was read, get the current position to obtain the buffer start */
+ if (CG(start_lineno) == 2 && file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp) {
+ if ((offset = ftell(file_handle->handle.fp)) == -1) {
+ offset = 0;
+ }
+ }
if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {
return FAILURE;
/* Reset the scanner for scanning the new file */
SCNG(yy_in) = file_handle;
+ SCNG(yy_start) = NULL;
if (size != -1) {
#ifdef ZEND_MULTIBYTE
} else {
SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC);
}
-
+ SCNG(yy_start) = SCNG(script_filtered) - offset;
yy_scan_buffer((char *)SCNG(script_filtered), SCNG(script_filtered_size) TSRMLS_CC);
#else /* !ZEND_MULTIBYTE */
+ SCNG(yy_start) = buf - offset;
yy_scan_buffer(buf, size TSRMLS_CC);
#endif /* ZEND_MULTIBYTE */
} else {
memset(str->value.str.val + str->value.str.len, 0, ZEND_MMAP_AHEAD);
SCNG(yy_in)=NULL;
+ SCNG(yy_start) = NULL;
#ifdef ZEND_MULTIBYTE
SCNG(script_org) = (unsigned char *)estrdup(str->value.str.val);
++YYCURSOR;
YYDEBUG(246, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1291 "Zend/zend_language_scanner.l"
+#line 1303 "Zend/zend_language_scanner.l"
{
return T_SR_EQUAL;
}
static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC)
{
YYCURSOR = (YYCTYPE*)str;
- SCNG(yy_start) = YYCURSOR;
YYLIMIT = YYCURSOR + len;
+ if (!SCNG(yy_start)) {
+ SCNG(yy_start) = YYCURSOR;
+ }
}
void startup_scanner(TSRMLS_D)
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
{
char *file_path = NULL, *buf;
- size_t size;
+ size_t size, offset = 0;
+
+ /* The shebang line was read, get the current position to obtain the buffer start */
+ if (CG(start_lineno) == 2 && file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp) {
+ if ((offset = ftell(file_handle->handle.fp)) == -1) {
+ offset = 0;
+ }
+ }
if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {
return FAILURE;
/* Reset the scanner for scanning the new file */
SCNG(yy_in) = file_handle;
+ SCNG(yy_start) = NULL;
if (size != -1) {
#ifdef ZEND_MULTIBYTE
} else {
SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC);
}
-
+ SCNG(yy_start) = SCNG(script_filtered) - offset;
yy_scan_buffer((char *)SCNG(script_filtered), SCNG(script_filtered_size) TSRMLS_CC);
#else /* !ZEND_MULTIBYTE */
+ SCNG(yy_start) = buf - offset;
yy_scan_buffer(buf, size TSRMLS_CC);
#endif /* ZEND_MULTIBYTE */
} else {
memset(str->value.str.val + str->value.str.len, 0, ZEND_MMAP_AHEAD);
SCNG(yy_in)=NULL;
+ SCNG(yy_start) = NULL;
#ifdef ZEND_MULTIBYTE
SCNG(script_org) = (unsigned char *)estrdup(str->value.str.val);