本文整理汇总了C++中Handle::GetIdentityHash方法的典型用法代码示例。如果您正苦于以下问题:C++ Handle::GetIdentityHash方法的具体用法?C++ Handle::GetIdentityHash怎么用?C++ Handle::GetIdentityHash使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Handle
的用法示例。
在下文中一共展示了Handle::GetIdentityHash方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: add
void SvMap::add(Handle<Object> object, long ptr) {
objects.insert(
pair<int, SimpleObjectData*>(
object->GetIdentityHash(),
new SimpleObjectData(object, ptr)
)
);
}
示例2: CallJavaMethod
//.........这里部分代码省略.........
mi = MethodCache::ResolveMethodSignature(className, methodName, args, isStatic);
if (mi.mid == nullptr)
{
DEBUG_WRITE("Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d", className.c_str(), methodName.c_str(), isStatic, isSuper);
return;
}
}
else
{
MetadataNode* callerNode = MetadataNode::GetNodeFromHandle(caller);
const string callerClassName = callerNode->GetName();
DEBUG_WRITE("Resolving method on caller class: %s.%s on className %s", callerClassName.c_str(), methodName.c_str(), className.c_str());
mi = MethodCache::ResolveMethodSignature(callerClassName, methodName, args, isStatic);
if (mi.mid == nullptr)
{
DEBUG_WRITE("Cannot resolve class=%s, method=%s, isStatic=%d, isSuper=%d, callerClass=%s", className.c_str(), methodName.c_str(), isStatic, isSuper, callerClassName.c_str());
return;
}
}
clazz = mi.clazz;
mid = mi.mid;
sig = mi.signature;
}
if (!isStatic)
{
DEBUG_WRITE("CallJavaMethod called %s.%s. Instance id: %d, isSuper=%d", className.c_str(), methodName.c_str(), caller.IsEmpty() ? -42 : caller->GetIdentityHash(), isSuper);
}
else
{
DEBUG_WRITE("CallJavaMethod called %s.%s. static method", className.c_str(), methodName.c_str());
}
JsArgConverter argConverter(args, false, sig);
if (!argConverter.IsValid())
{
JsArgConverter::Error err = argConverter.GetError();
ExceptionUtil::GetInstance()->ThrowExceptionToJs(err.msg);
return;
}
auto isolate = Isolate::GetCurrent();
jweak callerJavaObject;
jvalue* javaArgs = argConverter.ToArgs();
if (!isStatic)
{
callerJavaObject = objectManager->GetJavaObjectByJsObject(caller);
if(callerJavaObject == nullptr)
{
stringstream ss;
ss << "No java object found on which to call \"" << methodName << "\" method. It is possible your Javascript object is not linked with the corresponding Java class. Try passing context(this) to the constructor function.";
string exceptionMessage = ss.str();
isolate->ThrowException(v8::Exception::ReferenceError(ConvertToV8String(exceptionMessage)));
return;
}
示例3:
Handle<Object> MetadataNode::GetImplementationObject(const Handle<Object>& object)
{
DEBUG_WRITE("GetImplementationObject called on object:%d", object->GetIdentityHash());
auto target = object;
Handle<Value> currentPrototype = target;
Handle<Object> implementationObject;
implementationObject = object->GetHiddenValue(ConvertToV8String("t::implObj")).As<Object>();
if (!implementationObject.IsEmpty())
{
return implementationObject;
}
if (object->HasOwnProperty(V8StringConstants::GetIsPrototypeImplementationObject()))
{
auto v8Prototype = V8StringConstants::GetPrototype();
if (!object->HasOwnProperty(v8Prototype))
{
return Handle<Object>();
}
DEBUG_WRITE("GetImplementationObject returning the prototype of the object :%d", object->GetIdentityHash());
return object->Get(v8Prototype).As<Object>();
}
auto obj = V8GetHiddenValue(object, "t::ActivityImplementationObject").As<Object>();
if (!obj.IsEmpty())
{
DEBUG_WRITE("GetImplementationObject returning ActivityImplementationObject property on object: %d", object->GetIdentityHash());
return obj;
}
Handle<Value> lastPrototype;
bool prototypeCycleDetected = false;
while (implementationObject.IsEmpty())
{
//
currentPrototype = currentPrototype.As<Object>()->GetPrototype();
if (currentPrototype->IsNull())
break;
//DEBUG_WRITE("GetImplementationObject currentPrototypeObject:%d", (currentPrototype.IsEmpty() || currentPrototype.As<Object>().IsEmpty()) ? -1 : currentPrototype.As<Object>()->GetIdentityHash());
//DEBUG_WRITE("GetImplementationObject lastPrototypeObject:%d", (lastPrototype.IsEmpty() || lastPrototype.As<Object>().IsEmpty()) ? -1 : lastPrototype.As<Object>()->GetIdentityHash());
if (currentPrototype == lastPrototype)
{
auto abovePrototype = currentPrototype.As<Object>()->GetPrototype();
prototypeCycleDetected = abovePrototype == currentPrototype;
}
if (currentPrototype.IsEmpty() || prototypeCycleDetected)
{
//Handle<Value> abovePrototype = currentPrototype.As<Object>()->GetPrototype();
//DEBUG_WRITE("GetImplementationObject not found since cycle parents reached abovePrototype:%d", (abovePrototype.IsEmpty() || abovePrototype.As<Object>().IsEmpty()) ? -1 : abovePrototype.As<Object>()->GetIdentityHash());
return Handle<Object>();
}
else
{
auto value = currentPrototype.As<Object>()->GetHiddenValue(V8StringConstants::GetClassImplementationObject());
if (!value.IsEmpty())
{
implementationObject = currentPrototype.As<Object>();
}
}
lastPrototype = currentPrototype;
}
return implementationObject;
}
示例4: env
Handle<Value> NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const Handle<Object>& jsObject, const string& methodName, jobjectArray args, TryCatch& tc)
{
SET_PROFILER_FRAME();
JEnv env(_env);
Handle<Value> result;
auto isolate = Isolate::GetCurrent();
auto exceptionUtil = ExceptionUtil::GetInstance();
//auto method = MetadataNode::GetPropertyFromImplementationObject(jsObject, jsMethodName);
auto method = jsObject->Get(ConvertToV8String(methodName));
if (method.IsEmpty() || method->IsUndefined())
{
stringstream ss;
ss << "Cannot find method '" << methodName << "' implementation";
ExceptionUtil::GetInstance()->ThrowExceptionToJs(ss.str());
result = Undefined(isolate);
}
else if (!method->IsFunction())
{
stringstream ss;
ss << "Property '" << methodName << "' is not a function";
ExceptionUtil::GetInstance()->ThrowExceptionToJs(ss.str());
result = Undefined(isolate);
}
else
{
EscapableHandleScope handleScope(isolate);
auto jsMethod = method.As<Function>();
auto jsArgs = ArgConverter::ConvertJavaArgsToJsArgs(args);
int argc = jsArgs->Length();
Handle<Value> arguments[argc];
for (int i = 0; i < argc; i++)
{
arguments[i] = jsArgs->Get(i);
}
DEBUG_WRITE("implementationObject->GetIdentityHash()=%d", jsObject->GetIdentityHash());
Local<Value> jsResult;
{
SET_PROFILER_FRAME();
jsResult = jsMethod->Call(jsObject, argc, argc == 0 ? nullptr : arguments);
}
//TODO: if javaResult is a pure js object create a java object that represents this object in java land
if (tc.HasCaught())
{
jsResult = Undefined(isolate);
}
result = handleScope.Escape(jsResult);
}
return result;
}