【深入理解 quickjs 系列】02. QuickJS 是如何避免死循环

554 阅读1分钟

QuickJS 是如何避免死循环的?

造成死循环的场景

在引擎内部对外暴露的接口,类似 instanceOf / for...in / getter / construction / prototypeOf 这些函数会造成死循环。

内部在 JS_CallInternal 时也可能会造成死循环,所以需要在 op_code 可能会发生死循环的场景下会去判断,goto/if_true/if_false/

如何解决

在内部执行时会做一个计数,超过 JS_INTERRUPT_COUNTER_INIT 10000 次后会执行外部的通过 JS_SetInterruptHandler 传入的 interrupt_handler, 通过 interrupt_handler 的返回值来判断是否需要抛出异常

image.png