Skip to main content

Module dataflow

Module dataflow 

Source
Expand description

Dataflow Analysis Module

This module provides two forward dataflow analyses:

  1. Available Expressions Analysis (CAP-AE-01 through CAP-AE-12)

    • Forward MUST (intersection) dataflow analysis
    • Common Subexpression Elimination (CSE) detection
    • Commutative expression normalization
  2. Abstract Interpretation (CAP-AI-01 through CAP-AI-22)

    • Forward dataflow with widening for loop termination
    • Range tracking for integer variables
    • Nullability tracking (NEVER/MAYBE/ALWAYS)
    • Division-by-zero detection
    • Null dereference detection
    • Multi-language support (Python, TypeScript, Go, Rust)

§Module Structure

dataflow/
├── mod.rs              # This file - module entry point
├── types.rs            # Shared types (BlockId, predecessors)
├── available.rs        # Available expressions analysis
├── abstract_interp.rs  # Abstract interpretation
└── dataflow_tests.rs   # Comprehensive test suite

§Usage

use tldr_core::dataflow::{
    compute_available_exprs, AvailableExprsInfo, Expression,
    compute_abstract_interp, AbstractInterpInfo, AbstractValue, Nullability,
};

// Available Expressions Analysis
let cfg = get_cfg_context(path, func, None, None)?;
let dfg = get_dfg_context(path, func, None, None)?;
let avail = compute_available_exprs(&cfg, &dfg)?;
let redundant = avail.redundant_computations();

// Abstract Interpretation
let interp = compute_abstract_interp(&cfg, &refs, Some(&source), "python")?;
for (line, var) in &interp.potential_div_zero {
    println!("Warning: potential division by zero at line {} ({})", line, var);
}

§Specification Reference

See spec.md in this directory for:

  • Full capability definitions (34 capabilities)
  • Algorithm descriptions
  • Behavioral contracts
  • JSON output formats
  • Edge case handling

Re-exports§

pub use available::compute_available_exprs;
pub use available::compute_available_exprs_with_source;
pub use available::compute_available_exprs_with_source_and_lang;
pub use available::extract_binary_exprs_from_ast;
pub use available::extract_expressions_full;
pub use available::normalize_expression;
pub use available::AvailableExprsInfo;
pub use available::BlockExpressions;
pub use available::Confidence;
pub use available::ExprInstance;
pub use available::Expression;
pub use available::ExtractionResult;
pub use available::UncertainFinding;
pub use available::COMMUTATIVE_OPS;
pub use abstract_interp::compute_abstract_interp;
pub use abstract_interp::init_params;
pub use abstract_interp::transfer_block;
pub use abstract_interp::AbstractInterpInfo;
pub use abstract_interp::AbstractState;
pub use abstract_interp::AbstractValue;
pub use abstract_interp::ConstantValue;
pub use abstract_interp::Nullability;
pub use types::build_predecessors;
pub use types::build_successors;
pub use types::find_back_edges;
pub use types::reachable_blocks;
pub use types::reverse_postorder;
pub use types::validate_cfg;
pub use types::BlockId;
pub use types::DataflowError;
pub use types::MAX_BLOCKS;
pub use types::MAX_ITERATIONS;

Modules§

abstract_interp
Abstract Interpretation Analysis
available
Available Expressions Analysis Types
types
Dataflow Analysis Foundation Types & CFG Helpers