diff options
author | Felipe Pena <felipe@php.net> | 2010-07-09 16:26:46 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2010-07-09 16:26:46 +0000 |
commit | 4346721c5ce2bbc23abee209826843c5acb8c805 (patch) | |
tree | 9ee23426685b6213719873b515c2e9373ea07012 | |
parent | c25250396587e51274c0a4acc91d0bd2f033231e (diff) | |
download | php-git-4346721c5ce2bbc23abee209826843c5acb8c805.tar.gz |
- Fixed $var[0] interpolation and close tag
-rw-r--r-- | Zend/zend_compile.c | 1 | ||||
-rw-r--r-- | Zend/zend_language_parser.y | 2 | ||||
-rw-r--r-- | Zend/zend_language_scanner.c | 234 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 4 | ||||
-rw-r--r-- | Zend/zend_language_scanner_defs.h | 2 |
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 { |