@eagleoutice/flowr-dev
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
22 lines (21 loc) • 1.37 kB
TypeScript
/**
* Applying {@link KillReference|kills} (e.g., produced by `rm`) to an {@link REnvironmentInformation}.
* @module
*/
import type { ControlDependency, KillReference } from '../info';
import type { REnvironmentInformation } from './environment';
import type { IdentifierReference } from './identifier';
/**
* Accounts for the writes after a kill: a re-definition revives a `named` removal (dropping it), a conditional
* one only revives it in its branch, and a wholesale (`all`/`unknown`) removal stays but spares the names written
* after it.
*/
export declare function cancelRevivedKills(kills: readonly KillReference[], writes: readonly IdentifierReference[]): KillReference[];
/**
* Applies the given {@link KillReference|kills} to a copy of `env`. `named` kills remove (or, when conditional,
* weaken to maybe) a single definition; `all` kills clear the current frame; `unknown` kills weaken every
* in-scope definition to maybe. Returns `env` unchanged when there is nothing to apply.
*/
export declare function applyKills(env: REnvironmentInformation, kills: readonly KillReference[] | undefined): REnvironmentInformation;
/** Attaches `cds` to a list of kills, turning them into conditional (maybe) kills. */
export declare function makeKillsMaybe(kills: readonly KillReference[] | undefined, cds: readonly ControlDependency[]): KillReference[];