]> granicus.if.org Git - php/commitdiff
MFB: fix remaining # comments issues
authorNuno Lopes <nlopess@php.net>
Tue, 8 Jul 2008 15:24:25 +0000 (15:24 +0000)
committerNuno Lopes <nlopess@php.net>
Tue, 8 Jul 2008 15:24:25 +0000 (15:24 +0000)
Zend/zend_language_scanner.l

index 4858257a472570cd99509627946cdbc7ee9522cb..69ab6ce4c120b36e529421ad9ac7e73006040763 100644 (file)
@@ -1336,6 +1336,25 @@ yymore_restart:
                return 0;
        }
 
+       /* ignore first line when it's started with a # */
+       if (YYCURSOR == SCNG(yy_start) && *YYCURSOR == '#') {
+               while (++YYCURSOR < YYLIMIT) {
+                       if (*YYCURSOR == '\n') {
+                               ++YYCURSOR;
+                               goto restart;
+                       }
+
+                       if (*YYCURSOR == '\r') {
+                               if (++YYCURSOR < YYLIMIT && *YYCURSOR == '\n') { /* match \r\n as single newline */
+                                       ++YYCURSOR;
+                               }
+                               goto restart;
+                       }
+               }
+
+               return 0; /* EOF */
+       }
+
 /*!re2c
 re2c:yyfill:check = 0;
 LNUM   [0-9]+
@@ -2088,10 +2107,7 @@ NOWDOC_CHARS             ({NEWLINE}*(([^a-zA-Z_\x7f-\xff\n\r][^\n\r]*)|({LABEL}[^a-zA-Z0-9_
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG_WITH_ECHO;
        } else {
-               Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
-               Z_STRLEN_P(zendlval) = yyleng;
-               Z_TYPE_P(zendlval) = IS_STRING;
-               return T_INLINE_HTML;
+               goto inline_char_handler;
        }
 }
 
@@ -2104,10 +2120,7 @@ NOWDOC_CHARS             ({NEWLINE}*(([^a-zA-Z_\x7f-\xff\n\r][^\n\r]*)|({LABEL}[^a-zA-Z0-9_
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG_WITH_ECHO;
        } else {
-               Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
-               Z_STRLEN_P(zendlval) = yyleng;
-               Z_TYPE_P(zendlval) = IS_STRING;
-               return T_INLINE_HTML;
+               goto inline_char_handler;
        }
 }
 
@@ -2120,10 +2133,7 @@ NOWDOC_CHARS             ({NEWLINE}*(([^a-zA-Z_\x7f-\xff\n\r][^\n\r]*)|({LABEL}[^a-zA-Z0-9_
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG;
        } else {
-               Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
-               Z_STRLEN_P(zendlval) = yyleng;
-               Z_TYPE_P(zendlval) = IS_STRING;
-               return T_INLINE_HTML;
+               goto inline_char_handler;
        }
 }
 
@@ -2139,7 +2149,6 @@ NOWDOC_CHARS              ({NEWLINE}*(([^a-zA-Z_\x7f-\xff\n\r][^\n\r]*)|({LABEL}[^a-zA-Z0-9_
 
 
 <INITIAL>"<?" {
-       HANDLE_NEWLINES(yytext, yyleng);
        if (CG(short_tags)) {
                Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
                Z_STRLEN_P(zendlval) = yyleng;
@@ -2147,19 +2156,6 @@ NOWDOC_CHARS             ({NEWLINE}*(([^a-zA-Z_\x7f-\xff\n\r][^\n\r]*)|({LABEL}[^a-zA-Z0-9_
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG;
        } else {
-               Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
-               Z_STRLEN_P(zendlval) = yyleng;
-               Z_TYPE_P(zendlval) = IS_STRING;
-               return T_INLINE_HTML;
-       }
-}
-
-<INITIAL>"#".+ {NEWLINE} {
-       if ((YYCTYPE*)yytext == SCNG(yy_start)) {
-               /* ignore first line when it's started with a # */
-               goto restart;
-       } else {
-               YYCURSOR = yytext+1;
                goto inline_char_handler;
        }
 }
@@ -2179,8 +2175,8 @@ inline_char_handler:
                } else {
                        YYCURSOR = ptr + 1;
 
-                       /* if it can be an opening tag, stop */
-                       if (YYCURSOR < YYLIMIT && (*YYCURSOR == '?' || *YYCURSOR == '%')) {
+                       /* stop if it may be an opening tag (<?, <%, <script>). this condition is not optimal though */
+                       if (YYCURSOR < YYLIMIT && (*YYCURSOR == '?' || *YYCURSOR == '%' || *YYCURSOR == 's')) {
                                --YYCURSOR;
                                yyleng = YYCURSOR - SCNG(yy_text);
                                break;