]> granicus.if.org Git - php/commitdiff
* Fix a problem with constant quoted strings, that was causing Thies's problem
authorZeev Suraski <zeev@php.net>
Fri, 30 Apr 1999 10:46:48 +0000 (10:46 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 30 Apr 1999 10:46:48 +0000 (10:46 +0000)
* Remove a development-time printf

Zend/zend-scanner.l
Zend/zend_compile.c

index 35f6f50f4027fb0272fbe95d67d5de2a331ba56b..28f8182bf34329bc95e167c2b02a1c52c46e85e9 100644 (file)
@@ -1019,7 +1019,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
 }
 
 
-<IN_SCRIPTING>(["]([^"$\\]|([\\]+[^\\$]))*["])|([']([^'\\]|([\\]+['\\]))*['])  {
+<IN_SCRIPTING>(["]([^$"\\]|("\\".))*["]) {
        register char *s, *t;
        char *end;
        
@@ -1051,9 +1051,6 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
                                        zendlval->value.str.len--;
                                        break;
                                case '\\':
-                                       *t++ = '\\';
-                                       zendlval->value.str.len--;
-                                       break;
                                case '$':
                                case '"':
                                        *t++ = *s;
@@ -1075,6 +1072,46 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
 }
 
 
+<IN_SCRIPTING>([']([^'\\]|("\\".))*[']) {
+       register char *s, *t;
+       char *end;
+       
+       zendlval->value.str.val = estrndup(yytext+1, yyleng-2);
+       zendlval->value.str.len = yyleng-2;
+       zendlval->type = IS_STRING;
+       HANDLE_NEWLINES(yytext,yyleng);
+       
+       /* convert escape sequences */
+       s = t = zendlval->value.str.val;
+       end = s+zendlval->value.str.len;
+       while (s<end) {
+               if (*s=='\\') {
+                       s++;
+                       if (s>=end) {
+                               continue;
+                       }
+                       switch(*s) {
+                               case '\\':
+                               case '\'':
+                                       *t++ = *s;
+                                       zendlval->value.str.len--;
+                                       break;
+                               default:
+                                       *t++ = '\\';
+                                       *t++ = *s;
+                                       break;
+                       }
+                       s++;
+               } else {
+                       *t++ = *s++;
+               }
+       }
+       *t = 0;
+       
+       return T_CONSTANT_ENCAPSED_STRING;
+}
+
+
 <IN_SCRIPTING>["] {
        BEGIN(DOUBLE_QUOTES);
        return '\"';
@@ -1298,8 +1335,6 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
 }
 
 
-
-
 <IN_SCRIPTING,INITIAL,DOUBLE_QUOTES,BACKQUOTE,SINGLE_QUOTE>. {
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d",yytext[0],yytext[0],YYSTATE);
 }
index f47cff1a51f2498fc3a44dda7dbe5e190aecc871..64a6b3926e8d01a52738ebb232eb5186eaf5fc91 100644 (file)
@@ -1249,7 +1249,6 @@ void do_fetch_constant(znode *result, znode *constant_name, int mode CLS_DC)
                case ZEND_CT:
                        *result = *constant_name;
                        result->u.constant.type = IS_CONSTANT;
-                       printf("Fetching compiletime constant:  '%s'\n", result->u.constant.value.str.val);
                        break;
                case ZEND_RT: {
                                zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);