Get rid of ext_hhvm_noinline.cpp, part 2
unserialize() and call_user_func_array() were straightforward. They were called from all over the runtime, but I renamed those implementations and codemodded the runtime. The is_* functions were only ever being called by the CVarRef signature, so I deleted all the other ones (same for f_gettype). Only some of the is_* functions were being called from the runtime, so I made inline versions of those without the f_ prefix.
Esse commit está contido em:
@@ -5976,7 +5976,7 @@ void EmitterVisitor::emitFuncCall(Emitter& e, FunctionCallPtr node) {
|
||||
emitBuiltinCallArg(e, (*params)[i], i, byRef);
|
||||
}
|
||||
for (; i < func->getMaxParamCount(); i++) {
|
||||
Variant v = f_unserialize(func->getParamDefault(i));
|
||||
Variant v = unserialize_from_string(func->getParamDefault(i));
|
||||
TypePtr t = func->getParamType(i);
|
||||
emitBuiltinDefaultArg(e, v, t->getDataType(), i);
|
||||
}
|
||||
|
||||
@@ -423,9 +423,8 @@ int64_t ScalarExpression::getHash() const {
|
||||
|
||||
Variant ScalarExpression::getVariant() const {
|
||||
if (!m_serializedValue.empty()) {
|
||||
Variant ret = f_unserialize
|
||||
(String(m_serializedValue.data(),
|
||||
m_serializedValue.size(), AttachLiteral));
|
||||
Variant ret = unserialize_from_buffer(
|
||||
m_serializedValue.data(), m_serializedValue.size());
|
||||
if (ret.isDouble()) {
|
||||
return m_dval;
|
||||
}
|
||||
|
||||
@@ -808,8 +808,7 @@ void ArrayUtil::InitScalarArrays(Array arrs[], int nArrs,
|
||||
if (uncompressed == nullptr) {
|
||||
throw Exception("Bad scalarArrayData %p", scalarArrayData);
|
||||
}
|
||||
String s = String(uncompressed, len, AttachString);
|
||||
Variant v(f_unserialize(s));
|
||||
Variant v(unserialize_from_buffer(uncompressed, len));
|
||||
assert(v.isArray());
|
||||
Array scalarArrays = v;
|
||||
assert(scalarArrays.size() == nArrs);
|
||||
|
||||
@@ -241,7 +241,7 @@ struct ElmUCompare {
|
||||
const Variant* callback;
|
||||
bool operator()(ElmT left, ElmT right) const {
|
||||
Variant ret =
|
||||
f_call_user_func_array(
|
||||
vm_call_user_func(
|
||||
*callback,
|
||||
CREATE_VECTOR2(acc.getValue(left), acc.getValue(right))
|
||||
);
|
||||
@@ -270,7 +270,7 @@ struct ElmUCompare {
|
||||
return false;
|
||||
}
|
||||
Variant ret2 =
|
||||
f_call_user_func_array(
|
||||
vm_call_user_func(
|
||||
*callback,
|
||||
CREATE_VECTOR2(acc.getValue(right), acc.getValue(left))
|
||||
);
|
||||
|
||||
@@ -344,7 +344,7 @@ vm_decode_function(CVarRef function,
|
||||
this_ = function.asCObjRef().get();
|
||||
cls = nullptr;
|
||||
const HPHP::VM::Func *f = this_->getVMClass()->lookupMethod(invokeStr);
|
||||
if (f != nullptr &&
|
||||
if (f != nullptr &&
|
||||
((f->attrs() & HPHP::VM::AttrStatic) && !f->isClosureBody())) {
|
||||
// If __invoke is static, invoke it as such
|
||||
cls = this_->getVMClass();
|
||||
@@ -375,11 +375,6 @@ Variant vm_call_user_func(CVarRef function, CArrRef params,
|
||||
return ret;
|
||||
}
|
||||
|
||||
Variant f_call_user_func_array(CVarRef function, CArrRef params,
|
||||
bool bound /* = false */) {
|
||||
return vm_call_user_func(function, params, bound);
|
||||
}
|
||||
|
||||
Variant invoke(CStrRef function, CArrRef params, strhash_t hash /* = -1 */,
|
||||
bool tryInterp /* = true */, bool fatal /* = true */) {
|
||||
VM::Func* func = VM::Unit::loadFunc(function.get());
|
||||
@@ -1355,7 +1350,7 @@ AutoloadHandler::Result AutoloadHandler::loadFromMap(CStrRef name,
|
||||
// - true means the map was updated. try again
|
||||
// - false means we should stop applying autoloaders (only affects classes)
|
||||
// - anything else means keep going
|
||||
Variant action = f_call_user_func_array(func, CREATE_VECTOR2(kind, name));
|
||||
Variant action = vm_call_user_func(func, CREATE_VECTOR2(kind, name));
|
||||
tva = action.getTypedAccessor();
|
||||
if (Variant::GetAccessorType(tva) == KindOfBoolean) {
|
||||
if (Variant::GetBoolean(tva)) continue;
|
||||
@@ -1410,7 +1405,7 @@ bool AutoloadHandler::invokeHandler(CStrRef className,
|
||||
Object autoloadException;
|
||||
for (ArrayIter iter(m_handlers); iter; ++iter) {
|
||||
try {
|
||||
f_call_user_func_array(iter.second(), params);
|
||||
vm_call_user_func(iter.second(), params);
|
||||
} catch (Object& ex) {
|
||||
assert(ex.instanceof(SystemLib::s_ExceptionClass));
|
||||
if (autoloadException.isNull()) {
|
||||
|
||||
@@ -293,6 +293,20 @@ inline Array setNull(Array &v) { v.reset(); return Array();}
|
||||
inline String setNull(String &v) { v.reset(); return String();}
|
||||
inline Variant unset(Object &v) { v.reset(); return uninit_null();}
|
||||
inline Variant unset(Array &v) { v.reset(); return uninit_null();}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// type testing
|
||||
|
||||
inline bool is_null(CVarRef v) { return v.isNull();}
|
||||
inline bool is_bool(CVarRef v) { return v.is(KindOfBoolean);}
|
||||
inline bool is_int(CVarRef v) { return v.isInteger();}
|
||||
inline bool is_double(CVarRef v) { return v.is(KindOfDouble);}
|
||||
inline bool is_string(CVarRef v) { return v.isString();}
|
||||
inline bool is_array(CVarRef v) { return v.is(KindOfArray);}
|
||||
inline bool is_object(CVarRef var) {
|
||||
return var.is(KindOfObject) && !var.isResource();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// special variable contexts
|
||||
|
||||
@@ -349,9 +363,6 @@ bool array_is_valid_callback(CArrRef arr);
|
||||
bool class_exists(CStrRef class_name, bool autoload = true);
|
||||
String get_static_class_name(CVarRef objOrClassName);
|
||||
|
||||
Variant f_call_user_func_array(CVarRef function, CArrRef params,
|
||||
bool bound = false);
|
||||
|
||||
const HPHP::VM::Func*
|
||||
vm_decode_function(CVarRef function,
|
||||
HPHP::VM::ActRec* ar,
|
||||
@@ -488,7 +499,7 @@ inline Variant unserialize_from_buffer(const char* str, int len) {
|
||||
return unserialize_ex(str, len, VariableUnserializer::Serialize);
|
||||
}
|
||||
|
||||
inline Variant f_unserialize(CStrRef str) {
|
||||
inline Variant unserialize_from_string(CStrRef str) {
|
||||
return unserialize_from_buffer(str.data(), str.size());
|
||||
}
|
||||
|
||||
|
||||
@@ -327,7 +327,7 @@ bool BaseExecutionContext::obFlush() {
|
||||
} else {
|
||||
try {
|
||||
Variant tout =
|
||||
f_call_user_func_array(last->handler,
|
||||
vm_call_user_func(last->handler,
|
||||
CREATE_VECTOR2(last->oss.detach(), flag));
|
||||
prev->oss.append(tout.toString());
|
||||
last->oss.reset();
|
||||
@@ -341,7 +341,7 @@ bool BaseExecutionContext::obFlush() {
|
||||
if (!last->handler.isNull()) {
|
||||
try {
|
||||
Variant tout =
|
||||
f_call_user_func_array(last->handler,
|
||||
vm_call_user_func(last->handler,
|
||||
CREATE_VECTOR2(last->oss.detach(), flag));
|
||||
String sout = tout.toString();
|
||||
writeStdout(sout.data(), sout.size());
|
||||
@@ -528,7 +528,7 @@ void BaseExecutionContext::onRequestShutdown() {
|
||||
void BaseExecutionContext::executeFunctions(CArrRef funcs) {
|
||||
for (ArrayIter iter(funcs); iter; ++iter) {
|
||||
Array callback = iter.second();
|
||||
f_call_user_func_array(callback["name"], callback["args"]);
|
||||
vm_call_user_func(callback["name"], callback["args"]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -688,7 +688,7 @@ bool BaseExecutionContext::callUserErrorHandler(const Exception &e, int errnum,
|
||||
}
|
||||
try {
|
||||
ErrorStateHelper esh(this, ExecutingUserHandler);
|
||||
if (!same(f_call_user_func_array
|
||||
if (!same(vm_call_user_func
|
||||
(m_userErrorHandlers.back().first,
|
||||
CREATE_VECTOR6(errnum, String(e.getMessage()), errfile,
|
||||
errline, "", backtrace)),
|
||||
@@ -746,7 +746,7 @@ bool BaseExecutionContext::onUnhandledException(Object e) {
|
||||
if (e.instanceof(SystemLib::s_ExceptionClass)) {
|
||||
// user thrown exception
|
||||
if (!m_userExceptionHandlers.empty()) {
|
||||
if (!same(f_call_user_func_array
|
||||
if (!same(vm_call_user_func
|
||||
(m_userExceptionHandlers.back(),
|
||||
CREATE_VECTOR1(e)),
|
||||
false)) {
|
||||
|
||||
@@ -731,7 +731,7 @@ static String preg_do_repl_func(CVarRef function, CStrRef subject,
|
||||
|
||||
Array args;
|
||||
args.set(0, subpats);
|
||||
return f_call_user_func_array(function, args);
|
||||
return vm_call_user_func(function, args);
|
||||
}
|
||||
|
||||
static bool preg_get_backref(const char **str, int *backref) {
|
||||
@@ -946,7 +946,7 @@ static String php_pcre_replace(CStrRef pattern, CStrRef subject,
|
||||
}
|
||||
*walkbuf = '\0';
|
||||
if (eval) {
|
||||
eval_result = f_call_user_func_array(eval_fn, params);
|
||||
eval_result = vm_call_user_func(eval_fn, params);
|
||||
memcpy(result + result_len, eval_result.data(), eval_result.size());
|
||||
result_len += eval_result.size();
|
||||
} else {
|
||||
|
||||
@@ -287,7 +287,7 @@ static void handle_exception_helper(bool& ret,
|
||||
f_is_callable(context->getExitCallback())) {
|
||||
Array stack = e.getBackTrace();
|
||||
Array argv = CREATE_VECTOR2(e.ExitCode, stack);
|
||||
f_call_user_func_array(context->getExitCallback(), argv);
|
||||
vm_call_user_func(context->getExitCallback(), argv);
|
||||
}
|
||||
} catch (const PhpFileDoesNotExistException &e) {
|
||||
ret = false;
|
||||
|
||||
@@ -161,7 +161,7 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
|
||||
|
||||
bool ret = transport->getFiles(files);
|
||||
if (ret) {
|
||||
g->GV(_FILES) = f_unserialize(files);
|
||||
g->GV(_FILES) = unserialize_from_string(files);
|
||||
}
|
||||
}
|
||||
CopyParams(request, g->GV(_POST));
|
||||
|
||||
@@ -742,7 +742,7 @@ void Transport::sendRawLocked(void *data, int size, int code /* = 200 */,
|
||||
// flush() triggers php's recursion guard
|
||||
// the recursion guard calls back into m_headerCallback
|
||||
m_headerCallbackDone = true;
|
||||
f_call_user_func_array(m_headerCallback, null_array);
|
||||
vm_call_user_func(m_headerCallback, null_array);
|
||||
}
|
||||
|
||||
// compression handling
|
||||
|
||||
@@ -264,7 +264,7 @@ bool XboxServer::SendMessage(CStrRef message, Variant &ret, int timeout_ms,
|
||||
if (code > 0) {
|
||||
ret.set("code", code);
|
||||
if (code == 200) {
|
||||
ret.set("response", f_unserialize(response));
|
||||
ret.set("response", unserialize_from_string(response));
|
||||
} else {
|
||||
ret.set("error", response);
|
||||
}
|
||||
@@ -296,7 +296,7 @@ bool XboxServer::SendMessage(CStrRef message, Variant &ret, int timeout_ms,
|
||||
String sresponse(response, len, AttachString);
|
||||
ret.set("code", code);
|
||||
if (code == 200) {
|
||||
ret.set("response", f_unserialize(sresponse));
|
||||
ret.set("response", unserialize_from_string(sresponse));
|
||||
} else {
|
||||
ret.set("error", sresponse);
|
||||
}
|
||||
@@ -341,7 +341,7 @@ bool XboxServer::PostMessage(CStrRef message,
|
||||
int len = 0;
|
||||
char *response = http->recv(len);
|
||||
String sresponse(response, len, AttachString);
|
||||
if (code == 200 && same(f_unserialize(sresponse), true)) {
|
||||
if (code == 200 && same(unserialize_from_string(sresponse), true)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -424,7 +424,7 @@ int XboxServer::TaskResult(CObjRef task, int timeout_ms, Variant &ret) {
|
||||
int code = 0;
|
||||
String response = ptask->getJob()->getResults(code, timeout_ms);
|
||||
if (code == 200) {
|
||||
ret = f_unserialize(response);
|
||||
ret = unserialize_from_string(response);
|
||||
} else {
|
||||
ret = response;
|
||||
}
|
||||
|
||||
@@ -3298,7 +3298,7 @@ Variant Variant::share(bool save) const {
|
||||
obj->o_set(s_s, f_serialize(*this));
|
||||
return obj;
|
||||
} else {
|
||||
return f_unserialize(m_data.pobj->o_get(s_s));
|
||||
return unserialize_from_string(m_data.pobj->o_get(s_s));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -83,7 +83,7 @@ void AsioSession::setOnFailedCallback(ObjectData* on_failed_callback) {
|
||||
void AsioSession::onFailed(CObjRef exception) {
|
||||
if (m_onFailedCallback) {
|
||||
try {
|
||||
f_call_user_func_array(m_onFailedCallback, Array::Create(exception));
|
||||
vm_call_user_func(m_onFailedCallback, Array::Create(exception));
|
||||
} catch (Object callback_exception) {
|
||||
raise_warning("[asio] Ignoring exception thrown by onFailed callback");
|
||||
}
|
||||
@@ -105,7 +105,7 @@ void AsioSession::setOnStartedCallback(ObjectData* on_started_callback) {
|
||||
void AsioSession::onStarted(CObjRef wait_handle) {
|
||||
assert(m_onStartedCallback);
|
||||
try {
|
||||
f_call_user_func_array(m_onStartedCallback, Array::Create(wait_handle));
|
||||
vm_call_user_func(m_onStartedCallback, Array::Create(wait_handle));
|
||||
} catch (Object callback_exception) {
|
||||
raise_warning("[asio] Ignoring exception thrown by onStarted callback");
|
||||
}
|
||||
|
||||
@@ -480,7 +480,7 @@ void const_load_impl(struct cache_info *info,
|
||||
}
|
||||
}
|
||||
}
|
||||
// f_unserialize object is extreamly slow here;
|
||||
// unserialize_from_string object is extremely slow here;
|
||||
// currently turned off: no objects in haste_maps.
|
||||
if (false) {
|
||||
int count = count_items(objects, 4);
|
||||
@@ -489,7 +489,7 @@ void const_load_impl(struct cache_info *info,
|
||||
for (int i = 0; i < count; i++, p += 4) {
|
||||
String key(*p, (int)(int64_t)*(p+1), CopyString);
|
||||
String value(*(p+2), (int)(int64_t)*(p+3), AttachLiteral);
|
||||
const_load_set(key, f_unserialize(value));
|
||||
const_load_set(key, unserialize_from_string(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,9 +517,9 @@ void const_load_impl(struct cache_info *info,
|
||||
for (int i = 0; i < count; i++, p += 4) {
|
||||
String key(*p, (int)(int64_t)*(p+1), CopyString);
|
||||
String value(*(p+2), (int)(int64_t)*(p+3), AttachLiteral);
|
||||
Variant v = f_unserialize(value);
|
||||
Variant v = unserialize_from_string(value);
|
||||
if (same(v, false)) {
|
||||
throw Exception("bad apc archive, f_unserialize failed");
|
||||
throw Exception("bad apc archive, unserialize_from_string failed");
|
||||
}
|
||||
const_load_set(key, v);
|
||||
}
|
||||
@@ -636,11 +636,11 @@ void apc_load_impl(struct cache_info *info,
|
||||
item.len = (int)(int64_t)*(p+1);
|
||||
|
||||
String value(*(p+2), (int)(int64_t)*(p+3), AttachLiteral);
|
||||
Variant v = f_unserialize(value);
|
||||
Variant v = unserialize_from_string(value);
|
||||
if (same(v, false)) {
|
||||
// we can't possibly get here if it was a boolean "false" that's
|
||||
// supposed to be serialized as a char
|
||||
throw Exception("bad apc archive, f_unserialize failed");
|
||||
throw Exception("bad apc archive, unserialize_from_string failed");
|
||||
}
|
||||
s.constructPrime(v, item);
|
||||
}
|
||||
@@ -723,7 +723,7 @@ void const_load_impl_compressed
|
||||
assert((p - decoded) == len);
|
||||
}
|
||||
}
|
||||
// f_unserialize object is extreamly slow here;
|
||||
// unserialize_from_string object is extremely slow here;
|
||||
// currently turned off: no objects in haste_maps.
|
||||
if (false) {
|
||||
int count = object_lens[0] / 2;
|
||||
@@ -737,7 +737,7 @@ void const_load_impl_compressed
|
||||
String key(p, object_lens[i + i + 2], CopyString);
|
||||
p += object_lens[i + i + 2] + 1;
|
||||
String value(p, object_lens[i + i + 3], AttachLiteral);
|
||||
const_load_set(key, f_unserialize(value));
|
||||
const_load_set(key, unserialize_from_string(value));
|
||||
p += object_lens[i + i + 3] + 1;
|
||||
}
|
||||
assert((p - decoded) == len);
|
||||
@@ -778,9 +778,9 @@ void const_load_impl_compressed
|
||||
String key(p, other_lens[i + i + 2], CopyString);
|
||||
p += other_lens[i + i + 2] + 1;
|
||||
String value(p, other_lens[i + i + 3], AttachLiteral);
|
||||
Variant v = f_unserialize(value);
|
||||
Variant v = unserialize_from_string(value);
|
||||
if (same(v, false)) {
|
||||
throw Exception("bad apc archive, f_unserialize failed");
|
||||
throw Exception("bad apc archive, unserialize_from_string failed");
|
||||
}
|
||||
const_load_set(key, v);
|
||||
p += other_lens[i + i + 3] + 1;
|
||||
@@ -939,11 +939,11 @@ void apc_load_impl_compressed
|
||||
item.len = other_lens[i + i + 2];
|
||||
p += other_lens[i + i + 2] + 1; // skip \0
|
||||
String value(p, other_lens[i + i + 3], AttachLiteral);
|
||||
Variant v = f_unserialize(value);
|
||||
Variant v = unserialize_from_string(value);
|
||||
if (same(v, false)) {
|
||||
// we can't possibly get here if it was a boolean "false" that's
|
||||
// supposed to be serialized as a char
|
||||
throw Exception("bad apc archive, f_unserialize failed");
|
||||
throw Exception("bad apc archive, unserialize_from_string failed");
|
||||
}
|
||||
s.constructPrime(v, item);
|
||||
p += other_lens[i + i + 3] + 1; // skip \0
|
||||
|
||||
@@ -780,7 +780,7 @@ Variant f_range(CVarRef low, CVarRef high, CVarRef step /* = 1 */) {
|
||||
|
||||
static int cmp_func(CVarRef v1, CVarRef v2, const void *data) {
|
||||
Variant *callback = (Variant *)data;
|
||||
return f_call_user_func_array(*callback, CREATE_VECTOR2(v1, v2));
|
||||
return vm_call_user_func(*callback, CREATE_VECTOR2(v1, v2));
|
||||
}
|
||||
|
||||
#define COMMA ,
|
||||
|
||||
@@ -594,7 +594,7 @@ public:
|
||||
Variant do_callback(CVarRef cb, CArrRef args) {
|
||||
assert(!m_exception);
|
||||
try {
|
||||
return f_call_user_func_array(cb, args);
|
||||
return vm_call_user_func(cb, args);
|
||||
} catch (Object &e) {
|
||||
ObjectData *od = e.get();
|
||||
od->incRefCount();
|
||||
|
||||
@@ -5135,7 +5135,7 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt,
|
||||
valuePush(ctxt, xmlXPathNewString((xmlChar *)""));
|
||||
raise_warning("Not allowed to call handler '%s()'.", handler.data());
|
||||
} else {
|
||||
Variant retval = f_call_user_func_array(handler, args);
|
||||
Variant retval = vm_call_user_func(handler, args);
|
||||
if (retval.instanceof(c_DOMNode::s_cls)) {
|
||||
if (intern->m_node_list.empty()) {
|
||||
intern->m_node_list = Array::Create();
|
||||
|
||||
@@ -1408,9 +1408,9 @@ Variant f_fb_stubout_intercept_handler(CStrRef name, CVarRef obj,
|
||||
CArrRef params, CVarRef data,
|
||||
VRefParam done) {
|
||||
if (obj.isNull()) {
|
||||
return f_call_user_func_array(data, params);
|
||||
return vm_call_user_func(data, params);
|
||||
}
|
||||
return f_call_user_func_array(CREATE_VECTOR2(obj, data), params);
|
||||
return vm_call_user_func(CREATE_VECTOR2(obj, data), params);
|
||||
}
|
||||
|
||||
Variant f_fb_rpc_intercept_handler(CStrRef name, CVarRef obj, CArrRef params,
|
||||
@@ -1507,14 +1507,14 @@ Variant f_fb_call_user_func_safe_return(int _argc, CVarRef function,
|
||||
CVarRef def,
|
||||
CArrRef _argv /* = null_array */) {
|
||||
if (f_is_callable(function)) {
|
||||
return f_call_user_func_array(function, _argv);
|
||||
return vm_call_user_func(function, _argv);
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
Array f_fb_call_user_func_array_safe(CVarRef function, CArrRef params) {
|
||||
if (f_is_callable(function)) {
|
||||
return CREATE_VECTOR2(true, f_call_user_func_array(function, params));
|
||||
return CREATE_VECTOR2(true, vm_call_user_func(function, params));
|
||||
}
|
||||
return CREATE_VECTOR2(false, uninit_null());
|
||||
}
|
||||
|
||||
@@ -125,7 +125,11 @@ bool f_is_callable(CVarRef v, bool syntax /* = false */,
|
||||
}
|
||||
|
||||
Variant f_call_user_func(int _argc, CVarRef function, CArrRef _argv /* = null_array */) {
|
||||
return f_call_user_func_array(function, _argv);
|
||||
return vm_call_user_func(function, _argv);
|
||||
}
|
||||
|
||||
Variant f_call_user_func_array(CVarRef function, CArrRef params) {
|
||||
return vm_call_user_func(function, params);
|
||||
}
|
||||
|
||||
Object f_call_user_func_array_async(CVarRef function, CArrRef params) {
|
||||
@@ -154,8 +158,8 @@ Variant f_end_user_func_async(CObjRef handle,
|
||||
String f_call_user_func_serialized(CStrRef input) {
|
||||
Variant out;
|
||||
try {
|
||||
Variant in = f_unserialize(input);
|
||||
out.set("ret", f_call_user_func_array(in["func"], in["args"]));
|
||||
Variant in = unserialize_from_string(input);
|
||||
out.set("ret", vm_call_user_func(in["func"], in["args"]));
|
||||
} catch (Object &e) {
|
||||
out.set("exception", e);
|
||||
}
|
||||
@@ -215,7 +219,7 @@ Variant f_call_user_func_rpc(int _argc, CStrRef host, int port, CStrRef auth,
|
||||
|
||||
// This double decoding can be avoided by modifying RPC server to directly
|
||||
// take PHP serialization format.
|
||||
Variant res = f_unserialize(f_json_decode(sresponse));
|
||||
Variant res = unserialize_from_string(f_json_decode(sresponse));
|
||||
if (!res.isArray()) {
|
||||
raise_error("Internal protocol error");
|
||||
return false;
|
||||
@@ -232,9 +236,9 @@ Variant f_forward_static_call_array(CVarRef function, CArrRef params) {
|
||||
}
|
||||
|
||||
Variant f_forward_static_call(int _argc, CVarRef function, CArrRef _argv /* = null_array */) {
|
||||
// Setting the bound parameter to true tells f_call_user_func_array()
|
||||
// Setting the bound parameter to true tells vm_call_user_func()
|
||||
// propogate the current late bound class
|
||||
return f_call_user_func_array(function, _argv, true);
|
||||
return vm_call_user_func(function, _argv, true);
|
||||
}
|
||||
|
||||
Variant f_get_called_class() {
|
||||
|
||||
@@ -171,6 +171,57 @@ TypedValue* fg_is_callable(HPHP::VM::ActRec *ar) {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::f_call_user_func_array(HPHP::Variant const&, HPHP::Array const&)
|
||||
_ZN4HPHP22f_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
function => rsi
|
||||
params => rdx
|
||||
*/
|
||||
|
||||
TypedValue* fh_call_user_func_array(TypedValue* _rv, TypedValue* function, Value* params) asm("_ZN4HPHP22f_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE");
|
||||
|
||||
TypedValue * fg1_call_user_func_array(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) __attribute__((noinline,cold));
|
||||
TypedValue * fg1_call_user_func_array(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) {
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
tvCastToArrayInPlace(args-1);
|
||||
fh_call_user_func_array((rv), (args-0), &args[-1].m_data);
|
||||
if (rv->m_type == KindOfUninit) rv->m_type = KindOfNull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
TypedValue* fg_call_user_func_array(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 2LL) {
|
||||
if ((args-1)->m_type == KindOfArray) {
|
||||
fh_call_user_func_array((&(rv)), (args-0), &args[-1].m_data);
|
||||
if (rv.m_type == KindOfUninit) rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 2);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
fg1_call_user_func_array(&rv, ar, count);
|
||||
frame_free_locals_no_this_inl(ar, 2);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
}
|
||||
} else {
|
||||
throw_wrong_arguments_nr("call_user_func_array", count, 2, 2, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 2);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::f_call_user_func(int, HPHP::Variant const&, HPHP::Array const&)
|
||||
_ZN4HPHP16f_call_user_funcEiRKNS_7VariantERKNS_5ArrayE
|
||||
|
||||
@@ -49,6 +49,18 @@ name => rdx
|
||||
|
||||
bool fh_is_callable(TypedValue* v, bool syntax, TypedValue* name) asm("_ZN4HPHP13f_is_callableERKNS_7VariantEbRKNS_14VRefParamValueE");
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::f_call_user_func_array(HPHP::Variant const&, HPHP::Array const&)
|
||||
_ZN4HPHP22f_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
function => rsi
|
||||
params => rdx
|
||||
*/
|
||||
|
||||
TypedValue* fh_call_user_func_array(TypedValue* _rv, TypedValue* function, Value* params) asm("_ZN4HPHP22f_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE");
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::f_call_user_func(int, HPHP::Variant const&, HPHP::Array const&)
|
||||
_ZN4HPHP16f_call_user_funcEiRKNS_7VariantERKNS_5ArrayE
|
||||
|
||||
@@ -28,6 +28,7 @@ bool f_function_exists(CStrRef function_name, bool autoload = true);
|
||||
bool f_is_callable(CVarRef v, bool syntax = false,
|
||||
VRefParam name = uninit_null());
|
||||
Variant f_call_user_func(int _argc, CVarRef function, CArrRef _argv = null_array);
|
||||
Variant f_call_user_func_array(CVarRef function, CArrRef params);
|
||||
Object f_call_user_func_array_async(CVarRef function, CArrRef params);
|
||||
Object f_call_user_func_async(int _argc, CVarRef function, CArrRef _argv = null_array);
|
||||
Variant f_check_user_func_async(CVarRef handles, int timeout = -1);
|
||||
|
||||
@@ -688,7 +688,7 @@ Variant f_shm_get_var(int64_t shm_identifier, int64_t variable_key) {
|
||||
|
||||
sysvshm_chunk *shm_var =
|
||||
(sysvshm_chunk*)((char *)shm_list_ptr->ptr + shm_varpos);
|
||||
return f_unserialize(String(&shm_var->mem, shm_var->length, AttachLiteral));
|
||||
return unserialize_from_buffer(&shm_var->mem, shm_var->length);
|
||||
}
|
||||
|
||||
bool f_shm_has_var(int64_t shm_identifier, int64_t variable_key) {
|
||||
|
||||
@@ -482,7 +482,7 @@ static int _ldap_rebind_proc(LDAP *ldap, const char *url, ber_tag_t req,
|
||||
}
|
||||
|
||||
/* callback */
|
||||
Variant ret = f_call_user_func_array
|
||||
Variant ret = vm_call_user_func
|
||||
(ld->rebindproc, CREATE_VECTOR2(Object(ld), String(url, CopyString)));
|
||||
return ret.toInt64();
|
||||
}
|
||||
|
||||
@@ -152,8 +152,7 @@ Variant static memcache_fetch_from_storage(const char *payload,
|
||||
}
|
||||
|
||||
if (flags & MMC_SERIALIZED) {
|
||||
ret = f_unserialize(String(payload, payload_len, AttachLiteral));
|
||||
// raise_notice("unable to unserialize data");
|
||||
ret = unserialize_from_buffer(payload, payload_len);
|
||||
} else {
|
||||
ret = String(payload, payload_len, CopyString);
|
||||
}
|
||||
|
||||
@@ -315,7 +315,7 @@ bool c_Memcached::t_getdelayedbykey(CStrRef server_key, CArrRef keys,
|
||||
|
||||
MemcachedResultWrapper result(&m_impl->memcached); Array item;
|
||||
while (fetchImpl(result.value, item)) {
|
||||
f_call_user_func_array(value_cb, CREATE_VECTOR2(Variant(this), item));
|
||||
vm_call_user_func(value_cb, CREATE_VECTOR2(Variant(this), item));
|
||||
}
|
||||
|
||||
if (m_impl->rescode != q_Memcached$$RES_END) return false;
|
||||
@@ -948,7 +948,7 @@ bool c_Memcached::toObject(Variant& value, const memcached_result_st &result) {
|
||||
value = f_json_decode(decompPayload);
|
||||
break;
|
||||
case MEMC_VAL_IS_SERIALIZED:
|
||||
value = f_unserialize(decompPayload);
|
||||
value = unserialize_from_string(decompPayload);
|
||||
break;
|
||||
case MEMC_VAL_IS_IGBINARY:
|
||||
raise_warning("could not unserialize value, no igbinary support");
|
||||
@@ -965,7 +965,7 @@ memcached_return c_Memcached::doCacheCallback(CVarRef callback, CStrRef key,
|
||||
Array params(ArrayInit(3).set(Variant(this))
|
||||
.set(key)
|
||||
.setRef(value).create());
|
||||
if (!f_call_user_func_array(callback, params)) {
|
||||
if (!vm_call_user_func(callback, params)) {
|
||||
return MEMCACHED_NOTFOUND;
|
||||
}
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ static bool do_fetch(sp_PDOStatement stmt, bool do_bind, Variant &ret,
|
||||
ret.toObject()->o_set(name, val);
|
||||
} else {
|
||||
#ifdef MBO_0
|
||||
ret = f_unserialize(val);
|
||||
ret = unserialize_from_string(val);
|
||||
if (same(ret, false)) {
|
||||
pdo_raise_impl_error(stmt->dbh, stmt, "HY000",
|
||||
"cannot unserialize data");
|
||||
@@ -1977,7 +1977,7 @@ static bool do_fetch(sp_PDOStatement stmt, bool do_bind, Variant &ret,
|
||||
break;
|
||||
|
||||
case PDO_FETCH_FUNC:
|
||||
ret = f_call_user_func_array(stmt->fetch.func, stmt->fetch.values);
|
||||
ret = vm_call_user_func(stmt->fetch.func, stmt->fetch.values);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -305,7 +305,7 @@ bool f_pcntl_signal_dispatch() {
|
||||
if (signaled[i]) {
|
||||
signaled[i] = 0;
|
||||
if (s_signal_handlers->handlers.exists(i)) {
|
||||
f_call_user_func_array(s_signal_handlers->handlers[i],
|
||||
vm_call_user_func(s_signal_handlers->handlers[i],
|
||||
CREATE_VECTOR1(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ static void set_function_info(Array &ret, const ClassInfo::MethodInfo *info,
|
||||
}
|
||||
param.set(s_default, v);
|
||||
} else {
|
||||
param.set(s_default, f_unserialize(p->value));
|
||||
param.set(s_default, unserialize_from_string(p->value));
|
||||
}
|
||||
param.set(s_defaultText, defText);
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ int64_t f_xbox_task_result(CObjRef task, int64_t timeout_ms, VRefParam ret) {
|
||||
}
|
||||
|
||||
Variant f_xbox_process_call_message(CStrRef msg) {
|
||||
Variant v = f_unserialize(msg);
|
||||
Variant v = unserialize_from_string(msg);
|
||||
if (!v.isArray()) {
|
||||
raise_error("Error decoding xbox call message");
|
||||
}
|
||||
@@ -203,7 +203,7 @@ Variant f_xbox_process_call_message(CStrRef msg) {
|
||||
if (!args.isArray()) {
|
||||
raise_error("Error decoding xbox call message");
|
||||
}
|
||||
return f_call_user_func_array(fn, args.toArray());
|
||||
return vm_call_user_func(fn, args.toArray());
|
||||
}
|
||||
|
||||
int64_t f_xbox_get_thread_timeout() {
|
||||
|
||||
@@ -709,20 +709,20 @@ public:
|
||||
UserSessionModule() : SessionModule("user") {}
|
||||
|
||||
virtual bool open(const char *save_path, const char *session_name) {
|
||||
return f_call_user_func_array
|
||||
return vm_call_user_func
|
||||
(String(PS(ps_open)),
|
||||
CREATE_VECTOR2(String(save_path, CopyString),
|
||||
String(session_name, CopyString)));
|
||||
}
|
||||
|
||||
virtual bool close() {
|
||||
return f_call_user_func_array
|
||||
return vm_call_user_func
|
||||
(String(PS(ps_close)),
|
||||
Array::Create());
|
||||
}
|
||||
|
||||
virtual bool read(const char *key, String &value) {
|
||||
Variant ret = f_call_user_func_array
|
||||
Variant ret = vm_call_user_func
|
||||
(String(PS(ps_read)),
|
||||
CREATE_VECTOR1(String(key, CopyString)));
|
||||
if (ret.isString()) {
|
||||
@@ -733,19 +733,19 @@ public:
|
||||
}
|
||||
|
||||
virtual bool write(const char *key, CStrRef value) {
|
||||
return f_call_user_func_array
|
||||
return vm_call_user_func
|
||||
(String(PS(ps_write)),
|
||||
CREATE_VECTOR2(String(key, CopyString), value));
|
||||
}
|
||||
|
||||
virtual bool destroy(const char *key) {
|
||||
return f_call_user_func_array
|
||||
return vm_call_user_func
|
||||
(String(PS(ps_destroy)),
|
||||
CREATE_VECTOR1(String(key, CopyString)));
|
||||
}
|
||||
|
||||
virtual bool gc(int maxlifetime, int *nrdels) {
|
||||
return f_call_user_func_array
|
||||
return vm_call_user_func
|
||||
(String(PS(ps_gc)),
|
||||
CREATE_VECTOR1((int64_t)maxlifetime));
|
||||
}
|
||||
|
||||
@@ -2147,10 +2147,10 @@ void c_SoapServer::t_handle(CStrRef request /* = null_string */) {
|
||||
if (valid_function(this, soap_obj, fn_name)) {
|
||||
try {
|
||||
if (m_type == SOAP_CLASS || m_type == SOAP_OBJECT) {
|
||||
h->retval = f_call_user_func_array
|
||||
h->retval = vm_call_user_func
|
||||
(CREATE_VECTOR2(soap_obj, fn_name), h->parameters);
|
||||
} else {
|
||||
h->retval = f_call_user_func_array(fn_name, h->parameters);
|
||||
h->retval = vm_call_user_func(fn_name, h->parameters);
|
||||
}
|
||||
} catch (Exception &e) {
|
||||
send_soap_server_fault(function, e, h);
|
||||
@@ -2172,10 +2172,10 @@ void c_SoapServer::t_handle(CStrRef request /* = null_string */) {
|
||||
if (valid_function(this, soap_obj, fn_name)) {
|
||||
try {
|
||||
if (m_type == SOAP_CLASS || m_type == SOAP_OBJECT) {
|
||||
retval = f_call_user_func_array
|
||||
retval = vm_call_user_func
|
||||
(CREATE_VECTOR2(soap_obj, fn_name), params);
|
||||
} else {
|
||||
retval = f_call_user_func_array(fn_name, params);
|
||||
retval = vm_call_user_func(fn_name, params);
|
||||
}
|
||||
} catch (Exception &e) {
|
||||
send_soap_server_fault(function, e, NULL);
|
||||
|
||||
@@ -217,7 +217,7 @@ Variant f_iterator_apply(CVarRef obj, CVarRef func,
|
||||
pobj->o_invoke("rewind", null_array, -1);
|
||||
int64_t count = 0;
|
||||
while (same(pobj->o_invoke("valid", null_array, -1), true)) {
|
||||
if (!same(f_call_user_func_array(func, params), true)) {
|
||||
if (!same(vm_call_user_func(func, params), true)) {
|
||||
break;
|
||||
}
|
||||
++count;
|
||||
|
||||
@@ -107,7 +107,7 @@ static void sqlite3_do_callback(sqlite3_context *context, CVarRef callback,
|
||||
for (int i = 0; i < argc; i++) {
|
||||
params.append(get_value(argv[i]));
|
||||
}
|
||||
Variant ret = f_call_user_func_array(callback, params);
|
||||
Variant ret = vm_call_user_func(callback, params);
|
||||
|
||||
if (!is_agg || !argv) {
|
||||
/* only set the sqlite return value if we are a scalar function,
|
||||
|
||||
@@ -68,8 +68,60 @@ bool f_settype(VRefParam var, CStrRef type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool f_is_object(CVarRef var) {
|
||||
return var.is(KindOfObject) && !var.isResource();
|
||||
bool f_is_bool(CVarRef v) {
|
||||
return is_bool(v);
|
||||
}
|
||||
|
||||
bool f_is_int(CVarRef v) {
|
||||
return is_int(v);
|
||||
}
|
||||
|
||||
bool f_is_integer(CVarRef v) {
|
||||
return is_int(v);
|
||||
}
|
||||
|
||||
bool f_is_long(CVarRef v) {
|
||||
return is_int(v);
|
||||
}
|
||||
|
||||
bool f_is_double(CVarRef v) {
|
||||
return is_double(v);
|
||||
}
|
||||
|
||||
bool f_is_float(CVarRef v) {
|
||||
return is_double(v);
|
||||
}
|
||||
|
||||
bool f_is_numeric(CVarRef v) {
|
||||
return v.isNumeric(true);
|
||||
}
|
||||
|
||||
bool f_is_real(CVarRef v) {
|
||||
return is_double(v);
|
||||
}
|
||||
|
||||
bool f_is_string(CVarRef v) {
|
||||
return is_string(v);
|
||||
}
|
||||
|
||||
bool f_is_scalar(CVarRef v) {
|
||||
return v.isScalar();
|
||||
}
|
||||
|
||||
bool f_is_array(CVarRef v) {
|
||||
return is_array(v);
|
||||
}
|
||||
|
||||
bool f_is_object(CVarRef v) {
|
||||
return is_object(v);
|
||||
}
|
||||
|
||||
bool f_is_resource(CVarRef v) {
|
||||
return v.isResource();
|
||||
}
|
||||
|
||||
bool f_is_null(CVarRef v) {
|
||||
return is_null(v);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -130,6 +182,10 @@ void f_debug_zval_dump(CVarRef variable) {
|
||||
vs.serialize(variable, false);
|
||||
}
|
||||
|
||||
Variant f_unserialize(CStrRef str) {
|
||||
return unserialize_from_string(str);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// variable table
|
||||
|
||||
|
||||
@@ -24,6 +24,369 @@
|
||||
|
||||
namespace HPHP {
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_bool(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_boolERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_bool(TypedValue* var) asm("_ZN4HPHP9f_is_boolERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_bool(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_bool((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_bool", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_int(HPHP::Variant const&)
|
||||
_ZN4HPHP8f_is_intERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_int(TypedValue* var) asm("_ZN4HPHP8f_is_intERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_int(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_int((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_int", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_integer(HPHP::Variant const&)
|
||||
_ZN4HPHP12f_is_integerERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_integer(TypedValue* var) asm("_ZN4HPHP12f_is_integerERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_integer(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_integer((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_integer", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_long(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_longERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_long(TypedValue* var) asm("_ZN4HPHP9f_is_longERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_long(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_long((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_long", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_double(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_doubleERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_double(TypedValue* var) asm("_ZN4HPHP11f_is_doubleERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_double(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_double((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_double", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_float(HPHP::Variant const&)
|
||||
_ZN4HPHP10f_is_floatERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_float(TypedValue* var) asm("_ZN4HPHP10f_is_floatERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_float(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_float((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_float", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_numeric(HPHP::Variant const&)
|
||||
_ZN4HPHP12f_is_numericERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_numeric(TypedValue* var) asm("_ZN4HPHP12f_is_numericERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_numeric(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_numeric((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_numeric", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_real(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_realERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_real(TypedValue* var) asm("_ZN4HPHP9f_is_realERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_real(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_real((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_real", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_string(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_stringERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_string(TypedValue* var) asm("_ZN4HPHP11f_is_stringERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_string(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_string((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_string", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_scalar(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_scalarERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_scalar(TypedValue* var) asm("_ZN4HPHP11f_is_scalarERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_scalar(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_scalar((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_scalar", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_array(HPHP::Variant const&)
|
||||
_ZN4HPHP10f_is_arrayERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_array(TypedValue* var) asm("_ZN4HPHP10f_is_arrayERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_array(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_array((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_array", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_object(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_objectERKNS_7VariantE
|
||||
@@ -57,6 +420,72 @@ TypedValue* fg_is_object(HPHP::VM::ActRec *ar) {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_resource(HPHP::Variant const&)
|
||||
_ZN4HPHP13f_is_resourceERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_resource(TypedValue* var) asm("_ZN4HPHP13f_is_resourceERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_resource(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_resource((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_resource", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_null(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_nullERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_null(TypedValue* var) asm("_ZN4HPHP9f_is_nullERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_null(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_null((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_null", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
HPHP::String HPHP::f_gettype(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_gettypeERKNS_7VariantE
|
||||
@@ -528,6 +957,56 @@ TypedValue* fg_debug_zval_dump(HPHP::VM::ActRec *ar) {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::f_unserialize(HPHP::String const&)
|
||||
_ZN4HPHP13f_unserializeERKNS_6StringE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
str => rsi
|
||||
*/
|
||||
|
||||
TypedValue* fh_unserialize(TypedValue* _rv, Value* str) asm("_ZN4HPHP13f_unserializeERKNS_6StringE");
|
||||
|
||||
TypedValue * fg1_unserialize(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) __attribute__((noinline,cold));
|
||||
TypedValue * fg1_unserialize(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) {
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
tvCastToStringInPlace(args-0);
|
||||
fh_unserialize((rv), &args[-0].m_data);
|
||||
if (rv->m_type == KindOfUninit) rv->m_type = KindOfNull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
TypedValue* fg_unserialize(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
if (IS_STRING_TYPE((args-0)->m_type)) {
|
||||
fh_unserialize((&(rv)), &args[-0].m_data);
|
||||
if (rv.m_type == KindOfUninit) rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
fg1_unserialize(&rv, ar, count);
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
}
|
||||
} else {
|
||||
throw_wrong_arguments_nr("unserialize", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
HPHP::Array HPHP::f_get_defined_vars()
|
||||
_ZN4HPHP18f_get_defined_varsEv
|
||||
|
||||
@@ -16,6 +16,116 @@
|
||||
*/
|
||||
namespace HPHP {
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_bool(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_boolERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_bool(TypedValue* var) asm("_ZN4HPHP9f_is_boolERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_int(HPHP::Variant const&)
|
||||
_ZN4HPHP8f_is_intERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_int(TypedValue* var) asm("_ZN4HPHP8f_is_intERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_integer(HPHP::Variant const&)
|
||||
_ZN4HPHP12f_is_integerERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_integer(TypedValue* var) asm("_ZN4HPHP12f_is_integerERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_long(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_longERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_long(TypedValue* var) asm("_ZN4HPHP9f_is_longERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_double(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_doubleERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_double(TypedValue* var) asm("_ZN4HPHP11f_is_doubleERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_float(HPHP::Variant const&)
|
||||
_ZN4HPHP10f_is_floatERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_float(TypedValue* var) asm("_ZN4HPHP10f_is_floatERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_numeric(HPHP::Variant const&)
|
||||
_ZN4HPHP12f_is_numericERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_numeric(TypedValue* var) asm("_ZN4HPHP12f_is_numericERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_real(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_realERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_real(TypedValue* var) asm("_ZN4HPHP9f_is_realERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_string(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_stringERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_string(TypedValue* var) asm("_ZN4HPHP11f_is_stringERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_scalar(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_scalarERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_scalar(TypedValue* var) asm("_ZN4HPHP11f_is_scalarERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_array(HPHP::Variant const&)
|
||||
_ZN4HPHP10f_is_arrayERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_array(TypedValue* var) asm("_ZN4HPHP10f_is_arrayERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_object(HPHP::Variant const&)
|
||||
_ZN4HPHP11f_is_objectERKNS_7VariantE
|
||||
@@ -26,6 +136,26 @@ var => rdi
|
||||
|
||||
bool fh_is_object(TypedValue* var) asm("_ZN4HPHP11f_is_objectERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_resource(HPHP::Variant const&)
|
||||
_ZN4HPHP13f_is_resourceERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_resource(TypedValue* var) asm("_ZN4HPHP13f_is_resourceERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::f_is_null(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_is_nullERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_null(TypedValue* var) asm("_ZN4HPHP9f_is_nullERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
HPHP::String HPHP::f_gettype(HPHP::Variant const&)
|
||||
_ZN4HPHP9f_gettypeERKNS_7VariantE
|
||||
@@ -145,6 +275,17 @@ variable => rdi
|
||||
|
||||
void fh_debug_zval_dump(TypedValue* variable) asm("_ZN4HPHP17f_debug_zval_dumpERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::f_unserialize(HPHP::String const&)
|
||||
_ZN4HPHP13f_unserializeERKNS_6StringE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
str => rsi
|
||||
*/
|
||||
|
||||
TypedValue* fh_unserialize(TypedValue* _rv, Value* str) asm("_ZN4HPHP13f_unserializeERKNS_6StringE");
|
||||
|
||||
/*
|
||||
HPHP::Array HPHP::f_get_defined_vars()
|
||||
_ZN4HPHP18f_get_defined_varsEv
|
||||
|
||||
@@ -24,199 +24,21 @@ namespace HPHP {
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// type testing
|
||||
|
||||
inline bool f_is_bool(bool v) { return true;}
|
||||
inline bool f_is_bool(char v) { return false;}
|
||||
inline bool f_is_bool(short v) { return false;}
|
||||
inline bool f_is_bool(int v) { return false;}
|
||||
inline bool f_is_bool(int64_t v) { return false;}
|
||||
inline bool f_is_bool(double v) { return false;}
|
||||
inline bool f_is_bool(litstr v) { return false;}
|
||||
inline bool f_is_bool(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_bool(CStrRef v) { return false;}
|
||||
inline bool f_is_bool(CArrRef v) { return false;}
|
||||
inline bool f_is_bool(CObjRef v) { return false;}
|
||||
inline bool f_is_bool(CVarRef v) { return v.is(KindOfBoolean);}
|
||||
|
||||
inline bool f_is_int(bool v) { return false;}
|
||||
inline bool f_is_int(char v) { return true;}
|
||||
inline bool f_is_int(short v) { return true;}
|
||||
inline bool f_is_int(int v) { return true;}
|
||||
inline bool f_is_int(int64_t v) { return true;}
|
||||
inline bool f_is_int(double v) { return false;}
|
||||
inline bool f_is_int(litstr v) { return false;}
|
||||
inline bool f_is_int(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_int(CStrRef v) { return false;}
|
||||
inline bool f_is_int(CArrRef v) { return false;}
|
||||
inline bool f_is_int(CObjRef v) { return false;}
|
||||
inline bool f_is_int(CVarRef v) { return v.isInteger();}
|
||||
|
||||
inline bool f_is_integer(bool v) { return false;}
|
||||
inline bool f_is_integer(char v) { return true;}
|
||||
inline bool f_is_integer(short v) { return true;}
|
||||
inline bool f_is_integer(int v) { return true;}
|
||||
inline bool f_is_integer(int64_t v) { return true;}
|
||||
inline bool f_is_integer(double v) { return false;}
|
||||
inline bool f_is_integer(litstr v) { return false;}
|
||||
inline bool f_is_integer(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_integer(CStrRef v) { return false;}
|
||||
inline bool f_is_integer(CArrRef v) { return false;}
|
||||
inline bool f_is_integer(CObjRef v) { return false;}
|
||||
inline bool f_is_integer(CVarRef v) { return v.isInteger();}
|
||||
|
||||
inline bool f_is_long(bool v) { return false;}
|
||||
inline bool f_is_long(char v) { return true;}
|
||||
inline bool f_is_long(short v) { return true;}
|
||||
inline bool f_is_long(int v) { return true;}
|
||||
inline bool f_is_long(int64_t v) { return true;}
|
||||
inline bool f_is_long(double v) { return false;}
|
||||
inline bool f_is_long(litstr v) { return false;}
|
||||
inline bool f_is_long(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_long(CStrRef v) { return false;}
|
||||
inline bool f_is_long(CArrRef v) { return false;}
|
||||
inline bool f_is_long(CObjRef v) { return false;}
|
||||
inline bool f_is_long(CVarRef v) { return v.isInteger();}
|
||||
|
||||
inline bool f_is_double(bool v) { return false;}
|
||||
inline bool f_is_double(char v) { return false;}
|
||||
inline bool f_is_double(short v) { return false;}
|
||||
inline bool f_is_double(int v) { return false;}
|
||||
inline bool f_is_double(int64_t v) { return false;}
|
||||
inline bool f_is_double(double v) { return true;}
|
||||
inline bool f_is_double(litstr v) { return false;}
|
||||
inline bool f_is_double(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_double(CStrRef v) { return false;}
|
||||
inline bool f_is_double(CArrRef v) { return false;}
|
||||
inline bool f_is_double(CObjRef v) { return false;}
|
||||
inline bool f_is_double(CVarRef v) { return v.is(KindOfDouble);}
|
||||
|
||||
inline bool f_is_float(bool v) { return false;}
|
||||
inline bool f_is_float(char v) { return false;}
|
||||
inline bool f_is_float(short v) { return false;}
|
||||
inline bool f_is_float(int v) { return false;}
|
||||
inline bool f_is_float(int64_t v) { return false;}
|
||||
inline bool f_is_float(double v) { return true;}
|
||||
inline bool f_is_float(litstr v) { return false;}
|
||||
inline bool f_is_float(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_float(CStrRef v) { return false;}
|
||||
inline bool f_is_float(CArrRef v) { return false;}
|
||||
inline bool f_is_float(CObjRef v) { return false;}
|
||||
inline bool f_is_float(CVarRef v) { return v.is(KindOfDouble);}
|
||||
|
||||
inline bool f_is_numeric(bool v) { return false;}
|
||||
inline bool f_is_numeric(char v) { return true;}
|
||||
inline bool f_is_numeric(short v) { return true;}
|
||||
inline bool f_is_numeric(int v) { return true;}
|
||||
inline bool f_is_numeric(int64_t v) { return true;}
|
||||
inline bool f_is_numeric(double v) { return true;}
|
||||
inline bool f_is_numeric(litstr v) { return String(v).isNumeric();}
|
||||
inline bool f_is_numeric(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_numeric(CStrRef v) { return v.isNumeric();}
|
||||
inline bool f_is_numeric(CArrRef v) { return false;}
|
||||
inline bool f_is_numeric(CObjRef v) { return false;}
|
||||
inline bool f_is_numeric(CVarRef v) { return v.isNumeric(true);}
|
||||
|
||||
inline bool f_is_real(bool v) { return false;}
|
||||
inline bool f_is_real(char v) { return false;}
|
||||
inline bool f_is_real(short v) { return false;}
|
||||
inline bool f_is_real(int v) { return false;}
|
||||
inline bool f_is_real(int64_t v) { return false;}
|
||||
inline bool f_is_real(double v) { return true;}
|
||||
inline bool f_is_real(litstr v) { return false;}
|
||||
inline bool f_is_real(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_real(CStrRef v) { return false;}
|
||||
inline bool f_is_real(CArrRef v) { return false;}
|
||||
inline bool f_is_real(CObjRef v) { return false;}
|
||||
inline bool f_is_real(CVarRef v) { return v.is(KindOfDouble);}
|
||||
|
||||
inline bool f_is_string(bool v) { return false;}
|
||||
inline bool f_is_string(char v) { return false;}
|
||||
inline bool f_is_string(short v) { return false;}
|
||||
inline bool f_is_string(int v) { return false;}
|
||||
inline bool f_is_string(int64_t v) { return false;}
|
||||
inline bool f_is_string(double v) { return false;}
|
||||
inline bool f_is_string(litstr v) { return true;}
|
||||
inline bool f_is_string(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_string(CStrRef v) { return true;}
|
||||
inline bool f_is_string(CArrRef v) { return false;}
|
||||
inline bool f_is_string(CObjRef v) { return false;}
|
||||
inline bool f_is_string(CVarRef v) { return v.isString();}
|
||||
|
||||
inline bool f_is_scalar(bool v) { return true;}
|
||||
inline bool f_is_scalar(char v) { return true;}
|
||||
inline bool f_is_scalar(short v) { return true;}
|
||||
inline bool f_is_scalar(int v) { return true;}
|
||||
inline bool f_is_scalar(int64_t v) { return true;}
|
||||
inline bool f_is_scalar(double v) { return true;}
|
||||
inline bool f_is_scalar(litstr v) { return true;}
|
||||
inline bool f_is_scalar(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_scalar(CStrRef v) { return true;}
|
||||
inline bool f_is_scalar(CArrRef v) { return false;}
|
||||
inline bool f_is_scalar(CObjRef v) { return false;}
|
||||
inline bool f_is_scalar(CVarRef v) { return v.isScalar();}
|
||||
|
||||
inline bool f_is_array(bool v) { return false;}
|
||||
inline bool f_is_array(char v) { return false;}
|
||||
inline bool f_is_array(short v) { return false;}
|
||||
inline bool f_is_array(int v) { return false;}
|
||||
inline bool f_is_array(int64_t v) { return false;}
|
||||
inline bool f_is_array(double v) { return false;}
|
||||
inline bool f_is_array(litstr v) { return false;}
|
||||
inline bool f_is_array(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_array(CStrRef v) { return false;}
|
||||
inline bool f_is_array(CArrRef v) { return true;}
|
||||
inline bool f_is_array(CObjRef v) { return false;}
|
||||
inline bool f_is_array(CVarRef v) { return v.is(KindOfArray);}
|
||||
|
||||
inline bool f_is_object(bool v) { return false;}
|
||||
inline bool f_is_object(char v) { return false;}
|
||||
inline bool f_is_object(short v) { return false;}
|
||||
inline bool f_is_object(int v) { return false;}
|
||||
inline bool f_is_object(int64_t v) { return false;}
|
||||
inline bool f_is_object(double v) { return false;}
|
||||
inline bool f_is_object(litstr v) { return false;}
|
||||
inline bool f_is_object(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_object(CStrRef v) { return false;}
|
||||
inline bool f_is_object(CArrRef v) { return false;}
|
||||
inline bool f_is_object(CObjRef v) { return !v.isResource();}
|
||||
bool f_is_bool(CVarRef v);
|
||||
bool f_is_int(CVarRef v);
|
||||
bool f_is_integer(CVarRef v);
|
||||
bool f_is_long(CVarRef v);
|
||||
bool f_is_double(CVarRef v);
|
||||
bool f_is_float(CVarRef v);
|
||||
bool f_is_numeric(CVarRef v);
|
||||
bool f_is_real(CVarRef v);
|
||||
bool f_is_string(CVarRef v);
|
||||
bool f_is_scalar(CVarRef v);
|
||||
bool f_is_array(CVarRef v);
|
||||
bool f_is_object(CVarRef v);
|
||||
bool f_is_resource(CVarRef v);
|
||||
bool f_is_null(CVarRef v);
|
||||
|
||||
inline bool f_is_resource(bool v) { return false;}
|
||||
inline bool f_is_resource(char v) { return false;}
|
||||
inline bool f_is_resource(short v) { return false;}
|
||||
inline bool f_is_resource(int v) { return false;}
|
||||
inline bool f_is_resource(int64_t v) { return false;}
|
||||
inline bool f_is_resource(double v) { return false;}
|
||||
inline bool f_is_resource(litstr v) { return false;}
|
||||
inline bool f_is_resource(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_resource(CStrRef v) { return false;}
|
||||
inline bool f_is_resource(CArrRef v) { return false;}
|
||||
inline bool f_is_resource(CObjRef v) { return v.isResource();}
|
||||
inline bool f_is_resource(CVarRef v) { return v.isResource();}
|
||||
|
||||
inline bool f_is_null(bool v) { return false;}
|
||||
inline bool f_is_null(char v) { return false;}
|
||||
inline bool f_is_null(short v) { return false;}
|
||||
inline bool f_is_null(int v) { return false;}
|
||||
inline bool f_is_null(int64_t v) { return false;}
|
||||
inline bool f_is_null(double v) { return false;}
|
||||
inline bool f_is_null(litstr v) { return false;}
|
||||
inline bool f_is_null(const StringData *v) { not_reached(); }
|
||||
inline bool f_is_null(CStrRef v) { return v.isNull();}
|
||||
inline bool f_is_null(CArrRef v) { return v.isNull();}
|
||||
inline bool f_is_null(CObjRef v) { return v.isNull();}
|
||||
inline bool f_is_null(CVarRef v) { return v.isNull();}
|
||||
|
||||
inline String f_gettype(bool v) { return "boolean";}
|
||||
inline String f_gettype(char v) { return "integer";}
|
||||
inline String f_gettype(short v) { return "integer";}
|
||||
inline String f_gettype(int v) { return "integer";}
|
||||
inline String f_gettype(int64_t v) { return "integer";}
|
||||
inline String f_gettype(double v) { return "double";}
|
||||
inline String f_gettype(litstr v) { return "string";}
|
||||
inline String f_gettype(const StringData *v) { not_reached(); }
|
||||
inline String f_gettype(CStrRef v) { return "string";}
|
||||
inline String f_gettype(CArrRef v) { return "array";}
|
||||
inline String f_gettype(CObjRef v) { return "object";}
|
||||
String f_gettype(CVarRef v);
|
||||
String f_get_resource_type(CObjRef handle);
|
||||
|
||||
|
||||
@@ -341,7 +341,7 @@ static Variant xml_call_handler(XmlParser *parser, CVarRef handler,
|
||||
} else if (handler.isArray() && handler.getArrayData()->size() == 2 &&
|
||||
(handler[0].isString() || handler[0].isObject()) &&
|
||||
handler[1].isString()) {
|
||||
f_call_user_func_array(handler, args);
|
||||
vm_call_user_func(handler, args);
|
||||
} else {
|
||||
raise_warning("Handler is invalid");
|
||||
}
|
||||
|
||||
@@ -959,7 +959,7 @@ int MimePart::extractImpl(int decode, File *src) {
|
||||
}
|
||||
|
||||
void MimePart::callUserFunc(CStrRef s) {
|
||||
f_call_user_func_array(m_extract_context, CREATE_VECTOR1(s));
|
||||
vm_call_user_func(m_extract_context, CREATE_VECTOR1(s));
|
||||
}
|
||||
|
||||
void MimePart::outputToStdout(CStrRef s) {
|
||||
|
||||
@@ -88,7 +88,7 @@ void PDOConnection::persistentSave() {
|
||||
|
||||
void PDOConnection::persistentRestore() {
|
||||
if (!serialized_def_stmt_ctor_args.empty()) {
|
||||
def_stmt_ctor_args = f_unserialize(serialized_def_stmt_ctor_args);
|
||||
def_stmt_ctor_args = unserialize_from_string(serialized_def_stmt_ctor_args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -685,7 +685,7 @@ xmlNodePtr to_xml_user(encodeTypePtr type, CVarRef data, int style,
|
||||
xmlNodePtr parent) {
|
||||
xmlNodePtr ret = NULL;
|
||||
if (type && type->map && !type->map->to_xml.isNull()) {
|
||||
Variant return_value = f_call_user_func_array(type->map->to_xml,
|
||||
Variant return_value = vm_call_user_func(type->map->to_xml,
|
||||
CREATE_VECTOR1(data));
|
||||
if (return_value.isString()) {
|
||||
String sdoc = return_value.toString();
|
||||
@@ -716,7 +716,7 @@ Variant to_zval_user(encodeTypePtr type, xmlNodePtr node) {
|
||||
xmlBufferFree(buf);
|
||||
xmlFreeNode(copy);
|
||||
|
||||
return_value = f_call_user_func_array(type->map->to_zval,
|
||||
return_value = vm_call_user_func(type->map->to_zval,
|
||||
CREATE_VECTOR1(data));
|
||||
}
|
||||
return return_value;
|
||||
|
||||
@@ -129,4 +129,3 @@
|
||||
#include "../ext/soap/sdl.ext_hhvm.h"
|
||||
#include "../ext/soap/encoding.ext_hhvm.h"
|
||||
#include "../base/builtin_functions.ext_hhvm.h"
|
||||
#include "ext_hhvm_noinline.ext_hhvm.h"
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| HipHop for PHP |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2010- 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 <runtime/ext/ext.h>
|
||||
|
||||
/*
|
||||
* This file contains non-inline definitions of some extension
|
||||
* functions that are only defined inline in hphpc.
|
||||
*
|
||||
* In HHVM we need actual addresses for these functions to jump to.
|
||||
*/
|
||||
|
||||
namespace HPHP {
|
||||
|
||||
Variant fni_call_user_func_array(Variant const& function, Array const& params) {
|
||||
return f_call_user_func_array(function, params);
|
||||
}
|
||||
|
||||
bool fni_is_bool(Variant const& var) {
|
||||
return f_is_bool(var);
|
||||
}
|
||||
|
||||
bool fni_is_int(Variant const& var) {
|
||||
return f_is_int(var);
|
||||
}
|
||||
|
||||
bool fni_is_integer(Variant const& var) {
|
||||
return f_is_integer(var);
|
||||
}
|
||||
|
||||
bool fni_is_long(Variant const& var) {
|
||||
return f_is_long(var);
|
||||
}
|
||||
|
||||
bool fni_is_double(Variant const& var) {
|
||||
return f_is_double(var);
|
||||
}
|
||||
|
||||
bool fni_is_float(Variant const& var) {
|
||||
return f_is_float(var);
|
||||
}
|
||||
|
||||
bool fni_is_numeric(Variant const& var) {
|
||||
return f_is_numeric(var);
|
||||
}
|
||||
|
||||
bool fni_is_real(Variant const& var) {
|
||||
return f_is_real(var);
|
||||
}
|
||||
|
||||
bool fni_is_string(Variant const& var) {
|
||||
return f_is_string(var);
|
||||
}
|
||||
|
||||
bool fni_is_scalar(Variant const& var) {
|
||||
return f_is_scalar(var);
|
||||
}
|
||||
|
||||
bool fni_is_array(Variant const& var) {
|
||||
return f_is_array(var);
|
||||
}
|
||||
|
||||
bool fni_is_resource(Variant const& var) {
|
||||
return f_is_resource(var);
|
||||
}
|
||||
|
||||
bool fni_is_null(Variant const& var) {
|
||||
return f_is_null(var);
|
||||
}
|
||||
|
||||
Variant fni_unserialize(String const& str) {
|
||||
return f_unserialize(str);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,558 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| HipHop for PHP |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2010- 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 <runtime/ext_hhvm/ext_hhvm.h>
|
||||
#include <runtime/base/builtin_functions.h>
|
||||
#include <runtime/base/array/array_init.h>
|
||||
#include <runtime/ext/ext.h>
|
||||
#include <runtime/vm/class.h>
|
||||
#include <runtime/vm/runtime.h>
|
||||
#include <exception>
|
||||
|
||||
namespace HPHP {
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::fni_call_user_func_array(HPHP::Variant const&, HPHP::Array const&)
|
||||
_ZN4HPHP24fni_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
function => rsi
|
||||
params => rdx
|
||||
*/
|
||||
|
||||
TypedValue* fh_call_user_func_array(TypedValue* _rv, TypedValue* function, Value* params) asm("_ZN4HPHP24fni_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE");
|
||||
|
||||
TypedValue * fg1_call_user_func_array(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) __attribute__((noinline,cold));
|
||||
TypedValue * fg1_call_user_func_array(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) {
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
tvCastToArrayInPlace(args-1);
|
||||
fh_call_user_func_array((rv), (args-0), &args[-1].m_data);
|
||||
if (rv->m_type == KindOfUninit) rv->m_type = KindOfNull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
TypedValue* fg_call_user_func_array(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 2LL) {
|
||||
if ((args-1)->m_type == KindOfArray) {
|
||||
fh_call_user_func_array((&(rv)), (args-0), &args[-1].m_data);
|
||||
if (rv.m_type == KindOfUninit) rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 2);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
fg1_call_user_func_array(&rv, ar, count);
|
||||
frame_free_locals_no_this_inl(ar, 2);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
}
|
||||
} else {
|
||||
throw_wrong_arguments_nr("call_user_func_array", count, 2, 2, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 2);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_bool(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_boolERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_bool(TypedValue* var) asm("_ZN4HPHP11fni_is_boolERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_bool(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_bool((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_bool", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_int(HPHP::Variant const&)
|
||||
_ZN4HPHP10fni_is_intERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_int(TypedValue* var) asm("_ZN4HPHP10fni_is_intERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_int(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_int((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_int", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_integer(HPHP::Variant const&)
|
||||
_ZN4HPHP14fni_is_integerERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_integer(TypedValue* var) asm("_ZN4HPHP14fni_is_integerERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_integer(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_integer((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_integer", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_long(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_longERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_long(TypedValue* var) asm("_ZN4HPHP11fni_is_longERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_long(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_long((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_long", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_double(HPHP::Variant const&)
|
||||
_ZN4HPHP13fni_is_doubleERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_double(TypedValue* var) asm("_ZN4HPHP13fni_is_doubleERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_double(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_double((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_double", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_float(HPHP::Variant const&)
|
||||
_ZN4HPHP12fni_is_floatERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_float(TypedValue* var) asm("_ZN4HPHP12fni_is_floatERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_float(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_float((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_float", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_numeric(HPHP::Variant const&)
|
||||
_ZN4HPHP14fni_is_numericERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_numeric(TypedValue* var) asm("_ZN4HPHP14fni_is_numericERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_numeric(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_numeric((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_numeric", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_real(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_realERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_real(TypedValue* var) asm("_ZN4HPHP11fni_is_realERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_real(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_real((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_real", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_string(HPHP::Variant const&)
|
||||
_ZN4HPHP13fni_is_stringERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_string(TypedValue* var) asm("_ZN4HPHP13fni_is_stringERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_string(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_string((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_string", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_scalar(HPHP::Variant const&)
|
||||
_ZN4HPHP13fni_is_scalarERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_scalar(TypedValue* var) asm("_ZN4HPHP13fni_is_scalarERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_scalar(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_scalar((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_scalar", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_array(HPHP::Variant const&)
|
||||
_ZN4HPHP12fni_is_arrayERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_array(TypedValue* var) asm("_ZN4HPHP12fni_is_arrayERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_array(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_array((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_array", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_resource(HPHP::Variant const&)
|
||||
_ZN4HPHP15fni_is_resourceERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_resource(TypedValue* var) asm("_ZN4HPHP15fni_is_resourceERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_resource(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_resource((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_resource", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_null(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_nullERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_null(TypedValue* var) asm("_ZN4HPHP11fni_is_nullERKNS_7VariantE");
|
||||
|
||||
TypedValue* fg_is_null(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
rv.m_type = KindOfBoolean;
|
||||
rv.m_data.num = (fh_is_null((args-0))) ? 1LL : 0LL;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
throw_wrong_arguments_nr("is_null", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::fni_unserialize(HPHP::String const&)
|
||||
_ZN4HPHP15fni_unserializeERKNS_6StringE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
str => rsi
|
||||
*/
|
||||
|
||||
TypedValue* fh_unserialize(TypedValue* _rv, Value* str) asm("_ZN4HPHP15fni_unserializeERKNS_6StringE");
|
||||
|
||||
TypedValue * fg1_unserialize(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) __attribute__((noinline,cold));
|
||||
TypedValue * fg1_unserialize(TypedValue* rv, HPHP::VM::ActRec* ar, int64_t count) {
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
tvCastToStringInPlace(args-0);
|
||||
fh_unserialize((rv), &args[-0].m_data);
|
||||
if (rv->m_type == KindOfUninit) rv->m_type = KindOfNull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
TypedValue* fg_unserialize(HPHP::VM::ActRec *ar) {
|
||||
TypedValue rv;
|
||||
int64_t count = ar->numArgs();
|
||||
TypedValue* args UNUSED = ((TypedValue*)ar) - 1;
|
||||
if (count == 1LL) {
|
||||
if (IS_STRING_TYPE((args-0)->m_type)) {
|
||||
fh_unserialize((&(rv)), &args[-0].m_data);
|
||||
if (rv.m_type == KindOfUninit) rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
} else {
|
||||
fg1_unserialize(&rv, ar, count);
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
}
|
||||
} else {
|
||||
throw_wrong_arguments_nr("unserialize", count, 1, 1, 1);
|
||||
}
|
||||
rv.m_data.num = 0LL;
|
||||
rv.m_type = KindOfNull;
|
||||
frame_free_locals_no_this_inl(ar, 1);
|
||||
memcpy(&ar->m_r, &rv, sizeof(TypedValue));
|
||||
return &ar->m_r;
|
||||
return &ar->m_r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
} // !HPHP
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| HipHop for PHP |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2010- 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. |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
namespace HPHP {
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::fni_call_user_func_array(HPHP::Variant const&, HPHP::Array const&)
|
||||
_ZN4HPHP24fni_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
function => rsi
|
||||
params => rdx
|
||||
*/
|
||||
|
||||
TypedValue* fh_call_user_func_array(TypedValue* _rv, TypedValue* function, Value* params) asm("_ZN4HPHP24fni_call_user_func_arrayERKNS_7VariantERKNS_5ArrayE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_bool(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_boolERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_bool(TypedValue* var) asm("_ZN4HPHP11fni_is_boolERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_int(HPHP::Variant const&)
|
||||
_ZN4HPHP10fni_is_intERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_int(TypedValue* var) asm("_ZN4HPHP10fni_is_intERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_integer(HPHP::Variant const&)
|
||||
_ZN4HPHP14fni_is_integerERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_integer(TypedValue* var) asm("_ZN4HPHP14fni_is_integerERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_long(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_longERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_long(TypedValue* var) asm("_ZN4HPHP11fni_is_longERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_double(HPHP::Variant const&)
|
||||
_ZN4HPHP13fni_is_doubleERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_double(TypedValue* var) asm("_ZN4HPHP13fni_is_doubleERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_float(HPHP::Variant const&)
|
||||
_ZN4HPHP12fni_is_floatERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_float(TypedValue* var) asm("_ZN4HPHP12fni_is_floatERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_numeric(HPHP::Variant const&)
|
||||
_ZN4HPHP14fni_is_numericERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_numeric(TypedValue* var) asm("_ZN4HPHP14fni_is_numericERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_real(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_realERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_real(TypedValue* var) asm("_ZN4HPHP11fni_is_realERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_string(HPHP::Variant const&)
|
||||
_ZN4HPHP13fni_is_stringERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_string(TypedValue* var) asm("_ZN4HPHP13fni_is_stringERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_scalar(HPHP::Variant const&)
|
||||
_ZN4HPHP13fni_is_scalarERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_scalar(TypedValue* var) asm("_ZN4HPHP13fni_is_scalarERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_array(HPHP::Variant const&)
|
||||
_ZN4HPHP12fni_is_arrayERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_array(TypedValue* var) asm("_ZN4HPHP12fni_is_arrayERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_resource(HPHP::Variant const&)
|
||||
_ZN4HPHP15fni_is_resourceERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_resource(TypedValue* var) asm("_ZN4HPHP15fni_is_resourceERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
bool HPHP::fni_is_null(HPHP::Variant const&)
|
||||
_ZN4HPHP11fni_is_nullERKNS_7VariantE
|
||||
|
||||
(return value) => rax
|
||||
var => rdi
|
||||
*/
|
||||
|
||||
bool fh_is_null(TypedValue* var) asm("_ZN4HPHP11fni_is_nullERKNS_7VariantE");
|
||||
|
||||
/*
|
||||
HPHP::Variant HPHP::fni_unserialize(HPHP::String const&)
|
||||
_ZN4HPHP15fni_unserializeERKNS_6StringE
|
||||
|
||||
(return value) => rax
|
||||
_rv => rdi
|
||||
str => rsi
|
||||
*/
|
||||
|
||||
TypedValue* fh_unserialize(TypedValue* _rv, Value* str) asm("_ZN4HPHP15fni_unserializeERKNS_6StringE");
|
||||
|
||||
|
||||
} // !HPHP
|
||||
|
||||
@@ -52,13 +52,10 @@ function generateMangleMap() {
|
||||
if ($m == '' || $d == '') continue;
|
||||
if (isset($ignoreList[$d])) continue;
|
||||
/*
|
||||
* We only care about functions that start with "f_" or "fni_"
|
||||
* We only care about functions that start with "f_"
|
||||
* and methods that start with "t_" ot "ti_"
|
||||
*
|
||||
* fni_ are our stubs in noinline.cpp for extensions that are
|
||||
* normally defined inline only.
|
||||
*/
|
||||
if (preg_match('/^HPHP::f(ni)?_/', $d) ||
|
||||
if (preg_match('/^HPHP::f_/', $d) ||
|
||||
preg_match('/^HPHP::c_[A-Za-z0-9_]*::t(i)?_/', $d)) {
|
||||
$mangleMap[$d] = $m;
|
||||
}
|
||||
@@ -102,13 +99,6 @@ function parseIDLFunc($idlFunc, $mangleMap) {
|
||||
$obj->initFunc($name, $returnType, $returnByRef, $params, $isVarargs);
|
||||
$sig = $obj->getHphpSig();
|
||||
|
||||
// The implementation of some extension functions are in the .h file,
|
||||
// so we don't have a mangled names for them.
|
||||
if (!isset($mangleMap[$sig])) {
|
||||
$obj->prefix = 'fni_';
|
||||
$sig = $obj->getHphpSig();
|
||||
}
|
||||
|
||||
if (isset($mangleMap[$sig])) {
|
||||
$obj->mangledName = $mangleMap[$sig];
|
||||
} else {
|
||||
|
||||
@@ -1131,7 +1131,7 @@ Variant parse_php_serialized(AsmState& as) {
|
||||
// it.
|
||||
buffer.push_back('\0');
|
||||
String data(&buffer[0], buffer.size() - 1, AttachLiteral);
|
||||
return f_unserialize(data);
|
||||
return unserialize_from_string(data);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -245,7 +245,7 @@ struct BlobDecoder {
|
||||
assert(!!s);
|
||||
if (s->empty()) return;
|
||||
|
||||
tvAsVariant(&tv) = f_unserialize(s);
|
||||
tvAsVariant(&tv) = unserialize_from_string(s);
|
||||
tvAsVariant(&tv).setEvalScalar();
|
||||
}
|
||||
|
||||
|
||||
@@ -4855,13 +4855,13 @@ inline void OPTBLD_INLINE VMExecutionContext::iopIs ## what ## C(PC& pc) { \
|
||||
IOP_TYPE_CHECK_INSTR_C(checkInit, what, predicate) \
|
||||
|
||||
IOP_TYPE_CHECK_INSTR_L(false, set, isset)
|
||||
IOP_TYPE_CHECK_INSTR(true, Null, f_is_null)
|
||||
IOP_TYPE_CHECK_INSTR(true, Array, f_is_array)
|
||||
IOP_TYPE_CHECK_INSTR(true, String, f_is_string)
|
||||
IOP_TYPE_CHECK_INSTR(true, Object, f_is_object)
|
||||
IOP_TYPE_CHECK_INSTR(true, Int, f_is_int)
|
||||
IOP_TYPE_CHECK_INSTR(true, Double, f_is_double)
|
||||
IOP_TYPE_CHECK_INSTR(true, Bool, f_is_bool)
|
||||
IOP_TYPE_CHECK_INSTR(true, Null, is_null)
|
||||
IOP_TYPE_CHECK_INSTR(true, Array, is_array)
|
||||
IOP_TYPE_CHECK_INSTR(true, String, is_string)
|
||||
IOP_TYPE_CHECK_INSTR(true, Object, is_object)
|
||||
IOP_TYPE_CHECK_INSTR(true, Int, is_int)
|
||||
IOP_TYPE_CHECK_INSTR(true, Double, is_double)
|
||||
IOP_TYPE_CHECK_INSTR(true, Bool, is_bool)
|
||||
#undef IOP_TYPE_CHECK_INSTR
|
||||
|
||||
inline void OPTBLD_INLINE VMExecutionContext::iopEmptyL(PC& pc) {
|
||||
|
||||
@@ -92,7 +92,7 @@ void EventHook::RunUserProfiler(const ActRec* ar, int mode) {
|
||||
params.append(VarNR(ar->m_func->fullName()));
|
||||
params.append(frameinfo);
|
||||
|
||||
f_call_user_func_array(g_vmContext->m_setprofileCallback, params);
|
||||
vm_call_user_func(g_vmContext->m_setprofileCallback, params);
|
||||
}
|
||||
|
||||
void EventHook::onFunctionEnter(const ActRec* ar, int funcType) {
|
||||
|
||||
@@ -346,7 +346,7 @@ void RepoQuery::getTypedValue(int iCol, TypedValue& tv) {
|
||||
tvWriteUninit(&tv);
|
||||
if (size > 0) {
|
||||
String s = String((const char*)blob, size, CopyString);
|
||||
Variant v = f_unserialize(s);
|
||||
Variant v = unserialize_from_string(s);
|
||||
if (v.isString()) {
|
||||
v = String(StringData::GetStaticString(v.asCStrRef().get()));
|
||||
} else if (v.isArray()) {
|
||||
|
||||
@@ -1627,7 +1627,7 @@ void UnitRepoProxy::GetUnitArraysStmt
|
||||
Id arrayId; /**/ query.getId(0, arrayId);
|
||||
StringData* array; /**/ query.getStaticString(1, array);
|
||||
String s(array);
|
||||
Variant v = f_unserialize(s);
|
||||
Variant v = unserialize_from_string(s);
|
||||
Id id UNUSED = ue.mergeArray(v.asArrRef().get(), array);
|
||||
assert(id == arrayId);
|
||||
}
|
||||
|
||||
@@ -628,7 +628,7 @@ bool TestCppBase::TestArray() {
|
||||
bool TestCppBase::TestObject() {
|
||||
{
|
||||
String s = "O:1:\"B\":1:{s:3:\"obj\";O:1:\"A\":1:{s:1:\"a\";i:10;}}";
|
||||
VS(f_serialize(f_unserialize(s)), "O:22:\"__PHP_Incomplete_Class\":2:{s:27:\"__PHP_Incomplete_Class_Name\";s:1:\"B\";s:3:\"obj\";O:22:\"__PHP_Incomplete_Class\":2:{s:27:\"__PHP_Incomplete_Class_Name\";s:1:\"A\";s:1:\"a\";i:10;}}");
|
||||
VS(f_serialize(unserialize_from_string(s)), "O:22:\"__PHP_Incomplete_Class\":2:{s:27:\"__PHP_Incomplete_Class_Name\";s:1:\"B\";s:3:\"obj\";O:22:\"__PHP_Incomplete_Class\":2:{s:27:\"__PHP_Incomplete_Class_Name\";s:1:\"A\";s:1:\"a\";i:10;}}");
|
||||
}
|
||||
VERIFY(!equal(Object(new TestResource()), Object(new TestResource()) ));
|
||||
return Count(true);
|
||||
|
||||
@@ -434,7 +434,7 @@ bool TestExtFile::test_file_get_contents() {
|
||||
VS(f_file_get_contents("test/test_ext_file.tmp"),
|
||||
"testing file_get_contents");
|
||||
|
||||
VS(f_unserialize(f_file_get_contents("compress.zlib://test/test_zlib_file")),
|
||||
VS(unserialize_from_string(f_file_get_contents("compress.zlib://test/test_zlib_file")),
|
||||
CREATE_VECTOR1("rblock:216105"));
|
||||
return Count(true);
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ bool TestExtFunction::test_is_callable() {
|
||||
}
|
||||
|
||||
bool TestExtFunction::test_call_user_func_array() {
|
||||
Variant ret = f_call_user_func_array("TEst", CREATE_VECTOR1("param"));
|
||||
Variant ret = vm_call_user_func("TEst", CREATE_VECTOR1("param"));
|
||||
VS(ret, "param");
|
||||
return Count(true);
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ bool TestExtVariable::test_is_array() {
|
||||
bool TestExtVariable::test_is_object() {
|
||||
VERIFY(!f_is_object(123));
|
||||
VERIFY(!f_is_object("test"));
|
||||
VERIFY(f_is_object(Object()));
|
||||
VERIFY(f_is_object(Object(SystemLib::AllocStdClassObject())));
|
||||
return Count(true);
|
||||
}
|
||||
|
||||
@@ -187,9 +187,9 @@ bool TestExtVariable::test_gettype() {
|
||||
VS(f_gettype(uninit_null()), "NULL");
|
||||
VS(f_gettype(0), "integer");
|
||||
VS(f_gettype("test"), "string");
|
||||
VS(f_gettype(String()), "string");
|
||||
VS(f_gettype(Array()), "array");
|
||||
VS(f_gettype(Object()), "object");
|
||||
VS(f_gettype(String("hi")), "string");
|
||||
VS(f_gettype(Array::Create()), "array");
|
||||
VS(f_gettype(Object(SystemLib::AllocStdClassObject())), "object");
|
||||
return Count(true);
|
||||
}
|
||||
|
||||
@@ -364,17 +364,17 @@ bool TestExtVariable::test_serialize() {
|
||||
bool TestExtVariable::test_unserialize() {
|
||||
{
|
||||
// this was crashing
|
||||
f_unserialize(StringUtil::HexDecode("53203a20224c612072756f74612067697261207065722074757474692220204d203a20227365636f6e646f206d6520736920c3a820696e6361737472617461206461207175616c6368652070617274652122"));
|
||||
unserialize_from_string(StringUtil::HexDecode("53203a20224c612072756f74612067697261207065722074757474692220204d203a20227365636f6e646f206d6520736920c3a820696e6361737472617461206461207175616c6368652070617274652122"));
|
||||
}
|
||||
{
|
||||
Variant v = f_unserialize("O:8:\"stdClass\":1:{s:4:\"name\";s:5:\"value\";}");
|
||||
Variant v = unserialize_from_string("O:8:\"stdClass\":1:{s:4:\"name\";s:5:\"value\";}");
|
||||
VERIFY(v.is(KindOfObject));
|
||||
Object obj = v.toObject();
|
||||
VS(obj->o_getClassName(), "stdClass");
|
||||
VS(obj.o_get("name"), "value");
|
||||
}
|
||||
{
|
||||
Variant v = f_unserialize(String("O:8:\"stdClass\":1:{s:7:\"\0*\0name\";s:5:\"value\";}", 45, AttachLiteral));
|
||||
Variant v = unserialize_from_string(String("O:8:\"stdClass\":1:{s:7:\"\0*\0name\";s:5:\"value\";}", 45, AttachLiteral));
|
||||
VERIFY(v.is(KindOfObject));
|
||||
Object obj = v.toObject();
|
||||
VS(obj->o_getClassName(), "stdClass");
|
||||
@@ -382,7 +382,7 @@ bool TestExtVariable::test_unserialize() {
|
||||
}
|
||||
{
|
||||
Variant v1 = CREATE_MAP3("a","apple","b",2,"c",CREATE_VECTOR3(1,"y",3));
|
||||
Variant v2 = f_unserialize("a:3:{s:1:\"a\";s:5:\"apple\";s:1:\"b\";i:2;s:1:\"c\";a:3:{i:0;i:1;i:1;s:1:\"y\";i:2;i:3;}}");
|
||||
Variant v2 = unserialize_from_string("a:3:{s:1:\"a\";s:5:\"apple\";s:1:\"b\";i:2;s:1:\"c\";a:3:{i:0;i:1;i:1;s:1:\"y\";i:2;i:3;}}");
|
||||
VS(v1, v2);
|
||||
}
|
||||
return Count(true);
|
||||
|
||||
@@ -52,8 +52,6 @@ if [ "$1" = "hhvm" -o "$1" = "all" ]; then
|
||||
make_hhvm $RUNTIME_BUILD/runtime/ext/$i.cpp.o ../ext/$i.ext_hhvm.cpp
|
||||
done
|
||||
make_hhvm $RUNTIME_BUILD/runtime/base/builtin_functions.cpp.o ../base/builtin_functions.ext_hhvm.cpp
|
||||
EXTHHVM_BUILD=$HPHP_HOME/hphp/runtime/ext_hhvm/CMakeFiles/ext_hhvm_static.dir
|
||||
make_hhvm $EXTHHVM_BUILD/ext_hhvm_noinline.cpp.o ext_hhvm_noinline.ext_hhvm.cpp
|
||||
fi
|
||||
|
||||
if [ "$1" = "infotabs" -o "$1" = "all" ]; then
|
||||
@@ -61,7 +59,7 @@ if [ "$1" = "infotabs" -o "$1" = "all" ]; then
|
||||
|
||||
SOURCES=`find ../ext -name '*.ext_hhvm.cpp'`
|
||||
[ $VERBOSE -eq 1 ] && echo "Generating hphp/runtime/ext_hhvm/ext_hhvm_infotabs.h"
|
||||
$HHVM gen_infotabs_header.php ext_hhvm_infotabs.h $SOURCES ../base/builtin_functions.ext_hhvm.cpp ext_hhvm_noinline.ext_hhvm.cpp
|
||||
$HHVM gen_infotabs_header.php ext_hhvm_infotabs.h $SOURCES ../base/builtin_functions.ext_hhvm.cpp
|
||||
|
||||
[ $VERBOSE -eq 1 ] && echo "Generating hphp/runtime/ext_hhvm/ext_hhvm_infotabs.cpp"
|
||||
$HHVM gen_infotabs.php ext_hhvm_infotabs.cpp . "" "" ""
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário