@@ -131,10 +131,12 @@ module LocalFlow {
131
131
nodeTo = TReturnNodeImpl ( cfgNode .getScope ( ) )
132
132
)
133
133
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 ( )
138
140
)
139
141
}
140
142
@@ -1082,12 +1084,12 @@ private import PostUpdateNodes
1082
1084
* (or statement) is being returned from a function.
1083
1085
*/
1084
1086
private class ImplicitWrapNode extends TImplicitWrapNode , NodeImpl {
1085
- private CfgNodes:: AstCfgNode n ;
1087
+ private CfgNodes:: ScriptBlockCfgNode n ;
1086
1088
private boolean shouldWrap ;
1087
1089
1088
1090
ImplicitWrapNode ( ) { this = TImplicitWrapNode ( n , shouldWrap ) }
1089
1091
1090
- CfgNodes:: AstCfgNode getReturnedNode ( ) { result = n }
1092
+ CfgNodes:: ScriptBlockCfgNode getScriptBlock ( ) { result = n }
1091
1093
1092
1094
predicate shouldWrap ( ) { shouldWrap = true }
1093
1095
@@ -1105,12 +1107,12 @@ private class ImplicitWrapNode extends TImplicitWrapNode, NodeImpl {
1105
1107
* has been performed.
1106
1108
*/
1107
1109
private class PreReturNodeImpl extends TPreReturnNodeImpl , NodeImpl {
1108
- private CfgNodes:: AstCfgNode n ;
1110
+ private CfgNodes:: ScriptBlockCfgNode n ;
1109
1111
private boolean isArray ;
1110
1112
1111
1113
PreReturNodeImpl ( ) { this = TPreReturnNodeImpl ( n , isArray ) }
1112
1114
1113
- CfgNodes:: AstCfgNode getReturnedNode ( ) { result = n }
1115
+ CfgNodes:: AstCfgNode getScriptBlock ( ) { result = n }
1114
1116
1115
1117
override CfgScope getCfgScope ( ) { result = n .getScope ( ) }
1116
1118
0 commit comments