You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//Class defined
[GCOptimize]
public class TestClass
{
}
////////
//C# function
public void TestStackOverflow(TestClass test)
{
}
//Lua Function
TestStackOverflow(nil)
使用GCOptimize标记或者配置上GCOptimizeConfig。那么Xlua会在WrapPusher.cs文件中生成一些Get方法来避免反射的方式获取或者转换lua的值到C#中,但生成的代码有bug,可能会导致死循环。
从图中的模版可以看到,当type不为UserData、Table时,就会走到else分支中从objectCasters.GetCaster继续获取caster然后调用。但是此时获取到的caster还是当前函数。
因为WrapPusher中的Init已经使用translator.RegisterCaster把该类型的caster注册进去了。
所以,对于nil等其他type,这里会进入死循环。
为了确保版本的问题,下面的图直接截github上LuaWrapPusher.tpl.txt的图。

这里没有单独写个例子上传。复现方式很简单。使用GCOptimize标记一个类或者struct。 比如:
如果前面的TestClass有被生成过代码,那么lua中传递TestClass类型参数为nil,则会死循环
The text was updated successfully, but these errors were encountered: