diff --git a/pyproject.toml b/pyproject.toml index 0d108b6..9975022 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "breakshaft" -version = "0.1.2" +version = "0.1.3" description = "Library for in-time codegen for type conversion" authors = [ { name = "nikto_b", email = "niktob560@yandex.ru" } diff --git a/src/breakshaft/convertor.py b/src/breakshaft/convertor.py index 64b4d52..8688e2a 100644 --- a/src/breakshaft/convertor.py +++ b/src/breakshaft/convertor.py @@ -146,7 +146,11 @@ class ConvRepo: return inner def fork(self, fork_with: Optional[set[ConversionPoint]] = None) -> ConvRepo: - return ForkedConvRepo(self, fork_with or None, self.walker, self.renderer) + return ForkedConvRepo(self, fork_with or None, + self.walker, + self.renderer, + self.store_callseq, + self.store_sources) class ForkedConvRepo(ConvRepo): @@ -156,8 +160,11 @@ class ForkedConvRepo(ConvRepo): fork_from: ConvRepo, fork_with: Optional[set[ConversionPoint]] = None, graph_walker: Optional[GraphWalker] = None, - renderer: Optional[ConvertorRenderer] = None): - super().__init__(graph_walker, renderer) + renderer: Optional[ConvertorRenderer] = None, + store_callseq: bool = False, + store_sources: bool = False, + ): + super().__init__(graph_walker, renderer, store_callseq, store_sources) if fork_with is None: fork_with = set() self._convertor_set = fork_with diff --git a/src/breakshaft/util.py b/src/breakshaft/util.py index 242a33b..6668253 100644 --- a/src/breakshaft/util.py +++ b/src/breakshaft/util.py @@ -12,6 +12,7 @@ def extract_func_argnames(func: Callable) -> list[str]: args_info.append(name) return args_info + def extract_return_type(func: Callable) -> Optional[type]: hints = get_type_hints(func) return hints.get('return') diff --git a/src/breakshaft/util_mermaid.py b/src/breakshaft/util_mermaid.py index 4219bdd..4bc0f1a 100644 --- a/src/breakshaft/util_mermaid.py +++ b/src/breakshaft/util_mermaid.py @@ -1,4 +1,4 @@ -from .models import Callgraph, TransformationPoint +from .models import Callgraph, TransformationPoint, ConversionPoint from .util import hashname @@ -68,3 +68,14 @@ def draw_callgraph_mermaid(g: Callgraph, split_duplicates=False, skip_title=Fals ret += 'flowchart TD\n\n' ret += ' %%defs:\n' + '\n'.join(d) + '\n\n %%edges:\n' + '\n'.join(e) return ret + + +def draw_callseq_mermaid(callseq: list[ConversionPoint]): + ret = ['flowchart TD\n\n'] + ret += [' %%defs:'] + for cp_i, cp in enumerate(callseq): + ret.append(f' e{cp_i}[{shield_mermaid_name(str(cp))}]') + ret += ['', '', ' %%edges:'] + for cp_i, cp in enumerate(callseq[:-1]): + ret.append(f' e{cp_i}-->e{cp_i + 1}') + return '\n'.join(ret)