diff options
author | Sara Golemon <pollita@php.net> | 2017-03-23 13:38:58 -0700 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2017-03-23 13:38:58 -0700 |
commit | 7835e2ebc5704d5bd8c1baa1cf98cf94facff740 (patch) | |
tree | d6a564f3e912395434d3b7893484cb8cf088d187 /Zend | |
parent | a0331127fe25886f7772ccbbca28cd568e3da96a (diff) | |
parent | 0fb640c71763ddb1b8017c87cec10fc76764feff (diff) | |
download | php-git-7835e2ebc5704d5bd8c1baa1cf98cf94facff740.tar.gz |
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0:
Fix bug where `yield from` is captured too greedily
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/tests/generators/yield_from_greedy_parse.phpt | 24 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 3 |
2 files changed, 26 insertions, 1 deletions
diff --git a/Zend/tests/generators/yield_from_greedy_parse.phpt b/Zend/tests/generators/yield_from_greedy_parse.phpt new file mode 100644 index 0000000000..598fb515b4 --- /dev/null +++ b/Zend/tests/generators/yield_from_greedy_parse.phpt @@ -0,0 +1,24 @@ +--TEST-- +yield from parses too greedily +--FILE-- +<?php + +function from1234($x) { + return $x; +} + +function bar() { + yield 24; +} + +function foo() { + yield from1234(42); + yield from(bar()); +} + +foreach (foo() as $value) { + var_dump($value); +} +--EXPECT-- +int(42) +int(24) diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 1ac7b53a89..ff65ebd999 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1142,7 +1142,8 @@ NEWLINE ("\r"|"\n"|"\r\n") RETURN_TOKEN(T_RETURN); } -<ST_IN_SCRIPTING>"yield"{WHITESPACE}"from" { +<ST_IN_SCRIPTING>"yield"{WHITESPACE}"from"[^a-zA-Z0-9_\x80-\xff] { + yyless(--yyleng); HANDLE_NEWLINES(yytext, yyleng); RETURN_TOKEN(T_YIELD_FROM); } |