track total size of static array and Unit/Class/Func
[hiphop-php.git] / hphp / runtime / base / enum-util.cpp
blob5efb1a694183ac3ac82222788e5cc187eb64083d
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 +----------------------------------------------------------------------+
16 #include "hphp/runtime/base/enum-util.h"
18 #include "hphp/runtime/base/datatype.h"
19 #include "hphp/runtime/base/enum-cache.h"
21 namespace HPHP {
23 ///////////////////////////////////////////////////////////////////////////////
25 bool enumHasValue(const Class* cls, const TypedValue* cell) {
26 assertx(isEnum(cls));
27 auto const type = cell->m_type;
28 if (UNLIKELY(type != KindOfInt64 && !isStringType(type))) {
29 return false;
31 auto const values = EnumCache::getValuesBuiltin(cls);
32 // Manually perform int-like key conversion even if names is a dict, for
33 // backwards compatibility.
34 int64_t num;
35 if (isStringType(type) &&
36 cell->m_data.pstr->isStrictlyInteger(num)) {
37 return values->names.exists(num);
39 return values->names.exists(*cell);
42 ///////////////////////////////////////////////////////////////////////////////