Arquivos
hhvm/hphp/runtime/base/resource_data.cpp
T
Paul Tarjan 09c916e585 make o_toBoolean non-virtual
I know this is bad form, but we need this for performance. Right now, o_toBoolean() isn't even being called. When D825610 lands it will be and will be a small perf regression.

If this situation gets bad, then we should revisit it, but since only one class is overriding it for now, this should be ok.

(I don't understand C++, did I do the virtual thing right? I had to declare them to make the linker work)
2013-06-19 09:54:37 -07:00

78 linhas
2.6 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010-2013 Facebook, Inc. (http://www.facebook.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#include "hphp/runtime/base/resource_data.h"
#include "hphp/runtime/base/complex_types.h"
#include "hphp/runtime/base/variable_serializer.h"
#include "hphp/system/systemlib.h"
namespace HPHP {
///////////////////////////////////////////////////////////////////////////////
// resources have a separate id space
static IMPLEMENT_THREAD_LOCAL_NO_CHECK_HOT(int, os_max_resource_id);
int ResourceData::GetMaxResourceId() {
return *(os_max_resource_id.getCheck());
}
ResourceData::ResourceData()
: Instance(SystemLib::s_resourceClass, true) {
assert(!m_cls->callsCustomInstanceInit());
ObjectData::setAttributes(ObjectData::CallToImpl);
int &pmax = *os_max_resource_id;
if (pmax < 3) pmax = 3; // reserving 1, 2, 3 for STDIN, STDOUT, STDERR
o_id = ++pmax;
}
void ResourceData::o_setId(int id) {
assert(id >= 1 && id <= 3); // only for STDIN, STDOUT, STDERR
int &pmax = *os_max_resource_id;
if (o_id != id) {
if (o_id == pmax) --pmax;
o_id = id;
}
}
ResourceData::~ResourceData() {
int &pmax = *os_max_resource_id;
if (o_id && o_id == pmax) {
--pmax;
}
o_id = -1;
}
String ResourceData::t___tostring() {
return String("Resource id #") + String(o_getId());
}
void ResourceData::serializeImpl(VariableSerializer *serializer) const {
String saveName;
int saveId;
serializer->getResourceInfo(saveName, saveId);
serializer->setResourceInfo(o_getResourceName(), o_getResourceId());
o_toArray().serialize(serializer);
serializer->setResourceInfo(saveName, saveId);
}
CStrRef ResourceData::o_getResourceName() const {
return o_getClassName();
}
///////////////////////////////////////////////////////////////////////////////
}