diff --git a/infer/src/quandary/Passthrough.ml b/infer/src/quandary/Passthrough.ml new file mode 100644 index 000000000..2ffbc0dba --- /dev/null +++ b/infer/src/quandary/Passthrough.ml @@ -0,0 +1,36 @@ +(* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + *) + +open! Utils + +module F = Format + +(* for now this is just a call site, but in the future we may add input access path, output kind, + etc. depending on what we need *) +type t = + { + site : CallSite.t; + } + +let make site = + { site } + +let compare pt1 pt2 = + (match pt1, pt2 with + | {site=site1}, {site=site2} -> CallSite.compare site1 site2 + )[@warning "+9"] + +let pp fmt s = + F.fprintf fmt "%a" CallSite.pp s.site + +module Set = PrettyPrintable.MakePPSet(struct + type nonrec t = t + let compare = compare + let pp_element = pp + end) diff --git a/infer/src/quandary/Passthrough.mli b/infer/src/quandary/Passthrough.mli new file mode 100644 index 000000000..0dfe560ef --- /dev/null +++ b/infer/src/quandary/Passthrough.mli @@ -0,0 +1,20 @@ +(* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + *) + +module F = Format + +type t + +val make : CallSite.t -> t + +val compare : t -> t -> int + +val pp : F.formatter -> t -> unit + +module Set : PrettyPrintable.PPSet with type elt = t diff --git a/infer/src/quandary/Sink.ml b/infer/src/quandary/Sink.ml new file mode 100644 index 000000000..591f0ae88 --- /dev/null +++ b/infer/src/quandary/Sink.ml @@ -0,0 +1,16 @@ +(* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + *) + +module type S = sig + include TraceElem.S + + val to_callee : t -> CallSite.t -> t + (** ith param * ith source kind *) + val get : CallSite.t -> (int * t) list +end diff --git a/infer/src/quandary/Source.ml b/infer/src/quandary/Source.ml new file mode 100644 index 000000000..0eb2fbf66 --- /dev/null +++ b/infer/src/quandary/Source.ml @@ -0,0 +1,19 @@ +(* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + *) + +module type S = sig + include TraceElem.S + + val is_footprint : t -> bool + val to_return : t -> CallSite.t -> t + val make_footprint : CallSite.t -> t + + (** ith return value * ith sink kind *) + val get : CallSite.t -> (int * t) list +end diff --git a/infer/src/quandary/TraceElem.ml b/infer/src/quandary/TraceElem.ml new file mode 100644 index 000000000..233a253b1 --- /dev/null +++ b/infer/src/quandary/TraceElem.ml @@ -0,0 +1,26 @@ +(* + * Copyright (c) 2016 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + *) + +module F = Format + +module type S = sig + type kind + type t + + val call_site : t -> CallSite.t + val kind : t -> kind + val is_empty : t -> bool + + val make : kind -> CallSite.t -> t + val make_empty : CallSite.t -> t + + val compare : t -> t -> int + val equal : t -> t -> bool + val pp : F.formatter -> t -> unit +end