Skip to content

Commit

Permalink
Merge branch 'Tencent:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
ArnoChenFx authored Jan 22, 2024
2 parents fc69e84 + a506929 commit 84c8651
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 14 deletions.
8 changes: 0 additions & 8 deletions unity/Assets/core/upm/Runtime/Src/Default/Native/PuertsDLL.cs
Original file line number Diff line number Diff line change
Expand Up @@ -553,23 +553,15 @@ public static string GetStringFromResult(IntPtr resultInfo)
public static extern bool ResultIsBigInt(IntPtr resultInfo);

[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
#if UNITY_WEBGL && !UNITY_EDITOR
public static extern IntPtr GetBigIntFromResult(IntPtr resultInfo);
#else
public static extern long GetBigIntFromResult(IntPtr resultInfo);
#endif

public static long GetBigIntFromResultCheck(IntPtr resultInfo)
{
if (!ResultIsBigInt(resultInfo))
{
return 0;
}
#if UNITY_WEBGL && !UNITY_EDITOR
return Marshal.ReadInt64(GetBigIntFromResult(resultInfo));
#else
return GetBigIntFromResult(resultInfo);
#endif
}

[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,8 @@ void FTypeScriptDeclarationGenerator::NamespaceEnd(UObject* Obj, FStringBuffer&
void FTypeScriptDeclarationGenerator::WriteOutput(UObject* Obj, const FStringBuffer& Buff)
{
const UPackage* Pkg = GetPackage(Obj);
if (Pkg && !Obj->IsNative() && BlueprintTypeDeclInfoCache.Find(Pkg->GetFName()))
bool IsPluginBPClass = Pkg && !Obj->IsNative() && !Pkg->GetName().StartsWith(TEXT("/Game/"));
if (Pkg && !Obj->IsNative() && !IsPluginBPClass && BlueprintTypeDeclInfoCache.Find(Pkg->GetFName()))
{
FStringBuffer Temp;
Temp.Prefix = Output.Prefix;
Expand All @@ -521,7 +522,7 @@ void FTypeScriptDeclarationGenerator::WriteOutput(UObject* Obj, const FStringBuf
BlueprintTypeDeclInfoCache[Pkg->GetFName()].NameToDecl.Add(Obj->GetFName(), Temp.Buffer);
BlueprintTypeDeclInfoCache[Pkg->GetFName()].IsExist = true;
}
else if (Obj->IsNative())
else if (Obj->IsNative() || IsPluginBPClass)
{
NamespaceBegin(Obj, Output);
Output << Buff;
Expand Down
7 changes: 7 additions & 0 deletions unreal/Puerts/Source/JsEnv/Private/JSGeneratedClass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,13 @@ void UJSGeneratedClass::Restore(UClass* Class)
PP = &(*PP)->Next;
}
Class->ClearFunctionMapsCaches();
for (TObjectIterator<UClass> It; It; ++It)
{
if (It->IsChildOf(Class) && !It->HasAnyClassFlags(CLASS_Abstract))
{
It->ClearFunctionMapsCaches();
}
}
}

void UJSGeneratedClass::InitPropertiesFromCustomList(uint8* DataPtr, const uint8* DefaultDataPtr)
Expand Down
38 changes: 34 additions & 4 deletions unreal/Puerts/Source/JsEnv/Public/PesapiObject.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,45 @@ class Object
public:
Object(pesapi_env env, pesapi_value value)
{
env_holder = pesapi_create_env_ref(env);
value_holder = pesapi_create_value_ref(env, value);
if (!env || !value || IsNullOrUndefined(env, value))
{
env_holder = nullptr;
value_holder = nullptr;
}
else
{
env_holder = pesapi_create_env_ref(env);
value_holder = pesapi_create_value_ref(env, value);
}
}

Object(const Object& InOther)
{
env_holder = pesapi_duplicate_env_ref(InOther.env_holder);
value_holder = pesapi_duplicate_value_ref(InOther.value_holder);
if (!InOther.env_holder || !InOther.value_holder)
{
env_holder = nullptr;
value_holder = nullptr;
}
else
{
env_holder = pesapi_duplicate_env_ref(InOther.env_holder);
value_holder = pesapi_duplicate_value_ref(InOther.value_holder);
}
}

~Object()
{
if (!env_holder || !value_holder)
return;
pesapi_release_value_ref(value_holder);
pesapi_release_env_ref(env_holder);
}

template <typename T>
T Get(const char* key) const
{
if (!env_holder || !value_holder)
return {};
internal::AutoValueScope ValueScope(env_holder);
auto env = pesapi_get_env_from_ref(env_holder);
auto object = pesapi_get_value_from_ref(env, value_holder);
Expand All @@ -78,6 +98,8 @@ class Object
template <typename T>
void Set(const char* key, T val) const
{
if (!env_holder || !value_holder)
return;
internal::AutoValueScope ValueScope(env_holder);
auto env = pesapi_get_env_from_ref(env_holder);
auto object = pesapi_get_value_from_ref(env, value_holder);
Expand All @@ -87,6 +109,8 @@ class Object

bool IsValid() const
{
if (!env_holder || !value_holder)
return false;
internal::AutoValueScope ValueScope(env_holder);
auto env = pesapi_get_env_from_ref(env_holder);
auto val = pesapi_get_value_from_ref(env, value_holder);
Expand Down Expand Up @@ -115,6 +139,8 @@ class Function : public Object
template <typename... Args>
void Action(Args... cppArgs) const
{
if (!env_holder || !value_holder)
return;
internal::AutoValueScope ValueScope(env_holder);
auto env = pesapi_get_env_from_ref(env_holder);
auto object = pesapi_get_value_from_ref(env, value_holder);
Expand All @@ -130,6 +156,8 @@ class Function : public Object
template <typename Ret, typename... Args>
Ret Func(Args... cppArgs) const
{
if (!env_holder || !value_holder)
return {};
internal::AutoValueScope ValueScope(env_holder);
auto env = pesapi_get_env_from_ref(env_holder);
auto object = pesapi_get_value_from_ref(env, value_holder);
Expand All @@ -149,6 +177,8 @@ class Function : public Object

bool IsValid() const
{
if (!env_holder || !value_holder)
return false;
internal::AutoValueScope ValueScope(env_holder);
auto env = pesapi_get_env_from_ref(env_holder);
auto val = pesapi_get_value_from_ref(env, value_holder);
Expand Down

0 comments on commit 84c8651

Please sign in to comment.