2 +----------------------------------------------------------------------+
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 +----------------------------------------------------------------------+
16 #include "hphp/runtime/base/enum-util.h"
18 #include "hphp/runtime/base/datatype.h"
19 #include "hphp/runtime/base/enum-cache.h"
23 ///////////////////////////////////////////////////////////////////////////////
25 bool enumHasValue(const Class
* cls
, const TypedValue
* cell
) {
27 auto const type
= cell
->m_type
;
28 if (UNLIKELY(type
!= KindOfInt64
&& !isStringType(type
))) {
31 auto const values
= EnumCache::getValuesBuiltin(cls
);
32 // Manually perform int-like key conversion even if names is a dict, for
33 // backwards compatibility.
35 if (isStringType(type
) &&
36 cell
->m_data
.pstr
->isStrictlyInteger(num
)) {
37 return values
->names
.exists(num
);
39 return values
->names
.exists(*cell
);
42 ///////////////////////////////////////////////////////////////////////////////