Use custom AssemblyAnnotationWriter to improve vasm/llvm printing
[hiphop-php.git] / hphp / runtime / vm / type-alias-inl.h
blobc876171ec36fc567339dc9e70581fefbe8c880ee
1 /*
2 +----------------------------------------------------------------------+
3 | HipHop for PHP |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-2014 Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
17 #ifndef incl_HPHP_TYPE_ALIAS_INL_H_
18 #error "type-alias-inl.h should only be included by type-alias.h"
19 #endif
21 namespace HPHP {
22 ///////////////////////////////////////////////////////////////////////////////
23 // Static constructors.
25 inline TypeAliasReq TypeAliasReq::Invalid() {
26 TypeAliasReq req;
27 req.invalid = true;
28 return req;
31 inline TypeAliasReq TypeAliasReq::From(const TypeAlias& alias) {
32 TypeAliasReq req;
34 if (alias.any) {
35 req.any = true;
36 req.name = alias.name;
37 } else {
38 assert(alias.kind != KindOfObject);
40 req.kind = alias.kind;
41 req.nullable = alias.nullable;
42 req.name = alias.name;
44 return req;
47 inline TypeAliasReq TypeAliasReq::From(TypeAliasReq req,
48 const TypeAlias& alias) {
49 if (req.invalid) {
50 // Do nothing.
51 } else if (req.any) {
52 req.name = alias.name;
53 } else {
54 req.nullable |= alias.nullable;
55 req.name = alias.name;
57 return req;
60 ///////////////////////////////////////////////////////////////////////////////
61 // Comparison.
63 inline bool TypeAliasReq::same(const TypeAliasReq& req) const {
64 return (invalid && req.invalid) ||
65 (any && req.any) ||
66 (kind == req.kind &&
67 nullable == req.nullable &&
68 klass == req.klass);
71 inline bool operator==(const TypeAliasReq& l,
72 const TypeAliasReq& r) {
73 return l.same(r);
76 inline bool operator!=(const TypeAliasReq& l,
77 const TypeAliasReq& r) {
78 return !l.same(r);
81 ///////////////////////////////////////////////////////////////////////////////