1
0
mirror of https://github.com/catseye/SixtyPical.git synced 2024-11-29 03:51:35 +00:00

Refactor: move to dedicated module.

This commit is contained in:
Chris Pressey 2019-10-21 15:41:17 +01:00
parent bcc256aa5d
commit 7187fa6285
2 changed files with 37 additions and 31 deletions

View File

@ -51,37 +51,8 @@ def process_input_files(filenames, options):
sys.stdout.write("\n") sys.stdout.write("\n")
if options.dump_callgraph: if options.dump_callgraph:
graph = {} from sixtypical.callgraph import construct_callgraph
graph = construct_callgraph(program)
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
sys.stdout.write(json.dumps(graph, indent=4, sort_keys=True, separators=(',', ':'))) sys.stdout.write(json.dumps(graph, indent=4, sort_keys=True, separators=(',', ':')))
compilation_roster = None compilation_roster = None

View 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