From 4ea2b01079d9a5f0df175963ea50b6f73c0f1411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Correnson?= <loic.correnson@cea.fr> Date: Fri, 7 Jun 2024 16:13:50 +0200 Subject: [PATCH] [region] styling memory view --- ivette/src/frama-c/plugins/region/index.tsx | 10 +------ ivette/src/frama-c/plugins/region/memory.tsx | 30 ++++++++------------ src/plugins/region/services.ml | 6 +++- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/ivette/src/frama-c/plugins/region/index.tsx b/ivette/src/frama-c/plugins/region/index.tsx index c733ef9e7d9..3bf4a449f4d 100644 --- a/ivette/src/frama-c/plugins/region/index.tsx +++ b/ivette/src/frama-c/plugins/region/index.tsx @@ -42,7 +42,6 @@ function RegionAnalys(): JSX.Element { const [kfName, setName] = React.useState<string>(); const [pinned, setPinned] = React.useState(false); const [running, setRunning] = React.useState(false); - const [padding, setPadding] = React.useState(true); const setComputing = Dome.useProtected(setRunning); const scope = States.useCurrentScope(); const { kind, name } = States.useDeclaration(scope); @@ -84,15 +83,8 @@ function RegionAnalys(): JSX.Element { selected={pinned} onClick={() => setPinned(!pinned)} /> - <Tools.Filler /> - <Tools.Button - icon='ITEMS.LIST' - title='Show non-accessed ranges in compounds' - selected={padding} - onClick={() => setPadding(!padding)} - /> </Tools.ToolBar> - <MemoryView padding={padding} regions={regions} /> + <MemoryView regions={regions} /> </> ); } diff --git a/ivette/src/frama-c/plugins/region/memory.tsx b/ivette/src/frama-c/plugins/region/memory.tsx index 67336ef18ae..4b091613708 100644 --- a/ivette/src/frama-c/plugins/region/memory.tsx +++ b/ivette/src/frama-c/plugins/region/memory.tsx @@ -32,7 +32,6 @@ function makeRecord( edges: Dot.Edge[], source: string, sizeof: number, - padding: boolean, ranges: Region.range[] ): Dot.Cell[] { if (ranges.length === 0) return []; @@ -42,23 +41,20 @@ function makeRecord( const port = `r${i}`; const target = `n${rg.data}`; edges.push({ source, sourcePort: port, target }); - if (padding && offset !== rg.offset) - cells.push(`${offset}..${rg.offset-1} ##`); + if (offset !== rg.offset) + cells.push(`${offset}..${rg.offset - 1} ##`); offset = rg.offset + rg.length; cells.push({ label: `${rg.offset}..${offset - 1} [${rg.cells}]`, port, }); }); - if (padding && offset !== sizeof) - cells.push(`${offset}..${sizeof-1} ##`); + if (offset !== sizeof) + cells.push(`${offset}..${sizeof - 1} ##`); return cells; } -function makeDiagram( - regions: readonly Region.region[], - padding: boolean, -): Dot.DiagramProps { +function makeDiagram(regions: readonly Region.region[]): Dot.DiagramProps { const nodes: Dot.Node[] = []; const edges: Dot.Edge[] = []; regions.forEach(r => { @@ -71,13 +67,15 @@ function makeDiagram( : (r.writes && r.reads) ? 'green' : r.writes ? 'pink' : r.reads ? 'grey' : 'white'; // --- Shape - const cells = makeRecord(edges, id, r.sizeof, padding, r.ranges); + const font = r.ranges.length > 0 ? 'mono' : 'sans'; + const cells = makeRecord(edges, id, r.sizeof, r.ranges); const shape = cells.length > 0 ? cells : undefined; - nodes.push({ id: id, color, label: r.label, title: r.title, shape }); + nodes.push({ id, font, color, label: r.label, title: r.title, shape }); // --- Roots + const R: Dot.Node = { id: '', shape: 'cds', font: 'mono', color: 'blue' }; r.roots.forEach(x => { const xid = `X${x}`; - nodes.push({ id: xid, label: x, shape: 'folder', color: 'blue' }); + nodes.push({ ...R, id: xid, label: x }); edges.push({ source: xid, target: id }); }); // --- Pointed @@ -91,14 +89,10 @@ function makeDiagram( export interface MemoryViewProps { regions: readonly Region.region[]; - padding?: boolean; } export function MemoryView(props: MemoryViewProps): JSX.Element { - const { regions, padding=true } = props; - const diagram = React.useMemo( - () => makeDiagram(regions, padding), - [regions, padding] - ); + const { regions } = props; + const diagram = React.useMemo(() => makeDiagram(regions), [regions]); return <Dot.Diagram {...diagram} />; } diff --git a/src/plugins/region/services.ml b/src/plugins/region/services.ml index c8b31e72d36..38550cc6615 100644 --- a/src/plugins/region/services.ml +++ b/src/plugins/region/services.ml @@ -112,7 +112,11 @@ struct if m.writes <> [] then Buffer.add_char buffer 'W' ; if m.pointed <> None then Buffer.add_char buffer '*' else if m.reads <> [] || m.writes <> [] then - Buffer.add_char buffer @@ typs_to_char m.types ; + begin + Buffer.add_char buffer '(' ; + Buffer.add_char buffer @@ typs_to_char m.types ; + Buffer.add_char buffer ')' ; + end ; Buffer.contents buffer let pp_typ_layout s0 fmt ty = -- GitLab