Reland D23318594 and D23318592 add recordbasenativesp instr
[hiphop-php.git] / hphp / runtime / vm / reified-generics-info.h
blobc7685468d4b0e2c69447bb0e1fa557b85df7dfe6
1 /*
2 +----------------------------------------------------------------------+
3 | HipHop for PHP |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-present 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_VM_REIFIEDGENERICSINFO_H_
18 #define incl_HPHP_VM_REIFIEDGENERICSINFO_H_
20 #include <algorithm>
21 #include <stdint.h>
22 #include <vector>
24 namespace HPHP {
26 struct TypeParamInfo {
27 // Is the type parameter reified
28 bool m_isReified : 1;
29 // Does the type parameter contain a soft annotation
30 bool m_isSoft : 1;
31 // Does the type parameter contain a warn annotation
32 bool m_isWarn : 1;
36 * Struct that contains information regarding reified generics of a function
37 * or class
39 struct ReifiedGenericsInfo {
40 // Number of reified generics
41 size_t m_numReifiedGenerics;
42 // Whether it has any soft generics
43 bool m_hasSoftGenerics;
44 // Bitmap used to compare whether generics match in terms of parity in the
45 // fast path of CheckFunReifiedGenericMismatch
46 uint32_t m_bitmap;
47 // Information regarding each type parameter
48 std::vector<TypeParamInfo> m_typeParamInfo;
50 bool allGenericsSoft() const {
51 return !std::any_of(m_typeParamInfo.begin(), m_typeParamInfo.end(),
52 [](TypeParamInfo t) {
53 return !t.m_isSoft;
54 });
60 #endif