zend comparison mismatch

Changed parts of tv_comparisons so certain comparisons to resource type matches zend
Esse commit está contido em:
Vaishaal Shankar
2013-06-27 13:48:22 -07:00
commit de Sara Golemon
commit 6f3dfaa4a3
3 arquivos alterados com 1309 adições e 15 exclusões
+21 -15
Ver Arquivo
@@ -139,7 +139,7 @@ bool cellRelOp(Op op, const Cell* cell, const StringData* val) {
case KindOfObject:
{
auto const od = cell->m_data.pobj;
if (od->isResource()) return op(true, false);
if (od->isResource()) return op(od->o_toDouble(), val->toDouble());
if (od->isCollection()) return op.collectionVsNonObj();
try {
String str(const_cast<ObjectData*>(od)->t___tostring());
@@ -169,10 +169,13 @@ bool cellRelOp(Op op, const Cell* cell, const ArrayData* ad) {
case KindOfStaticString:
case KindOfString: return op(false, true);
case KindOfObject:
return cell->m_data.pobj->isCollection()
? op.collectionVsNonObj()
: op(true, false);
{
auto const od = cell->m_data.pobj;
if (od->isResource()) return op(false, true);
return od->isCollection()
? op.collectionVsNonObj()
: op(true, false);
}
default:
break;
}
@@ -196,19 +199,22 @@ bool cellRelOp(Op op, const Cell* cell, const ObjectData* od) {
return od->isCollection() ? op.collectionVsNonObj()
: op(cell->m_data.dbl, od->o_toDouble());
case KindOfArray:
return od->isCollection() ? op.collectionVsNonObj() : op(false, true);
if (od->isResource()) return op(true, false);
return od->isCollection() ? op.collectionVsNonObj() : op(false, true);
case KindOfString:
case KindOfStaticString:
if (od->isResource()) return op(false, true);
if (od->isCollection()) return op.collectionVsNonObj();
try {
String str(const_cast<ObjectData*>(od)->t___tostring());
return op(cell->m_data.pstr, str.get());
} catch (BadTypeConversionException&) {
return op(false, true);
}
{
auto const str = cell->m_data.pstr;
if (od->isResource()) return op(str->toDouble(), od->o_toDouble());
if (od->isCollection()) return op.collectionVsNonObj();
try {
String str(const_cast<ObjectData*>(od)->t___tostring());
return op(cell->m_data.pstr, str.get());
} catch (BadTypeConversionException&) {
return op(false, true);
}
}
case KindOfObject:
return op(cell->m_data.pobj, od);
+36
Ver Arquivo
@@ -0,0 +1,36 @@
<?php
error_reporting(0);
class C {
public $a = 2;
}
class D {
public $b = 1;
}
$c1 = new C;
$c2 = new C;
$c2->a = 3;
$d = new D;
$f = fopen('php://stdout', 'w');
$arr = array('null' => null, 'false' => false, 'true' => true, 'int 0' => 0,
'int 99' => 99, 'int -1' => -1, 'float 0' => 0.0,'double 99' => (double) 99,
'float 99' => 99.0, 'float -1' => -1.0, 'INF' => INF,
'-INF' => -INF, '""' => "", '"0"' => "0",
'"99"' => "99", '"-1"' => "-1", '"0.0"' => "0.0",
'"99.0"' => "99.0", '"-1.0"' => "-1.0", 'array()' => array(),
'array(99)' => array(99), 'object c1' => $c1, 'object c2' => $c2,
'object d' => $d, 'resource' => $f);
echo " same lt lte eq ne nw2 gte gt\n\n";
foreach ($arr as $k1 => $v1) {
foreach ($arr as $k2 => $v2) {
echo "$k1 cmp $k2:\n ";
echo (($v1 === $v2) ? "T " : "F ");
echo (($v1 < $v2) ? "T " : "F ");
echo (($v1 <= $v2) ? "T " : "F ");
echo (($v1 == $v2) ? "T " : "F ");
echo (($v1 >= $v2) ? "T " : "F ");
echo (($v1 > $v2) ? "T " : "F ");
echo "\n";
}
}
fclose($f);
?>
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff