You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.2 KiB

/*
* vim: set ft=rust:
* vim: set ft=reason:
*
* Copyright (c) 2015 - 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;
/** Internal representation of data structure for Java, Objective-C and C++ classes,
C-style structs struct and union,
And Objective C protocol */
type class_kind = | CPP | Java | Objc;
type t = | Class of class_kind | Struct | Union | Protocol;
let name =
fun
| Class _ => "class"
| Struct => "struct"
| Union => "union"
| Protocol => "protocol";
let class_kind_num =
fun
| CPP => 1
| Java => 2
| Objc => 3;
let class_kind_compare ck1 ck2 => class_kind_num ck1 - class_kind_num ck2;
let compare dstruct1 dstruct2 =>
switch (dstruct1, dstruct2) {
| (Class ck1, Class ck2) => class_kind_compare ck1 ck2
| (Class _, _) => (-1)
| (_, Class _) => 1
| (Struct, Struct) => 0
| (Struct, _) => (-1)
| (_, Struct) => 1
| (Union, Union) => 0
| (Union, _) => (-1)
| (_, Union) => 1
| (Protocol, Protocol) => 0
};
let equal tn1 tn2 => compare tn1 tn2 == 0;