Module Backend.ClosuresSubstitution
module L = IBase.Logging
module ExpClosure : sig ... end
value domain, with the following concretization function
gamma
:
module VDom : sig ... end
module CFG = Absint.ProcCfg.Normal
module Domain : sig ... end
val get_var : Domain.t -> IR.Var.t -> Domain.value
val eval_expr : Domain.t -> IR.Exp.t -> Domain.value
val eval_instr : Domain.t -> IR.Sil.instr -> Domain.t
module TransferFunctions : sig ... end
module Analyzer : sig ... end
val get_invariant_at_node : Analyzer.invariant_map -> IR.Procdesc.Node.t -> Domain.t
val replace_closure_call : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr
val replace_closure_param : CFG.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr
replace_closure_param
propagates closures to function parameters, so that more functions are specialized byCCallSpecializedWithClosures.process
. Note that unlikereplace_closure_call
running at the analysis phase,replace_closure_param
should run beforeCCallSpecializedWithClosures.process
at the capture phase.
val process_common : (IR.Procdesc.Node.t -> Domain.t -> IR.Sil.instr -> IR.Sil.instr) -> IR.Procdesc.t -> unit
val process_closure_call : Summary.t -> unit
val process_closure_param : IR.Procdesc.t -> unit