Skip to content

Commit 1ae9566

Browse files
committed
File::isReference(): bug fix - closure return by reference not recognized
The `&` in a closure declared to return by reference was not recognized as a reference. Fixed now. Includes unit test.
1 parent 75ff420 commit 1ae9566

File tree

3 files changed

+8
-0
lines changed

3 files changed

+8
-0
lines changed

src/Files/File.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,7 @@ public function isReference($stackPtr)
19361936
);
19371937

19381938
if ($this->tokens[$tokenBefore]['code'] === T_FUNCTION
1939+
|| $this->tokens[$tokenBefore]['code'] === T_CLOSURE
19391940
|| $this->tokens[$tokenBefore]['code'] === T_FN
19401941
) {
19411942
// Function returns a reference.

tests/Core/File/IsReferenceTest.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,6 @@ $closure = function() use (&$var){};
139139

140140
/* testArrowFunctionReturnByReference */
141141
fn&($x) => $x;
142+
143+
/* testClosureReturnByReference */
144+
$closure = function &($param) use ($value) {};

tests/Core/File/IsReferenceTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,10 @@ public function dataIsReference()
228228
'/* testArrowFunctionReturnByReference */',
229229
true,
230230
],
231+
[
232+
'/* testClosureReturnByReference */',
233+
true,
234+
],
231235
];
232236

233237
}//end dataIsReference()

0 commit comments

Comments
 (0)