void binary_serialize_spec(CObjRef zthis, PHPOutputTransport& transport, CArrRef spec) { for (ArrayIter key_ptr = spec.begin(); !key_ptr.end(); ++key_ptr) { Variant key = key_ptr.first(); if (!key.isInteger()) { throw_tprotocolexception("Bad keytype in TSPEC (expected 'long')", INVALID_DATA); return; } unsigned long fieldno = key.toInt64(); Array fieldspec = key_ptr.second().toArray(); // field name String varname = fieldspec.rvalAt(PHPTransport::s_var, AccessFlags::Error_Key).toString(); // thrift type int8_t ttype = fieldspec.rvalAt(PHPTransport::s_type, AccessFlags::Error_Key).toByte(); Variant prop = zthis->o_get(varname, true, zthis->o_getClassName()); if (!prop.isNull()) { transport.writeI8(ttype); transport.writeI16(fieldno); binary_serialize(ttype, transport, prop, fieldspec); } } transport.writeI8(T_STOP); // struct end }
Object f_hphp_recursiveiteratoriterator___construct(CObjRef obj, CObjRef iterator, int64_t mode, int64_t flags) { if (iterator->instanceof(SystemLib::s_RecursiveDirectoryIteratorClass)) { CVarRef rsrc = iterator->o_get("rsrc", true, "SplFileInfo"); obj->o_set("rsrc", NEWOBJ(RecursiveIteratorIterator)(rsrc, mode, flags), "RecursiveIteratorIterator"); return obj; } throw NotImplementedException("this type of iterator"); }
Variant f_hphp_get_property(CObjRef obj, CStrRef cls, CStrRef prop) { return obj->o_get(prop.data(), -1); }