Module Evaluation

module Evaluation: sig .. end
Generic evaluation and reduction of expressions and left values.

Second forward evaluation after a backward propagation for the condition of an if statement. Allows to forward propagate the backward reductions. Uses the internal forward functions to actually perform the computation instead of relying on the cache. However, the internal evaluation uses the cache for the sub- expressions, so this evaluation is still bottom-up, and update the cache progressively. Stops the descent as soon as there is no backward propagation to recover for an expression. However, more backward reduction could have been done below for other reasons (due to alarms or domains). Raises Not_Exact_Reduction if at any point, the forward evaluation leads to a less precise value than the one stored after the backward evaluation. This means that the backward propagation has not been precise enough.



Generic evaluation and reduction of expressions and left values.
module type S = sig .. end
module type Value = sig .. end
module type Queries = sig .. end
module Make: 
functor (Value : Value) ->
functor (Loc : Abstract_location.S with type value = Value.t) ->
functor (Domain : Queries with type value = Value.t and type location = Loc.location) -> S with type state = Domain.state and type value = Value.t and type origin = Domain.origin and type loc = Loc.location
Generic functor.