mirror of
https://github.com/catseye/SixtyPical.git
synced 2024-11-21 10:31:25 +00:00
Refactor: move to dedicated module.
This commit is contained in:
parent
bcc256aa5d
commit
7187fa6285
@ -51,37 +51,8 @@ def process_input_files(filenames, options):
|
||||
sys.stdout.write("\n")
|
||||
|
||||
if options.dump_callgraph:
|
||||
graph = {}
|
||||
|
||||
from sixtypical.model import RoutineType, VectorType
|
||||
|
||||
def find_routines_matching_vector_type(program, type_):
|
||||
return [] # dummy
|
||||
|
||||
for routine in program.routines:
|
||||
potentially_calls = []
|
||||
for (called_routine, called_routine_type) in routine.called_routines:
|
||||
if isinstance(called_routine_type, RoutineType):
|
||||
potentially_calls.append(called_routine.name)
|
||||
elif isinstance(called_routine_type, VectorType):
|
||||
for potentially_called in find_routines_matching_vector_type(program, called_routine_type):
|
||||
potentially_calls.append(potentially_called.name)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
graph[routine.name] = {
|
||||
'potentially-calls': potentially_calls,
|
||||
}
|
||||
|
||||
# Reflexive closure
|
||||
|
||||
for routine in program.routines:
|
||||
potentially_called_by = []
|
||||
for (name, node) in graph.items():
|
||||
potential_calls = node['potentially-calls']
|
||||
if routine.name in potential_calls:
|
||||
potentially_called_by.append(name)
|
||||
graph[routine.name]['potentially-called-by'] = potentially_called_by
|
||||
|
||||
from sixtypical.callgraph import construct_callgraph
|
||||
graph = construct_callgraph(program)
|
||||
sys.stdout.write(json.dumps(graph, indent=4, sort_keys=True, separators=(',', ':')))
|
||||
|
||||
compilation_roster = None
|
||||
|
35
src/sixtypical/callgraph.py
Normal file
35
src/sixtypical/callgraph.py
Normal file
@ -0,0 +1,35 @@
|
||||
from sixtypical.model import RoutineType, VectorType
|
||||
|
||||
|
||||
def find_routines_matching_vector_type(program, type_):
|
||||
return [] # dummy
|
||||
|
||||
|
||||
def construct_callgraph(program):
|
||||
graph = {}
|
||||
|
||||
for routine in program.routines:
|
||||
potentially_calls = []
|
||||
for (called_routine, called_routine_type) in routine.called_routines:
|
||||
if isinstance(called_routine_type, RoutineType):
|
||||
potentially_calls.append(called_routine.name)
|
||||
elif isinstance(called_routine_type, VectorType):
|
||||
for potentially_called in find_routines_matching_vector_type(program, called_routine_type):
|
||||
potentially_calls.append(potentially_called.name)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
graph[routine.name] = {
|
||||
'potentially-calls': potentially_calls,
|
||||
}
|
||||
|
||||
# Reflexive closure
|
||||
|
||||
for routine in program.routines:
|
||||
potentially_called_by = []
|
||||
for (name, node) in graph.items():
|
||||
potential_calls = node['potentially-calls']
|
||||
if routine.name in potential_calls:
|
||||
potentially_called_by.append(name)
|
||||
graph[routine.name]['potentially-called-by'] = potentially_called_by
|
||||
|
||||
return graph
|
Loading…
Reference in New Issue
Block a user