summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2010-07-09 16:26:46 +0000
committerFelipe Pena <felipe@php.net>2010-07-09 16:26:46 +0000
commit4346721c5ce2bbc23abee209826843c5acb8c805 (patch)
tree9ee23426685b6213719873b515c2e9373ea07012
parentc25250396587e51274c0a4acc91d0bd2f033231e (diff)
downloadphp-git-4346721c5ce2bbc23abee209826843c5acb8c805.tar.gz
- Fixed $var[0] interpolation and close tag
-rw-r--r--Zend/zend_compile.c1
-rw-r--r--Zend/zend_language_parser.y2
-rw-r--r--Zend/zend_language_scanner.c234
-rw-r--r--Zend/zend_language_scanner.l4
-rw-r--r--Zend/zend_language_scanner_defs.h2
5 files changed, 130 insertions, 113 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index f32dd5a66e..18cf11584a 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -6146,6 +6146,7 @@ again:
if (CG(has_bracketed_namespaces) && !CG(in_namespace)) {
break;
}
+ token = T_SEMICOLON;
default:
break;
}
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 04077ffef9..ac02c9563b 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -1084,6 +1084,8 @@ expr_without_variable(A) ::= expr(B) MINUS expr(C). { zend_do_binary_op(ZEND_SU
expr_without_variable(A) ::= expr(B) MULT expr(C). { zend_do_binary_op(ZEND_MUL, &A, &B, &C TSRMLS_CC); }
expr_without_variable(A) ::= expr(B) DIV expr(C). { zend_do_binary_op(ZEND_DIV, &A, &B, &C TSRMLS_CC); }
expr_without_variable(A) ::= expr(B) MOD expr(C). { zend_do_binary_op(ZEND_MOD, &A, &B, &C TSRMLS_CC); }
+//expr_without_variable(A) ::= PLUS(B) expr(C). [INC] { ZVAL_LONG(&B.u.constant, 0); if (C.op_type == IS_CONST) { add_function(&C.u.constant, &B.u.constant, &C.u.constant TSRMLS_CC); A = C; } else { B.op_type = IS_CONST; INIT_PZVAL(&B.u.constant); zend_do_binary_op(ZEND_ADD, &A, &B, &C TSRMLS_CC); } }
+//expr_without_variable(A) ::= MINUS(B) expr(C). [INC] { ZVAL_LONG(&B.u.constant, 0); if (C.op_type == IS_CONST) { sub_function(&C.u.constant, &B.u.constant, &C.u.constant TSRMLS_CC); A = C; } else { B.op_type = IS_CONST; INIT_PZVAL(&B.u.constant); zend_do_binary_op(ZEND_SUB, &A, &B, &C TSRMLS_CC); } }
expr_without_variable(A) ::= BOOL_NOT expr(B). { zend_do_unary_op(ZEND_BOOL_NOT, &A, &B TSRMLS_CC); }
expr_without_variable(A) ::= BW_NOT expr(B). { zend_do_unary_op(ZEND_BW_NOT, &A, &B TSRMLS_CC); }
expr_without_variable(A) ::= expr(B) IS_IDENTICAL expr(C). { zend_do_binary_op(ZEND_IS_IDENTICAL, &A, &B, &C TSRMLS_CC); }
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 237fd1af1c..eb4d872b83 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Fri Jul 9 12:20:45 2010 */
+/* Generated by re2c 0.13.5 on Fri Jul 9 13:08:43 2010 */
#line 1 "Zend/zend_language_scanner.l"
/*
+----------------------------------------------------------------------+
@@ -1432,7 +1432,7 @@ yyc_ST_BACKQUOTE:
yy56:
YYDEBUG(56, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2194 "Zend/zend_language_scanner.l"
+#line 2198 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -1484,7 +1484,7 @@ yy58:
++YYCURSOR;
YYDEBUG(59, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2138 "Zend/zend_language_scanner.l"
+#line 2142 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
return T_BACKQUOTE;
@@ -1499,7 +1499,7 @@ yy61:
++YYCURSOR;
YYDEBUG(62, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2125 "Zend/zend_language_scanner.l"
+#line 2129 "Zend/zend_language_scanner.l"
{
zendlval->value.lval = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1655,7 +1655,7 @@ yy77:
yy78:
YYDEBUG(78, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2144 "Zend/zend_language_scanner.l"
+#line 2148 "Zend/zend_language_scanner.l"
{
if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1715,7 +1715,7 @@ yy80:
++YYCURSOR;
YYDEBUG(81, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2133 "Zend/zend_language_scanner.l"
+#line 2137 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
return T_QUOTE;
@@ -1730,7 +1730,7 @@ yy83:
++YYCURSOR;
YYDEBUG(84, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2125 "Zend/zend_language_scanner.l"
+#line 2129 "Zend/zend_language_scanner.l"
{
zendlval->value.lval = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1829,7 +1829,7 @@ yyc_ST_END_HEREDOC:
++YYCURSOR;
YYDEBUG(100, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2112 "Zend/zend_language_scanner.l"
+#line 2116 "Zend/zend_language_scanner.l"
{
YYCURSOR += CG(heredoc_len) - 1;
yyleng = CG(heredoc_len);
@@ -1903,7 +1903,7 @@ yy103:
yy104:
YYDEBUG(104, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2236 "Zend/zend_language_scanner.l"
+#line 2240 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -1989,7 +1989,7 @@ yy107:
++YYCURSOR;
YYDEBUG(108, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2125 "Zend/zend_language_scanner.l"
+#line 2129 "Zend/zend_language_scanner.l"
{
zendlval->value.lval = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -2269,7 +2269,7 @@ yy125:
yy126:
YYDEBUG(126, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1846 "Zend/zend_language_scanner.l"
+#line 1850 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
zendlval->type = IS_STRING;
@@ -3056,7 +3056,7 @@ yy204:
yy205:
YYDEBUG(205, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1853 "Zend/zend_language_scanner.l"
+#line 1857 "Zend/zend_language_scanner.l"
{
while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR++) {
@@ -3097,7 +3097,7 @@ yy206:
yy207:
YYDEBUG(207, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1944 "Zend/zend_language_scanner.l"
+#line 1948 "Zend/zend_language_scanner.l"
{
register char *s, *t;
char *end;
@@ -3174,7 +3174,7 @@ yy208:
yy209:
YYDEBUG(209, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2015 "Zend/zend_language_scanner.l"
+#line 2019 "Zend/zend_language_scanner.l"
{
int bprefix = (yytext[0] != '"') ? 1 : 0;
@@ -3221,7 +3221,7 @@ yy210:
++YYCURSOR;
YYDEBUG(211, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2106 "Zend/zend_language_scanner.l"
+#line 2110 "Zend/zend_language_scanner.l"
{
BEGIN(ST_BACKQUOTE);
return T_BACKQUOTE;
@@ -3232,7 +3232,7 @@ yy212:
++YYCURSOR;
YYDEBUG(213, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2371 "Zend/zend_language_scanner.l"
+#line 2375 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -3492,7 +3492,7 @@ yy246:
yy247:
YYDEBUG(247, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1930 "Zend/zend_language_scanner.l"
+#line 1934 "Zend/zend_language_scanner.l"
{
if (CG(asp_tags)) {
BEGIN(INITIAL);
@@ -3533,7 +3533,7 @@ yy252:
yy253:
YYDEBUG(253, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1887 "Zend/zend_language_scanner.l"
+#line 1891 "Zend/zend_language_scanner.l"
{
int doc_com;
@@ -3734,7 +3734,7 @@ yy282:
yy283:
YYDEBUG(283, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1921 "Zend/zend_language_scanner.l"
+#line 1925 "Zend/zend_language_scanner.l"
{
zendlval->value.str.val = yytext; /* no copying - intentional */
zendlval->value.str.len = yyleng;
@@ -3866,7 +3866,7 @@ yy297:
yy298:
YYDEBUG(298, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2057 "Zend/zend_language_scanner.l"
+#line 2061 "Zend/zend_language_scanner.l"
{
char *s;
int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -8383,7 +8383,7 @@ yyc_ST_NOWDOC:
++YYCURSOR;
YYDEBUG(932, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2308 "Zend/zend_language_scanner.l"
+#line 2312 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -8482,22 +8482,22 @@ yyc_ST_VAR_OFFSET:
if (yych <= '/') {
if (yych <= ' ') {
if (yych <= '\f') {
- if (yych <= 0x08) goto yy947;
- if (yych <= '\n') goto yy943;
- goto yy947;
+ if (yych <= 0x08) goto yy949;
+ if (yych <= '\n') goto yy945;
+ goto yy949;
} else {
- if (yych <= '\r') goto yy943;
- if (yych <= 0x1F) goto yy947;
- goto yy943;
+ if (yych <= '\r') goto yy945;
+ if (yych <= 0x1F) goto yy949;
+ goto yy945;
}
} else {
if (yych <= '$') {
- if (yych <= '"') goto yy942;
- if (yych <= '#') goto yy943;
+ if (yych <= '"') goto yy944;
+ if (yych <= '#') goto yy945;
goto yy938;
} else {
- if (yych == '\'') goto yy943;
- goto yy942;
+ if (yych == '\'') goto yy945;
+ goto yy944;
}
}
} else {
@@ -8505,22 +8505,22 @@ yyc_ST_VAR_OFFSET:
if (yych <= '@') {
if (yych <= '0') goto yy935;
if (yych <= '9') goto yy937;
- goto yy942;
+ goto yy944;
} else {
- if (yych <= 'Z') goto yy945;
- if (yych <= '[') goto yy942;
- goto yy943;
+ if (yych <= 'Z') goto yy947;
+ if (yych <= '[') goto yy940;
+ goto yy945;
}
} else {
if (yych <= '_') {
- if (yych <= ']') goto yy940;
- if (yych <= '^') goto yy942;
- goto yy945;
+ if (yych <= ']') goto yy942;
+ if (yych <= '^') goto yy944;
+ goto yy947;
} else {
- if (yych <= '`') goto yy942;
- if (yych <= 'z') goto yy945;
- if (yych <= '~') goto yy942;
- goto yy945;
+ if (yych <= '`') goto yy944;
+ if (yych <= 'z') goto yy947;
+ if (yych <= '~') goto yy944;
+ goto yy947;
}
}
}
@@ -8530,10 +8530,10 @@ yy935:
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'W') {
if (yych <= '/') goto yy936;
- if (yych <= '9') goto yy958;
+ if (yych <= '9') goto yy960;
} else {
- if (yych <= 'X') goto yy956;
- if (yych == 'x') goto yy956;
+ if (yych <= 'X') goto yy958;
+ if (yych == 'x') goto yy958;
}
yy936:
YYDEBUG(936, *YYCURSOR);
@@ -8554,23 +8554,23 @@ yy936:
yy937:
YYDEBUG(937, *YYCURSOR);
yych = *++YYCURSOR;
- goto yy955;
+ goto yy957;
yy938:
YYDEBUG(938, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) <= '_') {
if (yych <= '@') goto yy939;
- if (yych <= 'Z') goto yy951;
- if (yych >= '_') goto yy951;
+ if (yych <= 'Z') goto yy953;
+ if (yych >= '_') goto yy953;
} else {
if (yych <= '`') goto yy939;
- if (yych <= 'z') goto yy951;
- if (yych >= 0x7F) goto yy951;
+ if (yych <= 'z') goto yy953;
+ if (yych >= 0x7F) goto yy953;
}
yy939:
YYDEBUG(939, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1834 "Zend/zend_language_scanner.l"
+#line 1838 "Zend/zend_language_scanner.l"
{
/* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
return yytext[0];
@@ -8583,48 +8583,58 @@ yy940:
yyleng = YYCURSOR - SCNG(yy_text);
#line 1829 "Zend/zend_language_scanner.l"
{
- yy_pop_state(TSRMLS_C);
- return T_RBRACKET;
+ return T_LBRACKET;
}
-#line 8590 "Zend/zend_language_scanner.c"
+#line 8589 "Zend/zend_language_scanner.c"
yy942:
YYDEBUG(942, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(943, *YYCURSOR);
+ yyleng = YYCURSOR - SCNG(yy_text);
+#line 1833 "Zend/zend_language_scanner.l"
+ {
+ yy_pop_state(TSRMLS_C);
+ return T_RBRACKET;
+}
+#line 8600 "Zend/zend_language_scanner.c"
+yy944:
+ YYDEBUG(944, *YYCURSOR);
yych = *++YYCURSOR;
goto yy939;
-yy943:
- YYDEBUG(943, *YYCURSOR);
+yy945:
+ YYDEBUG(945, *YYCURSOR);
++YYCURSOR;
- YYDEBUG(944, *YYCURSOR);
+ YYDEBUG(946, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1839 "Zend/zend_language_scanner.l"
+#line 1843 "Zend/zend_language_scanner.l"
{
/* Invalid rule to return a more explicit parse error with proper line number */
yyless(0);
yy_pop_state(TSRMLS_C);
return T_ENCAPSED_AND_WHITESPACE;
}
-#line 8607 "Zend/zend_language_scanner.c"
-yy945:
- YYDEBUG(945, *YYCURSOR);
+#line 8617 "Zend/zend_language_scanner.c"
+yy947:
+ YYDEBUG(947, *YYCURSOR);
++YYCURSOR;
yych = *YYCURSOR;
- goto yy950;
-yy946:
- YYDEBUG(946, *YYCURSOR);
+ goto yy952;
+yy948:
+ YYDEBUG(948, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1846 "Zend/zend_language_scanner.l"
+#line 1850 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
zendlval->type = IS_STRING;
return T_STRING;
}
-#line 8622 "Zend/zend_language_scanner.c"
-yy947:
- YYDEBUG(947, *YYCURSOR);
+#line 8632 "Zend/zend_language_scanner.c"
+yy949:
+ YYDEBUG(949, *YYCURSOR);
++YYCURSOR;
- YYDEBUG(948, *YYCURSOR);
+ YYDEBUG(950, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2371 "Zend/zend_language_scanner.l"
+#line 2375 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -8633,41 +8643,41 @@ yy947:
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
goto restart;
}
-#line 8637 "Zend/zend_language_scanner.c"
-yy949:
- YYDEBUG(949, *YYCURSOR);
+#line 8647 "Zend/zend_language_scanner.c"
+yy951:
+ YYDEBUG(951, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
-yy950:
- YYDEBUG(950, *YYCURSOR);
+yy952:
+ YYDEBUG(952, *YYCURSOR);
if (yybm[0+yych] & 32) {
- goto yy949;
+ goto yy951;
}
- goto yy946;
-yy951:
- YYDEBUG(951, *YYCURSOR);
+ goto yy948;
+yy953:
+ YYDEBUG(953, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(952, *YYCURSOR);
+ YYDEBUG(954, *YYCURSOR);
if (yych <= '^') {
if (yych <= '9') {
- if (yych >= '0') goto yy951;
+ if (yych >= '0') goto yy953;
} else {
- if (yych <= '@') goto yy953;
- if (yych <= 'Z') goto yy951;
+ if (yych <= '@') goto yy955;
+ if (yych <= 'Z') goto yy953;
}
} else {
if (yych <= '`') {
- if (yych <= '_') goto yy951;
+ if (yych <= '_') goto yy953;
} else {
- if (yych <= 'z') goto yy951;
- if (yych >= 0x7F) goto yy951;
+ if (yych <= 'z') goto yy953;
+ if (yych >= 0x7F) goto yy953;
}
}
-yy953:
- YYDEBUG(953, *YYCURSOR);
+yy955:
+ YYDEBUG(955, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
#line 1823 "Zend/zend_language_scanner.l"
{
@@ -8675,37 +8685,37 @@ yy953:
zendlval->type = IS_STRING;
return T_VARIABLE;
}
-#line 8679 "Zend/zend_language_scanner.c"
-yy954:
- YYDEBUG(954, *YYCURSOR);
+#line 8689 "Zend/zend_language_scanner.c"
+yy956:
+ YYDEBUG(956, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
-yy955:
- YYDEBUG(955, *YYCURSOR);
+yy957:
+ YYDEBUG(957, *YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy954;
+ goto yy956;
}
goto yy936;
-yy956:
- YYDEBUG(956, *YYCURSOR);
+yy958:
+ YYDEBUG(958, *YYCURSOR);
yych = *++YYCURSOR;
if (yybm[0+yych] & 128) {
- goto yy961;
+ goto yy963;
}
- YYDEBUG(957, *YYCURSOR);
+ YYDEBUG(959, *YYCURSOR);
YYCURSOR = YYMARKER;
goto yy936;
-yy958:
- YYDEBUG(958, *YYCURSOR);
+yy960:
+ YYDEBUG(960, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(959, *YYCURSOR);
- if (yych <= '/') goto yy960;
- if (yych <= '9') goto yy958;
-yy960:
- YYDEBUG(960, *YYCURSOR);
+ YYDEBUG(961, *YYCURSOR);
+ if (yych <= '/') goto yy962;
+ if (yych <= '9') goto yy960;
+yy962:
+ YYDEBUG(962, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
#line 1536 "Zend/zend_language_scanner.l"
{ /* Offset must be treated as a string */
@@ -8714,19 +8724,19 @@ yy960:
zendlval->type = IS_STRING;
return T_NUM_STRING;
}
-#line 8718 "Zend/zend_language_scanner.c"
-yy961:
- YYDEBUG(961, *YYCURSOR);
+#line 8728 "Zend/zend_language_scanner.c"
+yy963:
+ YYDEBUG(963, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(962, *YYCURSOR);
+ YYDEBUG(964, *YYCURSOR);
if (yybm[0+yych] & 128) {
- goto yy961;
+ goto yy963;
}
- goto yy960;
+ goto yy962;
}
}
-#line 2380 "Zend/zend_language_scanner.l"
+#line 2384 "Zend/zend_language_scanner.l"
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index f8b29e440f..f892a0a721 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1826,6 +1826,10 @@ inline_html:
return T_VARIABLE;
}
+<ST_VAR_OFFSET>"[" {
+ return T_LBRACKET;
+}
+
<ST_VAR_OFFSET>"]" {
yy_pop_state(TSRMLS_C);
return T_RBRACKET;
diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h
index 3d54a1b719..3849cac405 100644
--- a/Zend/zend_language_scanner_defs.h
+++ b/Zend/zend_language_scanner_defs.h
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Fri Jul 9 12:20:45 2010 */
+/* Generated by re2c 0.13.5 on Fri Jul 9 13:08:43 2010 */
#line 3 "Zend/zend_language_scanner_defs.h"
enum YYCONDTYPE {