Content-Length: 372822 | pFad | http://github.com/micropython/micropython/commit/50b43fec1a01710a08e1b56c1cf312877457bfa1

EE webassembly/proxy_c: Only proxy across resolve/reject funs when needed. · micropython/micropython@50b43fe · GitHub
Skip to content

Commit 50b43fe

Browse files
committed
webassembly/proxy_c: Only proxy across resolve/reject funs when needed.
To improve efficiency. Signed-off-by: Damien George <damien@micropython.org>
1 parent 9da63a3 commit 50b43fe

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

Diff for: ports/webassembly/proxy_c.c

+12-11
Original file line numberDiff line numberDiff line change
@@ -289,14 +289,13 @@ void proxy_c_to_js_get_dict(uint32_t c_ref, uint32_t *out) {
289289

290290
static const mp_obj_fun_builtin_var_t resume_obj;
291291

292-
EM_JS(void, js_then_resolve, (uint32_t * ret_value, uint32_t * resolve, uint32_t * reject), {
292+
EM_JS(void, js_then_resolve, (uint32_t * ret_value, uint32_t * resolve), {
293293
const ret_value_js = proxy_convert_mp_to_js_obj_jsside(ret_value);
294294
const resolve_js = proxy_convert_mp_to_js_obj_jsside(resolve);
295-
const reject_js = proxy_convert_mp_to_js_obj_jsside(reject);
296295
resolve_js(ret_value_js);
297296
});
298297

299-
EM_JS(void, js_then_reject, (uint32_t * ret_value, uint32_t * resolve, uint32_t * reject), {
298+
EM_JS(void, js_then_reject, (uint32_t * ret_value, uint32_t * reject), {
300299
// The ret_value object should be a Python exception. Convert it to a
301300
// JavaScript PythonError and pass it as the reason to reject the promise.
302301
let ret_value_js;
@@ -305,7 +304,6 @@ EM_JS(void, js_then_reject, (uint32_t * ret_value, uint32_t * resolve, uint32_t
305304
} catch(error) {
306305
ret_value_js = error;
307306
}
308-
const resolve_js = proxy_convert_mp_to_js_obj_jsside(resolve);
309307
const reject_js = proxy_convert_mp_to_js_obj_jsside(reject);
310308
reject_js(ret_value_js);
311309
});
@@ -344,30 +342,33 @@ static mp_obj_t proxy_resume_execute(mp_obj_t self_in, mp_obj_t send_value, mp_o
344342
mp_obj_t ret_value;
345343
mp_vm_return_kind_t ret_kind = mp_resume(self_in, send_value, throw_value, &ret_value);
346344

347-
uint32_t out_resolve[PVN];
348-
uint32_t out_reject[PVN];
349-
proxy_convert_mp_to_js_obj_cside(resolve, out_resolve);
350-
proxy_convert_mp_to_js_obj_cside(reject, out_reject);
351-
352345
if (ret_kind == MP_VM_RETURN_NORMAL) {
353346
uint32_t out_ret_value[PVN];
347+
uint32_t out_resolve[PVN];
354348
proxy_convert_mp_to_js_obj_cside(ret_value, out_ret_value);
355-
js_then_resolve(out_ret_value, out_resolve, out_reject);
349+
proxy_convert_mp_to_js_obj_cside(resolve, out_resolve);
350+
js_then_resolve(out_ret_value, out_resolve);
356351
return mp_const_none;
357352
} else if (ret_kind == MP_VM_RETURN_YIELD) {
358353
// ret_value should be a JS thenable
359354
mp_obj_t py_resume = mp_obj_new_bound_meth(MP_OBJ_FROM_PTR(&resume_obj), self_in);
360355
int ref = mp_obj_jsproxy_get_ref(ret_value);
361356
uint32_t out_py_resume[PVN];
357+
uint32_t out_resolve[PVN];
358+
uint32_t out_reject[PVN];
362359
proxy_convert_mp_to_js_obj_cside(py_resume, out_py_resume);
360+
proxy_convert_mp_to_js_obj_cside(resolve, out_resolve);
361+
proxy_convert_mp_to_js_obj_cside(reject, out_reject);
363362
uint32_t out[PVN];
364363
js_then_continue(ref, out_py_resume, out_resolve, out_reject, out);
365364
return proxy_convert_js_to_mp_obj_cside(out);
366365
} else { // ret_kind == MP_VM_RETURN_EXCEPTION;
367366
// Pass the exception through as an object to reject the promise (don't raise/throw it).
368367
uint32_t out_ret_value[PVN];
368+
uint32_t out_reject[PVN];
369369
proxy_convert_mp_to_js_exc_cside(ret_value, out_ret_value);
370-
js_then_reject(out_ret_value, out_resolve, out_reject);
370+
proxy_convert_mp_to_js_obj_cside(reject, out_reject);
371+
js_then_reject(out_ret_value, out_reject);
371372
return mp_const_none;
372373
}
373374
}

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/micropython/micropython/commit/50b43fec1a01710a08e1b56c1cf312877457bfa1

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy