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 +----------------------------------------------------------------------+
17 #include "hphp/runtime/base/header-kind.h"
18 #include "hphp/runtime/base/typed-value.h"
22 ///////////////////////////////////////////////////////////////////////////////
24 inline member_lval::member_lval()
29 inline member_lval::member_lval(HeapObject
* base
, member_lval::ptr_u ptr
)
34 inline member_lval::member_lval(HeapObject
* base
, TypedValue
* elem
)
39 inline member_lval
member_lval::raw(TypedValue
* tv
) {
40 return member_lval
{ nullptr, tv
};
43 inline HeapObject
* member_lval::base() const {
47 inline ArrayData
* member_lval::arr_base() const {
48 assertx(isArrayKind(m_base
->kind()));
52 inline member_lval::operator bool() const {
56 inline bool member_lval::has_ref() const {
60 inline Value
& member_lval::val() const {
64 inline DataType
& member_lval::type() const {
65 return m_ptr
.tv
->m_type
;
68 inline TypedValue
* member_lval::tv_ptr() const {
72 inline TypedValue
member_lval::tv() const {
76 inline member_lval::ptr_u
member_lval::elem() const {
80 ///////////////////////////////////////////////////////////////////////////////
82 ALWAYS_INLINE DataType
& type(member_lval lval
) { return lval
.type(); }
83 ALWAYS_INLINE Value
& val(member_lval lval
) { return lval
.val(); }
84 ALWAYS_INLINE TypedValue
as_tv(member_lval lval
) { return lval
.tv(); }
86 ///////////////////////////////////////////////////////////////////////////////
88 inline member_rval::member_rval()
93 inline member_rval::member_rval(const HeapObject
* base
,
94 member_rval::ptr_u ptr
)
99 inline member_rval::member_rval(const HeapObject
* base
,
100 const TypedValue
* elem
)
105 inline bool member_rval::operator==(member_rval o
) const {
106 return m_base
== o
.m_base
&&
107 m_ptr
.tv
== o
.m_ptr
.tv
;
110 inline const HeapObject
* member_rval::base() const {
114 inline member_rval::operator bool() const {
118 inline bool member_rval::has_val() const {
122 inline Value
member_rval::val() const {
126 inline DataType
member_rval::type() const {
127 return m_ptr
.tv
->m_type
;
130 inline const TypedValue
* member_rval::tv_ptr() const {
134 inline TypedValue
member_rval::tv() const {
138 inline member_rval::ptr_u
member_rval::elem() const {
142 inline member_rval
member_rval::dummy() {
143 return member_rval
{ nullptr, &immutable_uninit_base
};
146 inline bool member_rval::is_dummy() const {
147 return *this == dummy();
150 ///////////////////////////////////////////////////////////////////////////////