diff --git a/ivette/src/frama-c/plugins/eva/layout.ts b/ivette/src/frama-c/plugins/eva/layout.ts index 732060b775c3feefd2c63eb84a560882e08fc274..166cdb880a1865837d9a6817238e45440f77f025 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 dfc39fb2693eac88759d3add18ea5f220d82ccb2..a267c0e5de47e856a8883c7f862055cee11ea1dc 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 87e1ee07b318a72b3718b1dbdb1773aea89eb3f4..230afeac91df9e0fa8963b7a54fa0361e0c79fbd 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 170ffed58be8267e9209373cecae7b99d95ac592..60fedb9b5aa1149b47663d393b0f6f2af46867a2 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> );