]> granicus.if.org Git - php/commitdiff
Fix an off by one lineno issue, in case of an implicit ;
authorZeev Suraski <zeev@php.net>
Mon, 6 Aug 2001 14:36:46 +0000 (14:36 +0000)
committerZeev Suraski <zeev@php.net>
Mon, 6 Aug 2001 14:36:46 +0000 (14:36 +0000)
Zend/zend_compile.c
Zend/zend_globals.h
Zend/zend_language_scanner.l

index 04a992fd46d9a6f35806412e7fa7fc33deab4426..5422bff2ad5a29c728f35c4d3b48c3e9613c0d47 100644 (file)
@@ -2365,6 +2365,11 @@ int zendlex(znode *zendlval TSRMLS_DC)
 {
        int retval;
 
+       if (CG(increment_lineno)) {
+               CG(zend_lineno)++;
+               CG(increment_lineno) = 0;
+       }
+
        zendlval->u.constant.type = IS_LONG;
        retval = lex_scan(&zendlval->u.constant TSRMLS_CC);
        switch(retval) {
@@ -2374,6 +2379,10 @@ int zendlex(znode *zendlval TSRMLS_DC)
                        retval = zendlex(zendlval TSRMLS_CC);
                        break;
                case T_CLOSE_TAG:
+                       if (LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-1]=='\n'
+                               || (LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-2]=='\r' && LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-1])) {
+                               CG(increment_lineno) = 1;
+                       }
                        retval = ';'; /* implicit ; */
                        break;
                case T_OPEN_TAG_WITH_ECHO:
index f010adf338d0e3560d3dacff87f4e41be9429633..65aa6eda747f58ab7199d3ae19fc44a176220e25 100644 (file)
@@ -122,6 +122,8 @@ struct _zend_compiler_globals {
        struct _zend_ini_parser_param *ini_parser_param;
 
        int interactive;
+
+       zend_bool increment_lineno;
 };
 
 
index 37be5e79941ee1ec80f9b841cfb1ec5d6b419a67..f5f79e7ae4a6a402586ea1a03b61a377c1083e03 100644 (file)
@@ -322,6 +322,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
 
        zend_set_compiled_filename(file_path TSRMLS_CC);
        CG(zend_lineno) = 1;
+       CG(increment_lineno) = 0;
        return SUCCESS;
 }
 END_EXTERN_C()
@@ -1233,7 +1234,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
        zendlval->type = IS_STRING;
-       HANDLE_NEWLINES(yytext, yyleng);
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
@@ -1245,7 +1245,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
                zendlval->value.str.len = yyleng;
                zendlval->type = IS_STRING;
                zendlval->value.str.val = yytext; /* no copying - intentional */
-               HANDLE_NEWLINES(yytext,yyleng);
                return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
        } else {
                yyless(1);