Open qwenger opened 2 years ago
The check_memory.py
script does not notice any issue (other than the spurious ones from threading, which also show up in master).
One question is also whether we would like to expose the JS Internal(Python)Error
via the JS(Python)Exception
on the Python side, e.g. as an Object bound to JS(Python)Exception.raw
.
Or better yet, make JSException subclass of Object and directly encapsulate the JS error inside it?
Fix #63, fix #66.
Supersedes #67. As proposed over there, this stores Python exception into a JS object rather than globally.
On the QuickJS side, the object uses as an opaque pointer to store the Python exception. On the JS side, the object has constructor
InternalPythonError
that extendsInternalError
and has themessage
property set toPython call failed
. On the Python side, the exception type isJSPythonException
, a subclass ofJSException
. Its__cause__
is set to the exception originally triggered, which is a pretty clean way to keep track of it.The code has a few "not so nice" areas, but for which I did not find anything nicer:
InternalPythonError
) has to do a special check of the thread state, because it is both called from insideprepare...end_call_js
andprepare...end_call_python
.InternalPythonError
was needed, because I did not see a way to use the parent constructor (InternalError
).InternalError
is first raised, then catched directly and itsstack
property transferred over to theInternalPythonError
.