逐行执行Lua脚本时检测代码块

时间:2011-03-22 23:19:18

标签: c lua block resume

这可能听起来像一个愚蠢的问题,但我无法看到这个特定问题的任何地方。基本上是:

我想逐行执行Lua脚本,主要是为了能够随时随地暂停/恢复执行。我做的很简单:用luaL_loadbuffer()加载一个块然后发出一个lua_pcall()。

事情是......我怎样才能正确检测Lua块以便原子地执行它们?

例如,假设脚本中有一个函数 - 通过上述方法逐行执行文件,我似乎无法正确识别函数,因此其内容已加载并逐一打电话。

我可以想象,一个解决方案是手动处理一个堆栈,我可以在脚本中按下控制关键字(“函数”,“if”,“do”等)及其对应的“end”子句我找到了嵌套块。一旦我按下最后的“结束”,我就会调用整个块,但这听起来很糟糕。当然必须有更好的方法来做到这一点。

希望它有道理,谢谢!

2 个答案:

答案 0 :(得分:1)

使用lua_sethook()

请注意,您可能希望尝试使用所需的确切挂钩调用粒度。我建议改为执行字节码指令块。一个非常长的行可能包含许多指令。

答案 1 :(得分:1)

请查看Lua coroutines以实现脚本游戏实体的功能。我的想法是yield你提到的sleep()和waitforevent()例程中的协程,然后是resume之后(例如在超时或事件发生之后)。