/*
 * 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: Constants */
let module L = Logging;

let module F = Format;


/** Constants */
type t =
  | Cint of IntLit.t /** integer constants */
  | Cfun of Procname.t /** function names */
  | Cstr of string /** string constants */
  | Cfloat of float /** float constants */
  | Cclass of Ident.name /** class constant */
  | Cptr_to_fld of Ident.fieldname Typ.t /** pointer to field constant,
                                             and type of the surrounding Csu.t type */;

let compare: t => t => int;

let equal: t => t => bool;


/** Return true if the constants have the same kind (both integers, ...) */
let kind_equal: t => t => bool;


/** Pretty print a const */
let pp: printenv => F.formatter => t => unit;

let to_string: t => string;

let iszero_int_float: t => bool;

let isone_int_float: t => bool;

let isminusone_int_float: t => bool;
