diff --git a/hphp/runtime/base/variable_serializer.cpp b/hphp/runtime/base/variable_serializer.cpp index d322e5eb7..d6c1248fd 100644 --- a/hphp/runtime/base/variable_serializer.cpp +++ b/hphp/runtime/base/variable_serializer.cpp @@ -545,7 +545,12 @@ void VariableSerializer::writeArrayHeader(int size, bool isVectorData) { } if (!m_objClass.empty()) { m_buf->append(m_objClass); - m_buf->append("::__set_state(array(\n"); + if (m_objCode == 'O') { + m_buf->append("::__set_state(array(\n"); + } else { + assert(m_objCode == 'V' || m_objCode == 'K'); + m_buf->append(" {\n"); + } } else { m_buf->append("array (\n"); } @@ -758,7 +763,6 @@ void VariableSerializer::writeCollectionKey(CVarRef key) { } void VariableSerializer::writeCollectionKeylessPrefix() { - ArrayInfo &info = m_arrayInfos.back(); switch (m_type) { case PrintR: case VarExport: @@ -772,7 +776,8 @@ void VariableSerializer::writeCollectionKeylessPrefix() { case DebuggerSerialize: break; case JSON: - case DebuggerDump: + case DebuggerDump: { + ArrayInfo &info = m_arrayInfos.back(); if (!info.first_element) { m_buf->append(','); } @@ -781,6 +786,7 @@ void VariableSerializer::writeCollectionKeylessPrefix() { indent(); } break; + } default: assert(false); break; @@ -831,7 +837,12 @@ void VariableSerializer::writeArrayFooter() { case PHPOutput: indent(); if (info.is_object) { - m_buf->append("))"); + if (m_objCode == 'O') { + m_buf->append("))"); + } else { + assert(m_objCode == 'V' || m_objCode == 'K'); + m_buf->append("}"); + } } else { m_buf->append(')'); } diff --git a/hphp/runtime/ext/ext_collections.cpp b/hphp/runtime/ext/ext_collections.cpp index 191452209..47fa9f83f 100644 --- a/hphp/runtime/ext/ext_collections.cpp +++ b/hphp/runtime/ext/ext_collections.cpp @@ -4578,10 +4578,13 @@ void collectionSerialize(ObjectData* obj, VariableSerializer* serializer) { serializer->writeArrayHeader(sz, true); if (serializer->getType() == VariableSerializer::Serialize || serializer->getType() == VariableSerializer::APCSerialize || - serializer->getType() == VariableSerializer::DebuggerSerialize) { + serializer->getType() == VariableSerializer::DebuggerSerialize || + serializer->getType() == VariableSerializer::VarExport || + serializer->getType() == VariableSerializer::PHPOutput) { // For the 'V' serialization format, we don't print out keys // for Serialize, APCSerialize, DebuggerSerialize for (ArrayIter iter(obj); iter; ++iter) { + serializer->writeCollectionKeylessPrefix(); serializer->writeArrayValue(iter.second()); } } else { diff --git a/hphp/test/slow/collection_classes/806.php.expect b/hphp/test/slow/collection_classes/806.php.expect index d7e0e8709..1d690e41b 100644 --- a/hphp/test/slow/collection_classes/806.php.expect +++ b/hphp/test/slow/collection_classes/806.php.expect @@ -12,10 +12,10 @@ Vector Object [1] => foo ) [7,"foo"] -Vector::__set_state(array( - 0 => 7, - 1 => 'foo', -)) +Vector { + 7, + 'foo', +} object(Vector)#2 (2) { [0]=> int(7) @@ -28,7 +28,7 @@ Vector Object [1] => foo ) [7,"foo"] -Vector::__set_state(array( - 0 => 7, - 1 => 'foo', -)) +Vector { + 7, + 'foo', +} diff --git a/hphp/test/slow/collection_classes/807.php.expect b/hphp/test/slow/collection_classes/807.php.expect index 4db292c96..6f8f392cb 100644 --- a/hphp/test/slow/collection_classes/807.php.expect +++ b/hphp/test/slow/collection_classes/807.php.expect @@ -9,9 +9,9 @@ Map Object [3] => foo ) {"3":"foo"} -Map::__set_state(array( +Map { 3 => 'foo', -)) +} object(Map)#2 (1) { [3]=> string(3) "foo" @@ -21,9 +21,9 @@ Map Object [3] => foo ) {"3":"foo"} -Map::__set_state(array( +Map { 3 => 'foo', -)) +} ------------------------ string(28) "K:3:"Map":1:{s:3:"bar";i:7;}" ------------------------ @@ -36,9 +36,9 @@ Map Object [bar] => 7 ) {"bar":7} -Map::__set_state(array( +Map { 'bar' => 7, -)) +} object(Map)#4 (1) { ["bar"]=> int(7) @@ -48,6 +48,6 @@ Map Object [bar] => 7 ) {"bar":7} -Map::__set_state(array( +Map { 'bar' => 7, -)) +} diff --git a/hphp/test/slow/collection_classes/808.php.expect b/hphp/test/slow/collection_classes/808.php.expect index 2e33e353f..b740856a1 100644 --- a/hphp/test/slow/collection_classes/808.php.expect +++ b/hphp/test/slow/collection_classes/808.php.expect @@ -12,10 +12,10 @@ StableMap Object [bar] => 7 ) {"3":"foo","bar":7} -StableMap::__set_state(array( +StableMap { 3 => 'foo', 'bar' => 7, -)) +} object(StableMap)#2 (2) { [3]=> string(3) "foo" @@ -28,10 +28,10 @@ StableMap Object [bar] => 7 ) {"3":"foo","bar":7} -StableMap::__set_state(array( +StableMap { 3 => 'foo', 'bar' => 7, -)) +} ------------------------ string(48) "K:9:"StableMap":2:{s:3:"bar";i:7;i:3;s:3:"foo";}" ------------------------ @@ -47,10 +47,10 @@ StableMap Object [3] => foo ) {"bar":7,"3":"foo"} -StableMap::__set_state(array( +StableMap { 'bar' => 7, 3 => 'foo', -)) +} object(StableMap)#4 (2) { ["bar"]=> int(7) @@ -63,7 +63,7 @@ StableMap Object [3] => foo ) {"bar":7,"3":"foo"} -StableMap::__set_state(array( +StableMap { 'bar' => 7, 3 => 'foo', -)) +} diff --git a/hphp/test/slow/collection_classes/836.php.expect b/hphp/test/slow/collection_classes/836.php.expect index 209970f45..ebe70880e 100644 --- a/hphp/test/slow/collection_classes/836.php.expect +++ b/hphp/test/slow/collection_classes/836.php.expect @@ -14,11 +14,11 @@ object(Set)#1 (3) refcount(2){ long(2) refcount(1) long(3) refcount(1) } -Set::__set_state(array( +Set { 1, 2, 3, -)) +} [1,2,3] [ 1,