@@ -159,10 +159,17 @@ def visit_BLOCK(self, node):
159159class FunctionGraphVisitor (UniqueVisitor ):
160160 """ Mark FUNCALLS
161161 """
162+ def _get_calls_from_children (self , node ):
163+ return [
164+ symbol
165+ for symbol in self .filter_inorder (node , lambda x : isinstance (x , (symbols .FUNCCALL , symbols .CALL )))
166+ if not isinstance (symbol , symbols .ARRAYACCESS )
167+ ]
168+
162169 def _set_children_as_accessed (self , node : symbols .SYMBOL ):
163170 parent = node .get_parent (symbols .FUNCDECL )
164171 if parent is None : # Global scope?
165- for symbol in self .filter_inorder (node , lambda x : isinstance ( x , ( symbols . FUNCCALL , symbols . CALL )) ):
172+ for symbol in self ._get_calls_from_children (node ):
166173 symbol .entry .accessed = True
167174
168175 def visit_FUNCCALL (self , node : symbols .SYMBOL ):
@@ -175,7 +182,7 @@ def visit_CALL(self, node: symbols.SYMBOL):
175182
176183 def visit_FUNCDECL (self , node : symbols .SYMBOL ):
177184 if node .entry .accessed :
178- for symbol in self .filter_inorder (node , lambda x : isinstance ( x , ( symbols . FUNCCALL , symbols . CALL )) ):
185+ for symbol in self ._get_calls_from_children (node ):
179186 symbol .entry .accessed = True
180187
181188 yield node
@@ -277,6 +284,21 @@ def visit_LET(self, node):
277284 else :
278285 yield (yield self .generic_visit (node ))
279286
287+ def visit_LETARRAY (self , node ):
288+ lvalue = node .args [0 ].entry
289+ if self .O_LEVEL > 1 and not lvalue .accessed :
290+ warning_not_used (lvalue .lineno , lvalue .name , fname = lvalue .filename )
291+ block = symbols .BLOCK (* [
292+ symbols .CALL (x .entry , x .args , x .lineno , lvalue .filename ) for x in self .filter_inorder (
293+ node .children [1 ],
294+ lambda x : isinstance (x , symbols .FUNCCALL ),
295+ lambda x : not isinstance (x , symbols .FUNCTION )
296+ )
297+ ])
298+ yield block
299+ else :
300+ yield (yield self .generic_visit (node ))
301+
280302 def visit_LETSUBSTR (self , node ):
281303 if self .O_LEVEL > 1 and not node .children [0 ].accessed :
282304 errmsg .warning_not_used (node .children [0 ].lineno , node .children [0 ].name )
0 commit comments