Expand description
Dataflow Analysis Module
This module provides two forward dataflow analyses:
-
Available Expressions Analysis (CAP-AE-01 through CAP-AE-12)
- Forward MUST (intersection) dataflow analysis
- Common Subexpression Elimination (CSE) detection
- Commutative expression normalization
-
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