Pulselib.PulseDomainInterfaceIf you do any mutations of the state in pulse that go beyond what PulseOperations offers you may want these modules (but consider adding what you need to PulseOperations or to one of the models modules if appropriate). In addition to defining short names for safe versions of stack/heap/... it ensures only those safe versions are used. Do not use lower-level modules directly!
module AbductiveDomain = PulseAbductiveDomainmodule Stack = AbductiveDomain.Stackmodule Memory = AbductiveDomain.Memorymodule AddressAttributes = AbductiveDomain.AddressAttributesmodule CanonValue = AbductiveDomain.CanonValuemodule BaseStack = CanonValue.Stackmodule BaseMemory = CanonValue.Memorymodule CanonAccess = BaseMemory.Accessmodule CanonAccessSet = BaseMemory.Access.Setmodule BaseAddressAttributes = CanonValue.Attributesmodule Decompiler = PulseAbductiveDecompilermodule NonDisjDomain = PulseNonDisjunctiveDomainmodule PathContext = PulsePathContextmodule AccessResult = PulseAccessResultmodule DecompilerExpr = PulseDecompilerExprmodule Diagnostic = PulseDiagnosticmodule ExecutionDomain = PulseExecutionDomainmodule LatentIssue = PulseLatentIssueMisusing these modules may miss abducing addresses to the pre-condition or mistakenly manipulate non-normalized values. See PulseAbductiveDomain for more information.
These can safely be used when reading summaries, where all values have already been normalized on creation.
module BaseDomain = PulseBaseDomainmodule UnsafeStack = PulseBaseStackmodule UnsafeMemory = PulseBaseMemorymodule UnsafeAttributes = PulseBaseAddressAttributesinclude sig ... endmodule PulseAbductiveDomain = PulseAbductiveDomainmodule PulseAccessResult = PulseAccessResultmodule PulseBaseDomain = PulseBaseDomainmodule PulseBaseStack = PulseBaseStackmodule PulseBaseMemory = PulseBaseMemorymodule PulseBaseAddressAttributes = PulseBaseAddressAttributesmodule PulseAbductiveDecompiler = PulseAbductiveDecompilermodule PulseDiagnostic = PulseDiagnosticmodule PulseExecutionDomain = PulseExecutionDomainmodule PulseLatentIssue = PulseLatentIssuemodule PulsePathContext = PulsePathContextinclude module type of struct include PulseResult.Type endfor opening locally
type ('ok, 'err) pulse_result = ('ok, 'err) PulseResult.t =