Add util_mermaid callseq renderer, fix forked convrepo store_* corruption

This commit is contained in:
2025-07-22 00:34:27 +03:00
parent 70e7b4fe3f
commit 45010c1cf3
4 changed files with 24 additions and 5 deletions

View File

@@ -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" }

View File

@@ -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

View File

@@ -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')

View File

@@ -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)