// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#include "ClearScriptV8Native.h"
//-----------------------------------------------------------------------------
// HostObjectUtil implementation
//-----------------------------------------------------------------------------
void* HostObjectUtil::AddRef(void* pvObject)
{
return V8_SPLIT_PROXY_MANAGED_INVOKE_NOTHROW(void*, AddRefHostObject, pvObject);
}
//-----------------------------------------------------------------------------
void HostObjectUtil::Release(void* pvObject)
{
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID_NOTHROW(ReleaseHostObject, pvObject);
}
//-----------------------------------------------------------------------------
HostObjectUtil::Invocability HostObjectUtil::GetInvocability(void* pvObject)
{
return V8_SPLIT_PROXY_MANAGED_INVOKE(Invocability, GetHostObjectInvocability, pvObject);
}
//-----------------------------------------------------------------------------
V8Value HostObjectUtil::GetProperty(void* pvObject, const StdString& name, bool& isCacheable)
{
V8Value value(V8Value::Nonexistent);
StdBool tempIsCacheable;
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectNamedProperty, pvObject, name, value, tempIsCacheable);
isCacheable = (tempIsCacheable != 0);
return value;
}
//-----------------------------------------------------------------------------
void HostObjectUtil::SetProperty(void* pvObject, const StdString& name, const V8Value& value)
{
V8Value::Decoded decodedValue;
value.Decode(decodedValue);
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetHostObjectNamedProperty, pvObject, name, decodedValue);
}
//-----------------------------------------------------------------------------
bool HostObjectUtil::DeleteProperty(void* pvObject, const StdString& name)
{
return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteHostObjectNamedProperty, pvObject, name);
}
//-----------------------------------------------------------------------------
void HostObjectUtil::GetPropertyNames(void* pvObject, std::vector& names)
{
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectPropertyNames, pvObject, names);
}
//-----------------------------------------------------------------------------
V8Value HostObjectUtil::GetProperty(void* pvObject, int32_t index)
{
V8Value value(V8Value::Nonexistent);
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectIndexedProperty, pvObject, index, value);
return value;
}
//-----------------------------------------------------------------------------
void HostObjectUtil::SetProperty(void* pvObject, int32_t index, const V8Value& value)
{
V8Value::Decoded decodedValue;
value.Decode(decodedValue);
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(SetHostObjectIndexedProperty, pvObject, index, decodedValue);
}
//-----------------------------------------------------------------------------
bool HostObjectUtil::DeleteProperty(void* pvObject, int32_t index)
{
return V8_SPLIT_PROXY_MANAGED_INVOKE(StdBool, DeleteHostObjectIndexedProperty, pvObject, index);
}
//-----------------------------------------------------------------------------
void HostObjectUtil::GetPropertyIndices(void* pvObject, std::vector& indices)
{
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(GetHostObjectPropertyIndices, pvObject, indices);
}
//-----------------------------------------------------------------------------
V8Value HostObjectUtil::Invoke(void* pvObject, bool asConstructor, size_t argCount, const V8Value* pArgs)
{
V8Value result(V8Value::Nonexistent);
if (argCount < 1)
{
V8_SPLIT_PROXY_MANAGED_INVOKE_VOID(InvokeHostObject, pvObject, asConstructor, 0, nullptr, result);
}
else if (argCount