Eliminate most Variant litstr methods

Doesn't eliminate the Variant(litstr) constructor, or the
same/equals/more/less/etc helpers called from comparisons.h;
those will come in a followon diff.
Esse commit está contido em:
Edwin Smith
2013-05-12 09:42:11 -07:00
commit de Sara Golemon
commit ada1c7b2f9
17 arquivos alterados com 234 adições e 190 exclusões
+9 -11
Ver Arquivo
@@ -329,14 +329,12 @@ static pcre* pcre_get_compiled_regex(CStrRef regex, pcre_extra **extra,
static inline void add_offset_pair(Variant &result, CStrRef str, int offset,
const char *name) {
Array match_pair;
match_pair.append(str);
match_pair.append(offset);
if (name) {
result.set(name, match_pair);
}
result.append(match_pair);
ArrayInit match_pair(2);
match_pair.set(str);
match_pair.set(offset);
Variant match_pair_v = match_pair.toVariant();
if (name) result.set(String(name), match_pair_v);
result.append(match_pair_v);
}
static inline bool pcre_need_log_error(int pcre_code) {
@@ -633,7 +631,7 @@ static Variant preg_match_impl(CStrRef pattern, CStrRef subject,
String value(stringlist[i], offsets[(i<<1)+1] - offsets[i<<1],
CopyString);
if (subpat_names[i]) {
result_set.set(subpat_names[i], value);
result_set.set(String(subpat_names[i]), value);
}
result_set.append(value);
}
@@ -654,7 +652,7 @@ static Variant preg_match_impl(CStrRef pattern, CStrRef subject,
String value(stringlist[i], offsets[(i<<1)+1] - offsets[i<<1],
CopyString);
if (subpat_names[i]) {
subpats->set(subpat_names[i], value);
subpats->set(String(subpat_names[i]), value);
}
subpats->append(value);
}
@@ -698,7 +696,7 @@ static Variant preg_match_impl(CStrRef pattern, CStrRef subject,
if (subpats && global && subpats_order == PREG_PATTERN_ORDER) {
for (i = 0; i < num_subpats; i++) {
if (subpat_names[i]) {
subpats->set(subpat_names[i], match_sets[i]);
subpats->set(String(subpat_names[i]), match_sets[i]);
}
subpats->append(match_sets[i]);
}
+29 -14
Ver Arquivo
@@ -128,7 +128,7 @@ static void process_cmd_arguments(int argc, char **argv) {
SystemGlobals *g = (SystemGlobals *)get_global_variables();
g->GV(argc) = argc;
for (int i = 0; i < argc; i++) {
g->GV(argv).lvalAt() = argv[i];
g->GV(argv).lvalAt() = String(argv[i]);
}
}
@@ -439,6 +439,21 @@ void handle_destructor_exception(const char* situation) {
}
}
static const StaticString
s_HPHP("HPHP"),
s_HHVM("HHVM"),
s_HHVM_JIT("HHVM_JIT"),
s_REQUEST_START_TIME("REQUEST_START_TIME"),
s_REQUEST_TIME("REQUEST_TIME"),
s_DOCUMENT_ROOT("DOCUMENT_ROOT"),
s_SCRIPT_FILENAME("SCRIPT_FILENAME"),
s_SCRIPT_NAME("SCRIPT_NAME"),
s_PHP_SELF("PHP_SELF"),
s_argc("argc"),
s_argv("argv"),
s_PWD("PWD"),
s_HOSTNAME("HOSTNAME");
void execute_command_line_begin(int argc, char **argv, int xhprof) {
StackTraceNoHeap::AddExtraLogging("ThreadType", "CLI");
string args;
@@ -455,10 +470,10 @@ void execute_command_line_begin(int argc, char **argv, int xhprof) {
SystemGlobals *g = (SystemGlobals *)get_global_variables();
process_env_variables(g->GV(_ENV));
g->GV(_ENV).set("HPHP", 1);
g->GV(_ENV).set("HHVM", 1);
g->GV(_ENV).set(s_HPHP, 1);
g->GV(_ENV).set(s_HHVM, 1);
if (RuntimeOption::EvalJit) {
g->GV(_ENV).set("HHVM_JIT", 1);
g->GV(_ENV).set(s_HHVM_JIT, 1);
}
process_cmd_arguments(argc, argv);
@@ -466,18 +481,18 @@ void execute_command_line_begin(int argc, char **argv, int xhprof) {
Variant &server = g->GV(_SERVER);
process_env_variables(server);
time_t now = time(nullptr);
server.set("REQUEST_START_TIME", now);
server.set("REQUEST_TIME", now);
server.set("DOCUMENT_ROOT", "");
server.set("SCRIPT_FILENAME", argv[0]);
server.set("SCRIPT_NAME", argv[0]);
server.set("PHP_SELF", argv[0]);
server.set("argv", g->GV(argv));
server.set("argc", g->GV(argc));
server.set("PWD", g_context->getCwd());
server.set(s_REQUEST_START_TIME, now);
server.set(s_REQUEST_TIME, now);
server.set(s_DOCUMENT_ROOT, empty_string);
server.set(s_SCRIPT_FILENAME, argv[0]);
server.set(s_SCRIPT_NAME, argv[0]);
server.set(s_PHP_SELF, argv[0]);
server.set(s_argv, g->GV(argv));
server.set(s_argc, g->GV(argc));
server.set(s_PWD, g_context->getCwd());
char hostname[1024];
if (!gethostname(hostname, 1024)) {
server.set("HOSTNAME", String(hostname, CopyString));
server.set(s_HOSTNAME, String(hostname, CopyString));
}
for(std::map<string,string>::iterator it =
+90 -45
Ver Arquivo
@@ -73,6 +73,51 @@ const VirtualHost *HttpProtocol::GetVirtualHost(Transport *transport) {
return VirtualHost::GetCurrent();
}
static const StaticString
s_REQUEST_START_TIME("REQUEST_START_TIME"),
s_HPHP("HPHP"),
s_HHVM("HHVM"),
s_HHVM_JIT("HHVM_JIT"),
s_HPHP_SERVER("HPHP_SERVER"),
s_HPHP_HOTPROFILER("HPHP_HOTPROFILER"),
s_HTTP_HOST("HTTP_HOST"),
s_CONTENT_TYPE("CONTENT_TYPE"),
s_CONTENT_LENGTH("CONTENT_LENGTH"),
s_PHP_AUTH_USER("PHP_AUTH_USER"),
s_PHP_AUTH_PW("PHP_AUTH_PW"),
s_REQUEST_URI("REQUEST_URI"),
s_SCRIPT_URL("SCRIPT_URL"),
s_SCRIPT_URI("SCRIPT_URI"),
s_SCRIPT_NAME("SCRIPT_NAME"),
s_PHP_SELF("PHP_SELF"),
s_SCRIPT_FILENAME("SCRIPT_FILENAME"),
s_PATH_TRANSLATED("PATH_TRANSLATED"),
s_PATH_INFO("PATH_INFO"),
s_argc("argc"),
s_argv("argv"),
s_GATEWAY_INTERFACE("GATEWAY_INTERFACE"),
s_CGI_1_1("CGI/1.1"),
s_SERVER_ADDR("SERVER_ADDR"),
s_SERVER_NAME("SERVER_NAME"),
s_SERVER_PORT("SERVER_PORT"),
s_SERVER_SOFTWARE("SERVER_SOFTWARE"),
s_SERVER_PROTOCOL("SERVER_PROTOCOL"),
s_SERVER_ADMIN("SERVER_ADMIN"),
s_SERVER_SIGNATURE("SERVER_SIGNATURE"),
s_REQUEST_METHOD("REQUEST_METHOD"),
s_GET("GET"),
s_HEAD("HEAD"),
s_POST("POST"),
s_HTTPS("HTTPS"),
s_1("1"),
s_REQUEST_TIME("REQUEST_TIME"),
s_QUERY_STRING("QUERY_STRING"),
s_REMOTE_ADDR("REMOTE_ADDR"),
s_REMOTE_HOST("REMOTE_HOST"),
s_REMOTE_PORT("REMOTE_PORT"),
s_DOCUMENT_ROOT("DOCUMENT_ROOT"),
s_THREAD_TYPE("THREAD_TYPE");
/**
* PHP has "EGPCS" processing order of these global variables, and this
* order is important in preparing $_REQUEST that needs to know which to
@@ -85,21 +130,21 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
const VirtualHost *vhost = VirtualHost::GetCurrent();
Variant &server = g->GV(_SERVER);
server.set("REQUEST_START_TIME", time(nullptr));
server.set(s_REQUEST_START_TIME, time(nullptr));
// $_ENV
process_env_variables(g->GV(_ENV));
g->GV(_ENV).set("HPHP", 1);
g->GV(_ENV).set("HHVM", 1);
g->GV(_ENV).set(s_HPHP, 1);
g->GV(_ENV).set(s_HHVM, 1);
if (RuntimeOption::EvalJit) {
g->GV(_ENV).set("HHVM_JIT", 1);
g->GV(_ENV).set(s_HHVM_JIT, 1);
}
bool isServer = RuntimeOption::serverExecutionMode();
if (isServer) {
g->GV(_ENV).set("HPHP_SERVER", 1);
g->GV(_ENV).set(s_HPHP_SERVER, 1);
#ifdef HOTPROFILER
g->GV(_ENV).set("HPHP_HOTPROFILER", 1);
g->GV(_ENV).set(s_HPHP_HOTPROFILER, 1);
#endif
}
@@ -235,7 +280,7 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
String hostName(VirtualHost::GetCurrent()->serverName(host));
string hostHeader(host);
if (hostHeader.empty()) {
server.set("HTTP_HOST", hostName);
server.set(s_HTTP_HOST, hostName);
StackTraceNoHeap::AddExtraLogging("Server", hostName.data());
} else {
StackTraceNoHeap::AddExtraLogging("Server", hostHeader.c_str());
@@ -251,10 +296,10 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
// APE sets CONTENT_TYPE and CONTENT_LENGTH without HTTP_
if (!contentType.empty()) {
server.set("CONTENT_TYPE", String(contentType));
server.set(s_CONTENT_TYPE, String(contentType));
}
if (!contentLength.empty()) {
server.set("CONTENT_LENGTH", String(contentLength));
server.set(s_CONTENT_LENGTH, String(contentLength));
}
// APE processes Authorization: Basic into PHP_AUTH_USER and PHP_AUTH_PW
@@ -267,14 +312,14 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
StringUtil::Base64Decode(String(authorization.c_str() + 6));
int colonPos = decodedAuth.find(':');
if (colonPos != String::npos) {
server.set("PHP_AUTH_USER", decodedAuth.substr(0, colonPos));
server.set("PHP_AUTH_PW", decodedAuth.substr(colonPos + 1));
server.set(s_PHP_AUTH_USER, decodedAuth.substr(0, colonPos));
server.set(s_PHP_AUTH_PW, decodedAuth.substr(colonPos + 1));
}
}
}
server.set("REQUEST_URI", String(transport->getUrl(), CopyString));
server.set("SCRIPT_URL", r.originalURL());
server.set(s_REQUEST_URI, String(transport->getUrl(), CopyString));
server.set(s_SCRIPT_URL, r.originalURL());
String prefix(transport->isSSL() ? "https://" : "http://");
String port_suffix("");
@@ -282,7 +327,7 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
if (!transport->isSSL() && RuntimeOption::ServerPort != 80) {
port_suffix = ":" + RuntimeOption::ServerPort;
}
server.set("SCRIPT_URI",
server.set(s_SCRIPT_URI,
String(prefix + (hostHeader.empty() ? hostName + port_suffix :
String(hostHeader)) + r.originalURL()));
@@ -301,57 +346,57 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
}
name += String(RuntimeOption::DefaultDocument);
}
server.set("SCRIPT_NAME", name);
server.set(s_SCRIPT_NAME, name);
} else {
server.set("SCRIPT_NAME", r.resolvedURL());
server.set(s_SCRIPT_NAME, r.resolvedURL());
}
if (!r.rewritten() && r.pathInfo().empty()) {
server.set("PHP_SELF", r.resolvedURL());
server.set(s_PHP_SELF, r.resolvedURL());
} else {
// when URL is rewritten, or pathinfo is not empty, use original URL
server.set("PHP_SELF", r.originalURL());
server.set(s_PHP_SELF, r.originalURL());
}
server.set("SCRIPT_FILENAME", r.absolutePath());
server.set(s_SCRIPT_FILENAME, r.absolutePath());
if (r.pathInfo().empty()) {
server.set("PATH_TRANSLATED", r.absolutePath());
server.set(s_PATH_TRANSLATED, r.absolutePath());
} else {
server.set("PATH_TRANSLATED",
server.set(s_PATH_TRANSLATED,
String(vhost->getDocumentRoot() + r.pathInfo().data()));
server.set("PATH_INFO", r.pathInfo());
server.set(s_PATH_INFO, r.pathInfo());
}
server.set("argv", r.queryString());
server.set("argc", 0);
server.set("GATEWAY_INTERFACE", "CGI/1.1");
server.set("SERVER_ADDR", String(RuntimeOption::ServerPrimaryIP));
server.set("SERVER_NAME", hostName);
server.set("SERVER_PORT", RuntimeOption::ServerPort);
server.set("SERVER_SOFTWARE", "HPHP");
server.set("SERVER_PROTOCOL", "HTTP/" + transport->getHTTPVersion());
server.set("SERVER_ADMIN", "");
server.set("SERVER_SIGNATURE", "");
server.set(s_argv, r.queryString());
server.set(s_argc, 0);
server.set(s_GATEWAY_INTERFACE, s_CGI_1_1);
server.set(s_SERVER_ADDR, String(RuntimeOption::ServerPrimaryIP));
server.set(s_SERVER_NAME, hostName);
server.set(s_SERVER_PORT, RuntimeOption::ServerPort);
server.set(s_SERVER_SOFTWARE, s_HPHP);
server.set(s_SERVER_PROTOCOL, "HTTP/" + transport->getHTTPVersion());
server.set(s_SERVER_ADMIN, empty_string);
server.set(s_SERVER_SIGNATURE, empty_string);
switch (transport->getMethod()) {
case Transport::GET: server.set("REQUEST_METHOD", "GET"); break;
case Transport::HEAD: server.set("REQUEST_METHOD", "HEAD"); break;
case Transport::GET: server.set(s_REQUEST_METHOD, s_GET); break;
case Transport::HEAD: server.set(s_REQUEST_METHOD, s_HEAD); break;
case Transport::POST:
if (transport->getExtendedMethod() == nullptr) {
server.set("REQUEST_METHOD", "POST");
server.set(s_REQUEST_METHOD, s_POST);
} else {
server.set("REQUEST_METHOD", transport->getExtendedMethod());
server.set(s_REQUEST_METHOD, transport->getExtendedMethod());
}
break;
default: server.set("REQUEST_METHOD", ""); break;
default: server.set(s_REQUEST_METHOD, empty_string); break;
}
server.set("HTTPS", transport->isSSL() ? "1" : "");
server.set("REQUEST_TIME", time(nullptr));
server.set("QUERY_STRING", r.queryString());
server.set(s_HTTPS, transport->isSSL() ? s_1 : empty_string);
server.set(s_REQUEST_TIME, time(nullptr));
server.set(s_QUERY_STRING, r.queryString());
server.set("REMOTE_ADDR", String(transport->getRemoteHost(), CopyString));
server.set("REMOTE_HOST", ""); // I don't think we need to nslookup
server.set("REMOTE_PORT", transport->getRemotePort());
server.set(s_REMOTE_ADDR, String(transport->getRemoteHost(), CopyString));
server.set(s_REMOTE_HOST, empty_string); // I don't think we need to nslookup
server.set(s_REMOTE_PORT, transport->getRemotePort());
server.set("DOCUMENT_ROOT", String(vhost->getDocumentRoot()));
server.set(s_DOCUMENT_ROOT, String(vhost->getDocumentRoot()));
for (map<string, string>::const_iterator iter =
RuntimeOption::ServerVariables.begin();
@@ -367,7 +412,7 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
sri.setServerVariables(server);
const char *threadType = transport->getThreadTypeName();
server.set("THREAD_TYPE", threadType);
server.set(s_THREAD_TYPE, threadType);
StackTraceNoHeap::AddExtraLogging("ThreadType", threadType);
}
@@ -152,8 +152,10 @@ void RPCRequestHandler::handleRequest(Transport *transport) {
HttpProtocol::ClearRecord(ret, tmpfile);
}
static const StaticString s_output("output");
static const StaticString s_return("return");
static const StaticString
s_output("output"),
s_return("return"),
s_HPHP_RPC("HPHP_RPC");
bool RPCRequestHandler::executePHPFunction(Transport *transport,
SourceRootInfo &sourceRootInfo) {
@@ -166,7 +168,7 @@ bool RPCRequestHandler::executePHPFunction(Transport *transport,
RequestURI reqURI(rpcFunc);
HttpProtocol::PrepareSystemVariables(transport, reqURI, sourceRootInfo);
SystemGlobals *g = (SystemGlobals*)get_global_variables();
g->GV(_ENV).set("HPHP_RPC", 1);
g->GV(_ENV).set(s_HPHP_RPC, 1);
}
bool isFile = rpcFunc.rfind('.') != string::npos;
+3 -1
Ver Arquivo
@@ -247,10 +247,12 @@ string SourceRootInfo::path() const {
}
}
static const StaticString s_PHP_ROOT("PHP_ROOT");
string& SourceRootInfo::initPhpRoot() {
SystemGlobals *g = (SystemGlobals*)get_global_variables();
Variant &server = g->GV(_SERVER);
Variant v = server.rvalAt("PHP_ROOT");
Variant v = server.rvalAt(s_PHP_ROOT);
if (v.isString()) {
*s_phproot.getCheck() = string(v.asCStrRef().data()) + string("/");
} else {
+14 -9
Ver Arquivo
@@ -31,7 +31,7 @@ namespace HPHP {
class XboxTransport : public Transport, public Synchronizable {
public:
XboxTransport(CStrRef message, CStrRef reqInitDoc = "")
explicit XboxTransport(CStrRef message, CStrRef reqInitDoc = "")
: m_refCount(0), m_done(false), m_code(0) {
gettime(CLOCK_MONOTONIC, &m_queueTime);
@@ -239,6 +239,11 @@ static bool isLocalHost(CStrRef host) {
return host.empty() || host == "localhost" || host == "127.0.0.1";
}
static const StaticString
s_code("code"),
s_response("response"),
s_error("error");
bool XboxServer::SendMessage(CStrRef message, Variant &ret, int timeout_ms,
CStrRef host /* = "localhost" */) {
if (isLocalHost(host)) {
@@ -262,11 +267,11 @@ bool XboxServer::SendMessage(CStrRef message, Variant &ret, int timeout_ms,
job->decRefCount(); // i'm done with this job
if (code > 0) {
ret.set("code", code);
ret.set(s_code, code);
if (code == 200) {
ret.set("response", unserialize_from_string(response));
ret.set(s_response, unserialize_from_string(response));
} else {
ret.set("error", response);
ret.set(s_error, response);
}
return true;
}
@@ -294,17 +299,17 @@ bool XboxServer::SendMessage(CStrRef message, Variant &ret, int timeout_ms,
int len = 0;
char *response = http->recv(len);
String sresponse(response, len, AttachString);
ret.set("code", code);
ret.set(s_code, code);
if (code == 200) {
ret.set("response", unserialize_from_string(sresponse));
ret.set(s_response, unserialize_from_string(sresponse));
} else {
ret.set("error", sresponse);
ret.set(s_error, sresponse);
}
return true;
}
// code wasn't correctly set by http client, treat it as not found
ret.set("code", 404);
ret.set("error", "http client failed");
ret.set(s_code, 404);
ret.set(s_error, "http client failed");
}
}
+1 -23
Ver Arquivo
@@ -291,10 +291,6 @@ HOT_FUNC IMPLEMENT_SET(bool, m_type = KindOfBoolean; m_data.num = v)
IMPLEMENT_SET(int, m_type = KindOfInt64; m_data.num = v)
HOT_FUNC IMPLEMENT_SET(int64_t, m_type = KindOfInt64; m_data.num = v)
IMPLEMENT_SET(double, m_type = KindOfDouble; m_data.dbl = v)
IMPLEMENT_SET(litstr,
m_type = KindOfString;
m_data.pstr = NEW(StringData)(v);
m_data.pstr->incRefCount())
IMPLEMENT_SET(const StaticString&,
StringData* s = v.get();
assert(s);
@@ -1279,7 +1275,7 @@ Variant &Variant::operator++() {
case KindOfString:
{
if (getStringData()->empty()) {
set("1");
set(s_1);
} else {
int64_t lval; double dval;
DataType ret = convertToNumeric(&lval, &dval);
@@ -1914,11 +1910,6 @@ Variant Variant::rvalAtHelper(int64_t offset, ACCESSPARAMS_IMPL) const {
return null_variant;
}
Variant Variant::rvalAt(litstr offset, ACCESSPARAMS_IMPL) const {
String key(offset);
return rvalAt(key, flags);
}
Variant Variant::rvalAt(CStrRef offset, ACCESSPARAMS_IMPL) const {
if (m_type == KindOfArray) {
bool error = flags & AccessFlags::Error;
@@ -2068,11 +2059,6 @@ CVarRef Variant::rvalRef(double offset, CVarRef tmp, ACCESSPARAMS_IMPL) const {
return rvalRefHelper(offset, tmp, flags);
}
CVarRef Variant::rvalRef(litstr offset, CVarRef tmp, ACCESSPARAMS_IMPL) const {
String key(offset);
return rvalRef(key, tmp, flags);
}
CVarRef Variant::rvalRef(CStrRef offset, CVarRef tmp, ACCESSPARAMS_IMPL) const {
if (m_type == KindOfArray) {
bool error = flags & AccessFlags::Error;
@@ -2252,10 +2238,6 @@ Variant &Variant::lvalAt(int64_t key, ACCESSPARAMS_IMPL) {
Variant &Variant::lvalAt(double key, ACCESSPARAMS_IMPL) {
return lvalAtImpl(key, flags);
}
Variant &Variant::lvalAt(litstr ckey, ACCESSPARAMS_IMPL) {
String key(ckey);
return lvalAt(key, flags);
}
Variant &Variant::lvalAt(CStrRef key, ACCESSPARAMS_IMPL) {
return lvalAtImpl<CStrRef>(key, flags);
}
@@ -2272,10 +2254,6 @@ Variant &Variant::lvalRef(int64_t key, Variant& tmp, ACCESSPARAMS_IMPL) {
Variant &Variant::lvalRef(double key, Variant& tmp, ACCESSPARAMS_IMPL) {
return LvalAtImpl0(this, key, &tmp, false, flags);
}
Variant &Variant::lvalRef(litstr ckey, Variant& tmp, ACCESSPARAMS_IMPL) {
String key(ckey);
return lvalRef(key, tmp, flags);
}
Variant &Variant::lvalRef(CStrRef key, Variant& tmp, ACCESSPARAMS_IMPL) {
return Variant::LvalAtImpl0<CStrRef>(this, key, &tmp, false, flags);
}
+11 -19
Ver Arquivo
@@ -802,7 +802,7 @@ class Variant : private TypedValue {
return rvalAtHelper(offset, flags);
}
Variant rvalAt(double offset, ACCESSPARAMS_DECL) const;
Variant rvalAt(litstr offset, ACCESSPARAMS_DECL) const;
Variant rvalAt(litstr offset, ACCESSPARAMS_DECL) const = delete;
Variant rvalAt(CStrRef offset, ACCESSPARAMS_DECL) const;
Variant rvalAt(CVarRef offset, ACCESSPARAMS_DECL) const;
@@ -819,7 +819,7 @@ class Variant : private TypedValue {
return rvalRefHelper(offset, tmp, flags);
}
CVarRef rvalRef(double offset, CVarRef tmp, ACCESSPARAMS_DECL) const;
CVarRef rvalRef(litstr offset, CVarRef tmp, ACCESSPARAMS_DECL) const;
CVarRef rvalRef(litstr offset, CVarRef tmp, ACCESSPARAMS_DECL) const = delete;
CVarRef rvalRef(CStrRef offset, CVarRef tmp, ACCESSPARAMS_DECL) const;
CVarRef rvalRef(CVarRef offset, CVarRef tmp, ACCESSPARAMS_DECL) const;
@@ -873,14 +873,14 @@ class Variant : private TypedValue {
Variant &lvalAt(int key, ACCESSPARAMS_DECL);
Variant &lvalAt(int64_t key, ACCESSPARAMS_DECL);
Variant &lvalAt(double key, ACCESSPARAMS_DECL);
Variant &lvalAt(litstr key, ACCESSPARAMS_DECL);
Variant &lvalAt(litstr key, ACCESSPARAMS_DECL) = delete;
Variant &lvalAt(CStrRef key, ACCESSPARAMS_DECL);
Variant &lvalAt(CVarRef key, ACCESSPARAMS_DECL);
Variant &lvalRef(int key, Variant& tmp, ACCESSPARAMS_DECL);
Variant &lvalRef(int64_t key, Variant& tmp, ACCESSPARAMS_DECL);
Variant &lvalRef(double key, Variant& tmp, ACCESSPARAMS_DECL);
Variant &lvalRef(litstr key, Variant& tmp, ACCESSPARAMS_DECL);
Variant &lvalRef(litstr key, Variant& tmp, ACCESSPARAMS_DECL) = delete;
Variant &lvalRef(CStrRef key, Variant& tmp, ACCESSPARAMS_DECL);
Variant &lvalRef(CVarRef key, Variant& tmp, ACCESSPARAMS_DECL);
@@ -907,9 +907,7 @@ class Variant : private TypedValue {
CVarRef set(int key, CVarRef v) { return set((int64_t)key, v); }
CVarRef set(int64_t key, CVarRef v);
CVarRef set(double key, CVarRef v);
CVarRef set(litstr key, CVarRef v, bool isString = false) {
return set(String(key), v, isString);
}
CVarRef set(litstr key, CVarRef v, bool isString = false) = delete;
CVarRef set(CStrRef key, CVarRef v, bool isString = false);
CVarRef set(CVarRef key, CVarRef v);
@@ -918,18 +916,14 @@ class Variant : private TypedValue {
CVarRef setRef(int key, CVarRef v) { return setRef((int64_t)key, v); }
CVarRef setRef(int64_t key, CVarRef v);
CVarRef setRef(double key, CVarRef v);
CVarRef setRef(litstr key, CVarRef v, bool isString = false) {
return setRef(String(key), v, isString);
}
CVarRef setRef(litstr key, CVarRef v, bool isString = false) = delete;
CVarRef setRef(CStrRef key, CVarRef v, bool isString = false);
CVarRef setRef(CVarRef key, CVarRef v);
CVarRef set(int key, RefResult v) { return setRef(key, variant(v)); }
CVarRef set(int64_t key, RefResult v) { return setRef(key, variant(v)); }
CVarRef set(double key, RefResult v) { return setRef(key, variant(v)); }
CVarRef set(litstr key, RefResult v, bool isString = false) {
return setRef(key, variant(v), isString);
}
CVarRef set(litstr key, RefResult v, bool isString = false) = delete;
CVarRef set(CStrRef key, RefResult v, bool isString = false) {
return setRef(key, variant(v), isString);
}
@@ -941,9 +935,7 @@ class Variant : private TypedValue {
void remove(int key) { removeImpl((int64_t)key);}
void remove(int64_t key) { removeImpl(key);}
void remove(double key) { removeImpl(key);}
void remove(litstr key, bool isString = false) {
remove(String(key), isString);
}
void remove(litstr key, bool isString = false) = delete;
void remove(CStrRef key, bool isString = false) {
removeImpl(key, isString);
}
@@ -1129,7 +1121,7 @@ class Variant : private TypedValue {
CVarRef set(int v);
CVarRef set(int64_t v);
CVarRef set(double v);
CVarRef set(litstr v);
CVarRef set(litstr v) = delete;
CVarRef set(const std::string & v) {
return set(String(v));
}
@@ -1449,8 +1441,8 @@ public:
return asVariant()->isNull();
}
private:
/* implicit */ VarNR(litstr v); // not implemented
/* implicit */ VarNR(const std::string & v); // not implemented
/* implicit */ VarNR(litstr v) = delete;
/* implicit */ VarNR(const std::string & v) = delete;
void init(DataType dt) {
m_type = dt;
+10 -7
Ver Arquivo
@@ -49,6 +49,10 @@ bool f_function_exists(CStrRef function_name, bool autoload /* = true */) {
function_exists(function_name));
}
static const StaticString
s__invoke("__invoke"),
s_Closure__invoke("Closure::__invoke");
bool f_is_callable(CVarRef v, bool syntax /* = false */,
VRefParam name /* = null */) {
bool ret = true;
@@ -107,13 +111,11 @@ bool f_is_callable(CVarRef v, bool syntax /* = false */,
if (Variant::GetAccessorType(tv_func) == KindOfObject) {
ObjectData *d = Variant::GetObjectData(tv_func);
static const StringData* sd__invoke
= StringData::GetStaticString("__invoke");
const Func* invoke = d->getVMClass()->lookupMethod(sd__invoke);
const Func* invoke = d->getVMClass()->lookupMethod(s__invoke.get());
if (name.isReferenced()) {
if (d->instanceof(c_Closure::s_cls)) {
// Hack to stop the mangled name from showing up
name = "Closure::__invoke";
name = s_Closure__invoke;
} else {
name = d->o_getClassName() + "::__invoke";
}
@@ -124,7 +126,8 @@ bool f_is_callable(CVarRef v, bool syntax /* = false */,
return false;
}
Variant f_call_user_func(int _argc, CVarRef function, CArrRef _argv /* = null_array */) {
Variant f_call_user_func(int _argc, CVarRef function,
CArrRef _argv /* = null_array */) {
return vm_call_user_func(function, _argv);
}
@@ -165,9 +168,9 @@ String f_call_user_func_serialized(CStrRef input) {
Variant out;
try {
Variant in = unserialize_from_string(input);
out.set("ret", vm_call_user_func(in[s_func], in[s_args]));
out.set(s_ret, vm_call_user_func(in[s_func], in[s_args]));
} catch (Object &e) {
out.set("exception", e);
out.set(s_exception, e);
}
return f_serialize(out);
}
+1 -1
Ver Arquivo
@@ -260,7 +260,7 @@ bool f_msg_receive(CObjRef queue, int64_t desiredmsgtype, VRefParam msgtype,
return false;
}
} else {
message = (const char *)MSGBUF_MTEXT(buffer);
message = String((const char *)MSGBUF_MTEXT(buffer));
}
return true;
+1 -1
Ver Arquivo
@@ -1670,7 +1670,7 @@ static inline void fetch_value(sp_PDOStatement stmt, Variant &dest, int colno,
dest = dest.toString();
}
if (dest.isNull() && stmt->dbh->oracle_nulls == PDO_NULL_TO_STRING) {
dest = "";
dest = empty_string;
}
}
+6 -2
Ver Arquivo
@@ -842,6 +842,10 @@ Variant f_socket_recv(CObjRef socket, VRefParam buf, int len, int flags) {
return retval;
}
static const StaticString
s_2colons("::"),
s_0_0_0_0("0.0.0.0");
Variant f_socket_recvfrom(CObjRef socket, VRefParam buf, int len, int flags,
VRefParam name, VRefParam port /* = 0 */) {
if (len <= 0) {
@@ -893,7 +897,7 @@ Variant f_socket_recvfrom(CObjRef socket, VRefParam buf, int len, int flags,
name = String(Util::safe_inet_ntoa(sin.sin_addr));
if (name.toString().empty()) {
name = "0.0.0.0";
name = s_0_0_0_0;
}
port = ntohs(sin.sin_port);
}
@@ -922,7 +926,7 @@ Variant f_socket_recvfrom(CObjRef socket, VRefParam buf, int len, int flags,
if (succ) {
name = String(addr6, CopyString);
} else {
name = "::";
name = s_2colons;
}
port = ntohs(sin6.sin6_port);
}
+47 -47
Ver Arquivo
@@ -337,20 +337,20 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt(0) = "v1";
arr.lvalAt(1) = "v2";
arr.lvalAt(0) = String("v1");
arr.lvalAt(1) = String("v2");
VS(arr, CREATE_VECTOR2("v1", "v2"));
}
{
Array arr;
arr.lvalAt(s_n1) = "v1";
arr.lvalAt(s_n2) = "v2";
arr.lvalAt(s_n1) = String("v1");
arr.lvalAt(s_n2) = String("v2");
VS(arr, CREATE_MAP2("n1", "v1", "n2", "v2"));
}
{
Array arr;
Variant name = "name";
arr.lvalAt(name) = "value";
arr.lvalAt(name) = String("value");
VS(arr, CREATE_MAP1("name", "value"));
}
{
@@ -400,8 +400,8 @@ bool TestCppBase::TestArray() {
// membership
{
Array arr;
arr.lvalAt(0) = "v1";
arr.lvalAt(1) = "v2";
arr.lvalAt(0) = String("v1");
arr.lvalAt(1) = String("v2");
VERIFY(arr.exists(0));
arr.remove(0);
VERIFY(!arr.exists(0));
@@ -412,28 +412,28 @@ bool TestCppBase::TestArray() {
{
static const StaticString s_0("0");
Array arr;
arr.lvalAt(0) = "v1";
arr.lvalAt(0) = String("v1");
VERIFY(arr.exists(0));
arr.remove(String(s_0));
VERIFY(!arr.exists(0));
}
{
Array arr;
arr.lvalAt(0) = "v1";
arr.lvalAt(0) = String("v1");
VERIFY(arr.exists(0));
arr.remove(Variant("0"));
VERIFY(!arr.exists(0));
}
{
Array arr;
arr.lvalAt(0) = "v1";
arr.lvalAt(0) = String("v1");
VERIFY(arr.exists(0));
arr.remove(Variant(Variant("0")));
VERIFY(!arr.exists(0));
}
{
Array arr;
arr.lvalAt(0) = "v1";
arr.lvalAt(0) = String("v1");
VERIFY(arr.exists(0));
arr.remove(Variant(Variant(0.5)));
VERIFY(!arr.exists(0));
@@ -447,8 +447,8 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt(s_n1) = "v1";
arr.lvalAt(s_n2) = "v2";
arr.lvalAt(s_n1) = String("v1");
arr.lvalAt(s_n2) = String("v2");
VERIFY(arr.exists(s_n1));
arr.remove(s_n1);
VERIFY(!arr.exists(s_n1));
@@ -458,17 +458,17 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt() = "test";
arr.lvalAt() = String("test");
VS(arr, CREATE_VECTOR1("test"));
}
{
Array arr;
arr.lvalAt(s_name) = "value";
arr.lvalAt(s_name) = String("value");
VERIFY(arr.exists(s_name));
}
{
Array arr;
arr.lvalAt(1) = "value";
arr.lvalAt(1) = String("value");
VERIFY(arr.exists(1));
VERIFY(arr.exists(1.5));
VERIFY(arr.exists(s_1));
@@ -478,7 +478,7 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt(s_1) = "value";
arr.lvalAt(s_1) = String("value");
VERIFY(arr.exists(1));
VERIFY(arr.exists(1.5));
VERIFY(arr.exists(s_1));
@@ -488,7 +488,7 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt(1.5) = "value";
arr.lvalAt(1.5) = String("value");
VERIFY(arr.exists(1));
VERIFY(arr.exists(1.5));
VERIFY(arr.exists(s_1));
@@ -498,7 +498,7 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt(Variant(1.5)) = "value";
arr.lvalAt(Variant(1.5)) = String("value");
VERIFY(arr.exists(1));
VERIFY(arr.exists(1.5));
VERIFY(arr.exists(s_1));
@@ -508,7 +508,7 @@ bool TestCppBase::TestArray() {
}
{
Array arr;
arr.lvalAt(Variant("1")) = "value";
arr.lvalAt(Variant("1")) = String("value");
VERIFY(arr.exists(1));
VERIFY(arr.exists(1.5));
VERIFY(arr.exists(s_1));
@@ -657,19 +657,19 @@ bool TestCppBase::TestVariant() {
}
{
Variant v;
v.lvalAt(0) = "v0";
v.lvalAt(1) = "v1";
v.lvalAt(0) = String("v0");
v.lvalAt(1) = String("v1");
VERIFY(v[0] == "v0");
VERIFY(v[1] == "v1");
}
{
Variant v;
v.lvalAt() = "test";
v.lvalAt() = String("test");
VS(v, CREATE_VECTOR1("test"));
}
{
Variant v;
v.lvalAt(1) = "test";
v.lvalAt(1) = String("test");
VS(v[1], "test");
VS(v[1.5], "test");
VS(v[Variant(1.5)], "test");
@@ -678,7 +678,7 @@ bool TestCppBase::TestVariant() {
}
{
Variant v;
v.lvalAt(Variant(1.5)) = "test";
v.lvalAt(Variant(1.5)) = String("test");
VS(v[1], "test");
VS(v[1.5], "test");
VS(v[Variant(1.5)], "test");
@@ -687,7 +687,7 @@ bool TestCppBase::TestVariant() {
}
{
Variant v;
v.lvalAt(s_1) = "test";
v.lvalAt(s_1) = String("test");
VS(v[1], "test");
VS(v[1.5], "test");
VS(v[Variant(1.5)], "test");
@@ -696,7 +696,7 @@ bool TestCppBase::TestVariant() {
}
{
Variant v;
v.lvalAt(Variant("1")) = "test";
v.lvalAt(Variant("1")) = String("test");
VS(v[1], "test");
VS(v[1.5], "test");
VS(v[Variant(1.5)], "test");
@@ -707,8 +707,8 @@ bool TestCppBase::TestVariant() {
// membership
{
Variant v;
v.lvalAt(s_n0) = "v0";
v.lvalAt(s_n1) = "v1";
v.lvalAt(s_n0) = String("v0");
v.lvalAt(s_n1) = String("v1");
v.remove(s_n1);
VS(v, CREATE_MAP1(s_n0, "v0"));
v.append("v2");
@@ -716,29 +716,29 @@ bool TestCppBase::TestVariant() {
}
{
Variant v;
v.lvalAt(s_n0) = "v0";
v.lvalAt(1) = "v1";
v.lvalAt(s_n0) = String("v0");
v.lvalAt(1) = String("v1");
v.remove(Variant(1.5));
VS(v, CREATE_MAP1("n0", "v0"));
}
{
Variant v;
v.lvalAt(s_n0) = "v0";
v.lvalAt(1) = "v1";
v.lvalAt(s_n0) = String("v0");
v.lvalAt(1) = String("v1");
v.remove(Variant("1"));
VS(v, CREATE_MAP1("n0", "v0"));
}
{
Variant v;
v.lvalAt(s_n0) = "v0";
v.lvalAt(1) = "v1";
v.remove("1");
v.lvalAt(s_n0) = String("v0");
v.lvalAt(1) = String("v1");
v.remove(String("1"));
VS(v, CREATE_MAP1("n0", "v0"));
}
{
Variant v;
v.lvalAt(s_n0) = "v0";
v.lvalAt(empty_string) = "v1";
v.lvalAt(s_n0) = String("v0");
v.lvalAt(empty_string) = String("v1");
v.remove(Variant());
VS(v, CREATE_MAP1("n0", "v0"));
}
@@ -747,13 +747,13 @@ bool TestCppBase::TestVariant() {
{
Variant v1("original");
Variant v2 = v1;
v2 = "changed";
v2 = String("changed");
VERIFY(v1 == "original");
}
{
Variant v1("original");
Variant v2 = strongBind(v1);
v2 = "changed";
v2 = String("changed");
VERIFY(v1 == "changed");
}
{
@@ -972,18 +972,18 @@ bool TestCppBase::TestEqualAsStr() {
var_array[5] = 0.0;
var_array[6] = 1.0;
var_array[7] = 42.2;
var_array[8] = "0";
var_array[9] = "1";
var_array[10] = "42";
var_array[11] = "x";
var_array[8] = String("0");
var_array[9] = String("1");
var_array[10] = String("42");
var_array[11] = String("x");
var_array[12] = Array::Create();
Variant v1("original");
var_array[13] = v1;
Variant v2("changed");
var_array[14] = v2;
var_array[15] = "";
var_array[16] = "Array";
var_array[17] = "ARRAY";
var_array[15] = empty_string;
var_array[16] = String("Array");
var_array[17] = String("ARRAY");
for (int i = 0; i < arr_len; i++) {
for (int j = 0; j < arr_len; j++) {
bool eqAsStr = equalAsStr(var_array[i], var_array[j]);
+1 -1
Ver Arquivo
@@ -158,7 +158,7 @@ bool TestExtApc::test_apc_fetch() {
{
Variant apcdata = f_apc_fetch("apcdata");
Variant c = apcdata; // bump up ref count to make a MapVariant copy
apcdata.set("b", 3); // problem
apcdata.set(String("b"), 3); // problem
VS(apcdata, CREATE_MAP2("a", "test", "b", 3));
}
{
+1 -1
Ver Arquivo
@@ -1115,7 +1115,7 @@ bool TestExtArray::test_array_unshift() {
")\n");
q = CREATE_MAP3(0, "orange", 1, "banana", "a", "dummy");
q.remove("a");
q.remove(String("a"));
f_array_unshift(3, ref(q), "apple", CREATE_VECTOR1("raspberry"));
VS(f_print_r(q, true),
"Array\n"
+3 -3
Ver Arquivo
@@ -80,7 +80,7 @@ bool TestExtSqlite3::test_sqlite3() {
Variant id = "DEF";
VERIFY(stmt->t_bindvalue(":id", id, SQLITE3_TEXT));
id = "ABC";
id = String("ABC");
{
Object objResult = stmt->t_execute();
c_SQLite3Result *res = objResult.getTyped<c_SQLite3Result>();
@@ -89,9 +89,9 @@ bool TestExtSqlite3::test_sqlite3() {
VERIFY(stmt->t_clear());
VERIFY(stmt->t_reset());
id = "DEF";
id = String("DEF");
VERIFY(stmt->t_bindparam(":id", ref(id), SQLITE3_TEXT));
id = "ABC";
id = String("ABC");
{
Object objResult = stmt->t_execute();
c_SQLite3Result *res = objResult.getTyped<c_SQLite3Result>();
+2 -2
Ver Arquivo
@@ -74,9 +74,9 @@ bool TestExtXml::test_xml_parse_into_struct() {
Variant vals, index;
f_xml_parse_into_struct(p, simple, ref(vals), ref(index));
f_xml_parser_free(p);
VS(f_print_r(index.rvalAt("PARA"),1),
VS(f_print_r(index.rvalAt(String("PARA")),1),
"Array\n(\n [0] => 0\n [1] => 2\n)\n");
VS(f_print_r(index.rvalAt("NOTE"),1),
VS(f_print_r(index.rvalAt(String("NOTE")),1),
"Array\n(\n [0] => 1\n)\n");
VS(f_print_r(vals.rvalAt(0),1),
"Array\n(\n [tag] => PARA\n [type] => open\n [level] => 1\n)\n");