From 327f2ac4229c2e088784602357638ed88874598c Mon Sep 17 00:00:00 2001 From: Maxime Jacquemin <maxime2.jacquemin@gmail.com> Date: Fri, 22 Oct 2021 15:34:00 +0200 Subject: [PATCH] [ivette] Callstack unfolding by function --- ivette/src/frama-c/plugins/eva/layout.ts | 6 +++--- ivette/src/frama-c/plugins/eva/model.ts | 10 +++++----- ivette/src/frama-c/plugins/eva/probeinfos.tsx | 2 +- ivette/src/frama-c/plugins/eva/valuetable.tsx | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ivette/src/frama-c/plugins/eva/layout.ts b/ivette/src/frama-c/plugins/eva/layout.ts index 732060b775c..166cdb880a1 100644 --- a/ivette/src/frama-c/plugins/eva/layout.ts +++ b/ivette/src/frama-c/plugins/eva/layout.ts @@ -87,7 +87,7 @@ export class LayoutEngine { // --- Probe Buffer private byFct?: string; // current function - private byStk?: boolean; // callstack probes + private byStk = new Map<string, boolean>(); // callstack probes private skip?: boolean; // skip current function private rowSize: Size = EMPTY; private buffer: Probe[] = []; @@ -104,7 +104,7 @@ export class LayoutEngine { }; } - layout(ps: Probe[], byCallstacks: boolean): Row[] { + layout(ps: Probe[], byCallstacks: Map<string, boolean>): Row[] { this.chained = undefined; this.byStk = byCallstacks; ps.sort(LayoutEngine.order).forEach(this.push); @@ -171,7 +171,7 @@ export class LayoutEngine { const rs = this.rows; const fct = this.byFct; if (fct && ps.length > 0) { - const stk = this.byStk; + const stk = this.byStk.get(fct); const hlines = this.rowSize.rows; if (stk) { // --- by callstacks diff --git a/ivette/src/frama-c/plugins/eva/model.ts b/ivette/src/frama-c/plugins/eva/model.ts index dfc39fb2693..a267c0e5de4 100644 --- a/ivette/src/frama-c/plugins/eva/model.ts +++ b/ivette/src/frama-c/plugins/eva/model.ts @@ -72,7 +72,7 @@ export class Model implements ModelCallbacks { private remanent?: Probe; // last transient private probes = new Map<string, Probe>(); private folded = new Map<string, boolean>(); // folded functions - private byCallstacks = false; + private byCallstacks = new Map<string, boolean>(); getFocused() { return this.focused; } isFocused(p: Probe | undefined) { return this.focused === p; } @@ -114,12 +114,12 @@ export class Model implements ModelCallbacks { this.forceLayout(); } - getByCallstacks(): boolean { - return this.byCallstacks; + isByCallstacks(fct: string): boolean { + return this.byCallstacks.get(fct) ?? false; } - setByCallstacks(b: boolean) { - this.byCallstacks = b; + setByCallstacks(fct: string, b: boolean) { + this.byCallstacks.set(fct, b); this.forceLayout(); } diff --git a/ivette/src/frama-c/plugins/eva/probeinfos.tsx b/ivette/src/frama-c/plugins/eva/probeinfos.tsx index 87e1ee07b31..230afeac91d 100644 --- a/ivette/src/frama-c/plugins/eva/probeinfos.tsx +++ b/ivette/src/frama-c/plugins/eva/probeinfos.tsx @@ -109,7 +109,7 @@ export function ProbeInfos() { const model = useModel(); const probe = model.getFocused(); const fct = probe?.fct; - const byCS = model.getByCallstacks(); + const byCS = fct ? model.isByCallstacks(fct) : false; const effects = probe ? probe.effects : false; const condition = probe ? probe.condition : false; const summary = fct ? model.stacks.getSummary(fct) : false; diff --git a/ivette/src/frama-c/plugins/eva/valuetable.tsx b/ivette/src/frama-c/plugins/eva/valuetable.tsx index 170ffed58be..60fedb9b5aa 100644 --- a/ivette/src/frama-c/plugins/eva/valuetable.tsx +++ b/ivette/src/frama-c/plugins/eva/valuetable.tsx @@ -288,7 +288,7 @@ function TableRow(props: TableRowProps) { if (!fct) return null; const folded = model.isFolded(fct); const foldable = model.isFoldable(fct); - const byCallstacks = model.getByCallstacks(); + const byCallstacks = model.isByCallstacks(fct); return ( <Hpack className="eva-function" style={props.style}> <TableSection @@ -297,7 +297,7 @@ function TableRow(props: TableRowProps) { foldable={foldable} onClick={() => model.setFolded(fct, !folded)} byCallstacks = {byCallstacks} - onCallstackClick = {() => model.setByCallstacks(!byCallstacks)} + onCallstackClick = {() => model.setByCallstacks(fct, !byCallstacks)} /> </Hpack> ); -- GitLab