Remove lval(), id() and wrap_variant() from builtin_functions.h
Esse commit está contido em:
@@ -277,54 +277,6 @@ inline bool is_empty_string(CVarRef v) {
|
||||
bool interface_supports_array(const StringData* s);
|
||||
bool interface_supports_array(const std::string& n);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// special variable contexts
|
||||
|
||||
/**
|
||||
* lval() is mainly to make this work,
|
||||
*
|
||||
* $arr['a']['b'] = $value;
|
||||
*
|
||||
* where $arr['a'] is in an l-value context. Note that lval() cannot replace
|
||||
* those offset classes, because calling these lval() functions will actually
|
||||
* insert a null value into an array/object, whereas an offset class can be
|
||||
* more powerful by not inserting a dummy value beforehand. For example,
|
||||
*
|
||||
* isset($arr['a']); // we have to use offset's exists() function
|
||||
* $obj['a'] = $value; // ArrayAccess's offset is completely customized
|
||||
*
|
||||
*/
|
||||
template<class T>
|
||||
T &lval(T &v) { return v; }
|
||||
inline Variant &lval(Variant &v) { return v;}
|
||||
inline Array &lval(Array &v) { return v;}
|
||||
inline Variant &lval(CVarRef v) { // in case generating lval(1)
|
||||
throw FatalErrorException("taking reference from an r-value");
|
||||
}
|
||||
inline String &lval(const StringOffset &v) { return v.lval();}
|
||||
|
||||
template<class T>
|
||||
Variant &unsetLval(Variant &v, const T &key) {
|
||||
if (v.isNull()) {
|
||||
return v;
|
||||
}
|
||||
if (v.is(KindOfArray)) {
|
||||
if (v.toArray().exists(key)) {
|
||||
return v.lvalAt(key);
|
||||
}
|
||||
return Variant::lvalBlackHole();
|
||||
}
|
||||
return Variant::lvalInvalid();
|
||||
}
|
||||
|
||||
template<class T>
|
||||
Variant &unsetLval(Array &v, const T &key) {
|
||||
if (!v.isNull() && v.exists(key)) {
|
||||
return v.lvalAt(key);
|
||||
}
|
||||
return Variant::lvalBlackHole();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// misc functions
|
||||
|
||||
@@ -506,32 +458,6 @@ Variant invoke_file(CStrRef file, bool once = false,
|
||||
bool invoke_file_impl(Variant &res, CStrRef path, bool once,
|
||||
const char *currentDir);
|
||||
|
||||
/**
|
||||
* For wrapping expressions that have no effect, so to make gcc happy.
|
||||
*/
|
||||
inline bool id(bool v) { return v; }
|
||||
inline char id(char v) { return v; }
|
||||
inline short id(short v) { return v; }
|
||||
inline int id(int v) { return v; }
|
||||
inline int64_t id(int64_t v) { return v; }
|
||||
inline uint64_t id(uint64_t v) { return v; }
|
||||
inline double id(double v) { return v; }
|
||||
inline litstr id(litstr v) { return v; }
|
||||
inline CStrRef id(CStrRef v) { return v; }
|
||||
inline CArrRef id(CArrRef v) { return v; }
|
||||
inline CObjRef id(CObjRef v) { return v; }
|
||||
inline CVarRef id(CVarRef v) { return v; }
|
||||
template <class T>
|
||||
inline const SmartObject<T> &id(const SmartObject<T> &v) { return v; }
|
||||
|
||||
/**
|
||||
* For wrapping return values to prevent elision of copy
|
||||
* constructors. This can be a problem if the function
|
||||
* returns by value, but a "referenced" variant is returned
|
||||
* through copy-constructor elision.
|
||||
*/
|
||||
inline Variant wrap_variant(CVarRef x) { return x; }
|
||||
|
||||
bool function_exists(CStrRef function_name);
|
||||
|
||||
/**
|
||||
|
||||
@@ -1406,7 +1406,7 @@ Variant f_mb_convert_variables(int _argc, CStrRef to_encoding,
|
||||
if (convd != NULL) {
|
||||
vars = php_mbfl_convert(vars, convd, &string, &result);
|
||||
for (int n = 0; n < _argv.size(); n++) {
|
||||
lval(((Array&)_argv).lval(n)) =
|
||||
const_cast<Array&>(_argv).lval(n) =
|
||||
php_mbfl_convert(_argv[n], convd, &string, &result);
|
||||
}
|
||||
MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd);
|
||||
|
||||
@@ -551,22 +551,22 @@ bool TestCppBase::TestArray() {
|
||||
// escalation
|
||||
{
|
||||
Array arr;
|
||||
lval(arr.lvalAt(0)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(0).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_VECTOR1(CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
Array arr;
|
||||
lval(arr.lvalAt(s_name)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(s_name).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_MAP1(s_name, CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
Array arr = Array::Create();
|
||||
lval(arr.lvalAt(0)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(0).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_VECTOR1(CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
Array arr = Array::Create();
|
||||
lval(arr.lvalAt(s_name)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(s_name).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_MAP1(s_name, CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
@@ -576,7 +576,7 @@ bool TestCppBase::TestArray() {
|
||||
}
|
||||
{
|
||||
Array arr = Array::Create("test");
|
||||
lval(arr.lvalAt(s_name)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(s_name).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_MAP2(0, "test", s_name, CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
@@ -778,22 +778,22 @@ bool TestCppBase::TestVariant() {
|
||||
// array escalation
|
||||
{
|
||||
Variant arr;
|
||||
lval(arr.lvalAt(0)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(0).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_VECTOR1(CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
Variant arr;
|
||||
lval(arr.lvalAt(s_name)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(s_name).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_MAP1(s_name, CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
Variant arr = Array::Create();
|
||||
lval(arr.lvalAt(0)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(0).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_VECTOR1(CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
Variant arr = Array::Create();
|
||||
lval(arr.lvalAt(s_name)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(s_name).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_MAP1(s_name, CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
{
|
||||
@@ -803,7 +803,7 @@ bool TestCppBase::TestVariant() {
|
||||
}
|
||||
{
|
||||
Variant arr = Array::Create("test");
|
||||
lval(arr.lvalAt(s_name)).lvalAt(0) = 1.2;
|
||||
arr.lvalAt(s_name).lvalAt(0) = 1.2;
|
||||
VS(arr, CREATE_MAP2(0, "test", s_name, CREATE_VECTOR1(1.2)));
|
||||
}
|
||||
|
||||
|
||||
@@ -696,9 +696,9 @@ bool TestExtArray::test_array_multisort() {
|
||||
Variant ar = CREATE_VECTOR2
|
||||
(CREATE_VECTOR5("10", 11, 100, 100, "a"),
|
||||
CREATE_VECTOR5( 1, 2, "2", 3, 1));
|
||||
f_array_multisort(6, ref(lval(ar.lvalAt(0))),
|
||||
f_array_multisort(6, ref(ar.lvalAt(0)),
|
||||
CREATE_VECTOR5(k_SORT_ASC, k_SORT_STRING,
|
||||
ref(lval(ar.lvalAt(1))),
|
||||
ref(ar.lvalAt(1)),
|
||||
k_SORT_NUMERIC, k_SORT_DESC));
|
||||
VS(f_print_r(ar, true),
|
||||
"Array\n"
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário