Closed chexiongsheng closed 10 months ago
比较奇怪的是上面代码和抛异常完全不同,应该是quickjs的bug:
应该是我们处理不当导致:
equire一个直接抛异常的脚本之所以能正常,是因为在cjs脚本并未直接执行,只是生成一个函数,这并不会导致JS_Eval返回异常(JS_EXCEPTION)。
gc_list不为空可以通过修改TryCatch::handleException解决。
void TryCatch::handleException() {
JS_FreeValueRT(isolate_->runtime_, catched_);
catched_ = JS_GetException(isolate_->current_context_->context_);
}
但是语法错误仍然往下执行是不符合预期的。
这问题主要的直接原因还是我们实现不当。 也发现了qjs和v8的差异:开头那js代码在v8不会报语法错误,不知道是v8、qjs、还是es委员会的问题
如下代码被require可以重现