CallNode.callee_functions()
Returns Functions object for the functions that are called from the current node corresponding function.
from glider import *
# task: find a function that has `burn*` call and print all the functions that is called from it
def query():
data = []
instructions = Instructions().with_called_function_name_prefix('burn').exec(10)
for instruction in instructions:
if len(data) > 0:
break # demo first result only
functionContainsBurn = instruction.get_parent() #api.functions.Function (*)
contract = functionContainsBurn.get_contract() #api.contracts.Contract
call_graph = contract.call_graph() #api.call_graph.CallGraph
nodes = call_graph.nodes() #Dict[str, CallNode]
for id in nodes:
if(id != functionContainsBurn.db_id):
continue
callee_functions = nodes[id].callee_functions #api.functions.Functions
callees = callee_functions().exec() #List[Function]
if len(callees) > 0:
print(functionContainsBurn.source_code())
for callee in callees:
print("callee: " + callee.name())
data.append(instruction)
return data
Output:
{
"print_output": [
"function _burnRusdHeld() internal {\n rusd().burn(rusdBalance());\n }",
"callee: rusd",
"callee: rusdBalance",
"callee: burn",
"callee: burn"
]
}