Pulselib.PulseAccessResultmodule AbductiveDomain = PulseAbductiveDomainmodule DecompilerExpr = PulseDecompilerExprmodule Diagnostic = PulseDiagnosticmodule PathContext = PulsePathContexttype error = | PotentialInvalidAccess of {astate : AbductiveDomain.t;address : DecompilerExpr.t;must_be_valid : Pulselib.PulseBasicInterface.Trace.t
* Pulselib.PulseBasicInterface.Invalidation.must_be_valid_reason
option;}| PotentialInvalidSpecializedCall of {astate : AbductiveDomain.t;specialized_type : IR.Typ.Name.t;trace : Pulselib.PulseBasicInterface.Trace.t;}| ReportableError of {astate : AbductiveDomain.t;diagnostic : Diagnostic.t;}| WithSummary of error * AbductiveDomain.Summary.tAn error for which the summary corresponding to the abstract state has already been computed, to avoid having to compute the summary for a given abstract state multiple times. For convenience this is part of the error datatype but the invariant that an error within a WithSummary (error, summary) cannot itself be a WithSummary _.
val astate_of_error : error -> AbductiveDomain.ttype 'a t = ('a, error) PulseResult.tval with_summary :
('a, error * AbductiveDomain.Summary.t) PulseResult.t ->
'a ttype abductive_error = [ | `PotentialInvalidAccess of
AbductiveDomain.t
* Pulselib.PulseBasicInterface.AbstractValue.t
* (Pulselib.PulseBasicInterface.Trace.t
* Pulselib.PulseBasicInterface.Invalidation.must_be_valid_reason option) ]Intermediate datatype since AbductiveDomain cannot refer to this module without creating a circular dependency.
Purposefully omits `MemoryLeak errors as it's a good idea to double-check if you really want to report a leak.
type abductive_summary_error = [ | `PotentialInvalidAccessSummary of
AbductiveDomain.Summary.t
* AbductiveDomain.t
* DecompilerExpr.t
* (Pulselib.PulseBasicInterface.Trace.t
* Pulselib.PulseBasicInterface.Invalidation.must_be_valid_reason option) ]val of_result_f :
PathContext.t ->
('a, error) IStdlib.IStd.result ->
f:(error -> 'a) ->
'a tval of_result :
PathContext.t ->
(AbductiveDomain.t, error) IStdlib.IStd.result ->
AbductiveDomain.t tval of_error_f : PathContext.t -> error -> f:(error -> 'a) -> 'a tval of_abductive_summary_error :
[< abductive_summary_error ] ->
error * AbductiveDomain.Summary.tval of_abductive_result :
('a, [< abductive_error ]) IStdlib.IStd.result ->
'a tval of_abductive_summary_result :
('a, [< abductive_summary_error ]) IStdlib.IStd.result ->
('a, error * AbductiveDomain.Summary.t) PulseResult.tval ignore_leaks :
(AbductiveDomain.Summary.t,
[< `MemoryLeak of
AbductiveDomain.Summary.t
* AbductiveDomain.t
* Pulselib.PulseBasicInterface.Attribute.allocator
* Pulselib.PulseBasicInterface.Trace.t
* IBase.Location.t
| `JavaResourceLeak of
AbductiveDomain.Summary.t
* AbductiveDomain.t
* IR.JavaClassName.t
* Pulselib.PulseBasicInterface.Trace.t
* IBase.Location.t
| `UnawaitedAwaitable of
AbductiveDomain.Summary.t
* AbductiveDomain.t
* Pulselib.PulseBasicInterface.Trace.t
* IBase.Location.t
| `HackUnfinishedBuilder of
AbductiveDomain.Summary.t
* AbductiveDomain.t
* Pulselib.PulseBasicInterface.Trace.t
* IBase.Location.t
* IR.HackClassName.t
| `CSharpResourceLeak of
AbductiveDomain.Summary.t
* AbductiveDomain.t
* IR.CSharpClassName.t
* Pulselib.PulseBasicInterface.Trace.t
* IBase.Location.t
| abductive_summary_error ])
IStdlib.IStd.result ->
(AbductiveDomain.Summary.t, [> abductive_summary_error ]) IStdlib.IStd.result