summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/webassembly/proxy_c.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/ports/webassembly/proxy_c.c b/ports/webassembly/proxy_c.c
index 9b32b6450..ade9d36de 100644
--- a/ports/webassembly/proxy_c.c
+++ b/ports/webassembly/proxy_c.c
@@ -289,14 +289,13 @@ void proxy_c_to_js_get_dict(uint32_t c_ref, uint32_t *out) {
static const mp_obj_fun_builtin_var_t resume_obj;
-EM_JS(void, js_then_resolve, (uint32_t * ret_value, uint32_t * resolve, uint32_t * reject), {
+EM_JS(void, js_then_resolve, (uint32_t * ret_value, uint32_t * resolve), {
const ret_value_js = proxy_convert_mp_to_js_obj_jsside(ret_value);
const resolve_js = proxy_convert_mp_to_js_obj_jsside(resolve);
- const reject_js = proxy_convert_mp_to_js_obj_jsside(reject);
resolve_js(ret_value_js);
});
-EM_JS(void, js_then_reject, (uint32_t * ret_value, uint32_t * resolve, uint32_t * reject), {
+EM_JS(void, js_then_reject, (uint32_t * ret_value, uint32_t * reject), {
// The ret_value object should be a Python exception. Convert it to a
// JavaScript PythonError and pass it as the reason to reject the promise.
let ret_value_js;
@@ -305,7 +304,6 @@ EM_JS(void, js_then_reject, (uint32_t * ret_value, uint32_t * resolve, uint32_t
} catch(error) {
ret_value_js = error;
}
- const resolve_js = proxy_convert_mp_to_js_obj_jsside(resolve);
const reject_js = proxy_convert_mp_to_js_obj_jsside(reject);
reject_js(ret_value_js);
});
@@ -344,30 +342,33 @@ static mp_obj_t proxy_resume_execute(mp_obj_t self_in, mp_obj_t send_value, mp_o
mp_obj_t ret_value;
mp_vm_return_kind_t ret_kind = mp_resume(self_in, send_value, throw_value, &ret_value);
- uint32_t out_resolve[PVN];
- uint32_t out_reject[PVN];
- proxy_convert_mp_to_js_obj_cside(resolve, out_resolve);
- proxy_convert_mp_to_js_obj_cside(reject, out_reject);
-
if (ret_kind == MP_VM_RETURN_NORMAL) {
uint32_t out_ret_value[PVN];
+ uint32_t out_resolve[PVN];
proxy_convert_mp_to_js_obj_cside(ret_value, out_ret_value);
- js_then_resolve(out_ret_value, out_resolve, out_reject);
+ proxy_convert_mp_to_js_obj_cside(resolve, out_resolve);
+ js_then_resolve(out_ret_value, out_resolve);
return mp_const_none;
} else if (ret_kind == MP_VM_RETURN_YIELD) {
// ret_value should be a JS thenable
mp_obj_t py_resume = mp_obj_new_bound_meth(MP_OBJ_FROM_PTR(&resume_obj), self_in);
int ref = mp_obj_jsproxy_get_ref(ret_value);
uint32_t out_py_resume[PVN];
+ uint32_t out_resolve[PVN];
+ uint32_t out_reject[PVN];
proxy_convert_mp_to_js_obj_cside(py_resume, out_py_resume);
+ proxy_convert_mp_to_js_obj_cside(resolve, out_resolve);
+ proxy_convert_mp_to_js_obj_cside(reject, out_reject);
uint32_t out[PVN];
js_then_continue(ref, out_py_resume, out_resolve, out_reject, out);
return proxy_convert_js_to_mp_obj_cside(out);
} else { // ret_kind == MP_VM_RETURN_EXCEPTION;
// Pass the exception through as an object to reject the promise (don't raise/throw it).
uint32_t out_ret_value[PVN];
+ uint32_t out_reject[PVN];
proxy_convert_mp_to_js_exc_cside(ret_value, out_ret_value);
- js_then_reject(out_ret_value, out_resolve, out_reject);
+ proxy_convert_mp_to_js_obj_cside(reject, out_reject);
+ js_then_reject(out_ret_value, out_reject);
return mp_const_none;
}
}