| 1338 | } |
| 1339 | |
| 1340 | void tsn_fini(tsn_vm** vm) { |
| 1341 | if (!vm) { |
| 1342 | return; |
| 1343 | } |
| 1344 | |
| 1345 | auto* tsn_vm_helpers = tsn_get_vm_helpers(*vm); |
| 1346 | JS_FreeValue(*vm, tsn_vm_helpers->function_prototype); |
| 1347 | auto* runtime = JS_GetRuntime(*vm); |
| 1348 | js_free(*vm, tsn_vm_helpers); |
| 1349 | JS_FreeContext(*vm); |
| 1350 | JS_RunGC(runtime); |
| 1351 | JS_FreeRuntime(runtime); |
| 1352 | *vm = nullptr; |
| 1353 | } |
| 1354 | |
| 1355 | js_force_inline tsn_closure* tsn_get_closure_from_func(JSValueConst funcObject) { |
| 1356 | return reinterpret_cast<tsn_closure*>(JS_GetOpaque(funcObject, getTSNFunctionClassID())); |
no test coverage detected