@@ -131,10 +131,12 @@ module LocalFlow {
131131 nodeTo = TReturnNodeImpl ( cfgNode .getScope ( ) )
132132 )
133133 or
134- exists ( CfgNode cfgNode |
135- cfgNode = nodeFrom .( AstNode ) .getCfgNode ( ) and
136- isUniqueReturned ( cfgNode ) and
137- nodeTo .( ReturnNodeImpl ) .getCfgScope ( ) = cfgNode .getScope ( )
134+ exists ( CfgNodes:: ExprCfgNode e , CfgNodes:: ScriptBlockCfgNode scriptBlock |
135+ e = nodeFrom .( AstNode ) .getCfgNode ( ) and
136+ isReturned ( e ) and
137+ e .getScope ( ) = scriptBlock .getAstNode ( ) and
138+ not blockMayReturnMultipleValues ( scriptBlock ) and
139+ nodeTo .( ReturnNodeImpl ) .getCfgScope ( ) = scriptBlock .getAstNode ( )
138140 )
139141 }
140142
@@ -1082,12 +1084,12 @@ private import PostUpdateNodes
10821084 * (or statement) is being returned from a function.
10831085 */
10841086private class ImplicitWrapNode extends TImplicitWrapNode , NodeImpl {
1085- private CfgNodes:: AstCfgNode n ;
1087+ private CfgNodes:: ScriptBlockCfgNode n ;
10861088 private boolean shouldWrap ;
10871089
10881090 ImplicitWrapNode ( ) { this = TImplicitWrapNode ( n , shouldWrap ) }
10891091
1090- CfgNodes:: AstCfgNode getReturnedNode ( ) { result = n }
1092+ CfgNodes:: ScriptBlockCfgNode getScriptBlock ( ) { result = n }
10911093
10921094 predicate shouldWrap ( ) { shouldWrap = true }
10931095
@@ -1105,12 +1107,12 @@ private class ImplicitWrapNode extends TImplicitWrapNode, NodeImpl {
11051107 * has been performed.
11061108 */
11071109private class PreReturNodeImpl extends TPreReturnNodeImpl , NodeImpl {
1108- private CfgNodes:: AstCfgNode n ;
1110+ private CfgNodes:: ScriptBlockCfgNode n ;
11091111 private boolean isArray ;
11101112
11111113 PreReturNodeImpl ( ) { this = TPreReturnNodeImpl ( n , isArray ) }
11121114
1113- CfgNodes:: AstCfgNode getReturnedNode ( ) { result = n }
1115+ CfgNodes:: AstCfgNode getScriptBlock ( ) { result = n }
11141116
11151117 override CfgScope getCfgScope ( ) { result = n .getScope ( ) }
11161118
0 commit comments