|
|
|
/*
|
|
|
|
* vim: set ft=rust:
|
|
|
|
* vim: set ft=reason:
|
|
|
|
*
|
|
|
|
* Copyright (c) 2009 - 2013 Monoidics ltd.
|
|
|
|
* Copyright (c) 2013 - 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;
|
|
|
|
|
|
|
|
|
|
|
|
/** The Smallfoot Intermediate Language: Annotations */
|
|
|
|
let module F = Format;
|
|
|
|
|
|
|
|
|
|
|
|
/** Type to represent one @Annotation. */
|
|
|
|
type t = {
|
|
|
|
class_name: string, /** name of the annotation */
|
|
|
|
parameters: list string /** currently only one string parameter */
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/** Compare function for annotations. */
|
|
|
|
let compare: t => t => int;
|
|
|
|
|
|
|
|
|
|
|
|
/** Pretty print an annotation. */
|
|
|
|
let pp: F.formatter => t => unit;
|
|
|
|
|
|
|
|
let module Map: PrettyPrintable.PPMap with type key = t;
|
|
|
|
|
|
|
|
let module Item: {
|
|
|
|
|
|
|
|
/** Annotation for one item: a list of annotations with visibility. */
|
|
|
|
type nonrec t = list (t, bool);
|
|
|
|
|
|
|
|
/** Compare function for annotation items. */
|
|
|
|
let compare: t => t => int;
|
|
|
|
|
|
|
|
/** Pretty print an item annotation. */
|
|
|
|
let pp: F.formatter => t => unit;
|
|
|
|
let to_string: t => string;
|
|
|
|
|
|
|
|
/** Empty item annotation. */
|
|
|
|
let empty: t;
|
|
|
|
|
|
|
|
/** Check if the item annodation is empty. */
|
|
|
|
let is_empty: t => bool;
|
|
|
|
};
|
|
|
|
|
|
|
|
let module Class: {let objc: Item.t; let cpp: Item.t;};
|
|
|
|
|
|
|
|
let module Method: {
|
|
|
|
|
|
|
|
/** Annotation for a method: return value and list of parameters. */
|
|
|
|
type t = (Item.t, list Item.t);
|
|
|
|
|
|
|
|
/** Compare function for Method annotations. */
|
|
|
|
let compare: t => t => int;
|
|
|
|
|
|
|
|
/** Empty method annotation. */
|
|
|
|
let empty: t;
|
|
|
|
|
|
|
|
/** Check if the method annodation is empty. */
|
|
|
|
let is_empty: t => bool;
|
|
|
|
|
|
|
|
/** Pretty print a method annotation. */
|
|
|
|
let pp: string => F.formatter => t => unit;
|
|
|
|
};
|