Hi,

as we introduce NOWDOC in 5.3 it would be logical to allow a double
quoted syntax sister of NOWDOC which acts as HEREDOC (same as for $var =
"$var" vs $var = '$var'). Currently we have the following options:

$var = "Hello world";

$str = <<<LABEL
$var
LABEL;

$str = <<<'LABEL'
$var
LABEL;

The first one is HEREDOC and $var would be evaluated. The second one is
NOWDOC and $var would be used literally. The following patch adds a
third version:

$str = <<<"LABEL"
$var
LABEL;

This acts as HEREDOC, therefore $var would be interpreted.

Comments?

cu, Lars
Index: Zend/zend_language_scanner.l
===================================================================
RCS file: /repository/ZendEngine2/zend_language_scanner.l,v
retrieving revision 1.131.2.11.2.13.2.9
diff -u -r1.131.2.11.2.13.2.9 zend_language_scanner.l
--- Zend/zend_language_scanner.l	22 Mar 2008 17:59:52 -0000	1.131.2.11.2.13.2.9
+++ Zend/zend_language_scanner.l	22 Mar 2008 20:12:19 -0000
@@ -1643,13 +1643,15 @@
 }
 
 
-<ST_IN_SCRIPTING>b?"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} {
+<ST_IN_SCRIPTING>b?"<<<"{TABS_AND_SPACES}["]?{LABEL}["]?{NEWLINE} {
 	char *s;
 	int bprefix = (yytext[0] != '<') ? 1 : 0;
+	int quotes = (yytext[3] == '"') ? 2 : 0;
+	int lquote = (quotes == 2) ? 1 : 0;
 
 	CG(zend_lineno)++;
-	CG(heredoc_len) = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
-	s = yytext+bprefix+3;
+	CG(heredoc_len) = yyleng-bprefix-quotes-3-1-(yytext[yyleng-2]=='\r'?1:0);
+	s = yytext+bprefix+3+lquote;
 	while ((*s == ' ') || (*s == '\t')) {
 		s++;
 		CG(heredoc_len)--;

Attachment: heredoc_012.phpt
Description: application/php

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to