Remove lval(), id() and wrap_variant() from builtin_functions.h

Esse commit está contido em:
Jordan DeLong
2013-06-10 17:18:55 -07:00
commit de Sara Golemon
commit 48346cb13d
4 arquivos alterados com 13 adições e 87 exclusões
-74
Ver Arquivo
@@ -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);
/**
+1 -1
Ver Arquivo
@@ -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);
+10 -10
Ver Arquivo
@@ -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)));
}
+2 -2
Ver Arquivo
@@ -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"