From 813f0c1cb9460502d0d8de24106f7ee8cc0723ee Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 21 Jul 2025 23:40:47 +1000 Subject: [PATCH] webassembly/objjsproxy: Implement equality for JsProxy objects. Signed-off-by: Damien George --- ports/webassembly/mpconfigport.h | 1 + ports/webassembly/objjsproxy.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ports/webassembly/mpconfigport.h b/ports/webassembly/mpconfigport.h index eea6f02a0..544e76f80 100644 --- a/ports/webassembly/mpconfigport.h +++ b/ports/webassembly/mpconfigport.h @@ -54,6 +54,7 @@ #define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_DOUBLE) #define MICROPY_USE_INTERNAL_ERRNO (1) #define MICROPY_USE_INTERNAL_PRINTF (0) +#define MICROPY_PY_BOUND_METHOD_FULL_EQUALITY_CHECK (1) #define MICROPY_EPOCH_IS_1970 (1) #define MICROPY_PY_ASYNCIO_TASK_QUEUE_PUSH_CALLBACK (1) diff --git a/ports/webassembly/objjsproxy.c b/ports/webassembly/objjsproxy.c index 28fef9014..45f329d7e 100644 --- a/ports/webassembly/objjsproxy.c +++ b/ports/webassembly/objjsproxy.c @@ -266,6 +266,23 @@ static mp_obj_t jsproxy_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const } } +static mp_obj_t jsproxy_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) { + if (!mp_obj_is_type(rhs_in, &mp_type_jsproxy)) { + return MP_OBJ_NULL; // op not supported + } + + mp_obj_jsproxy_t *lhs = MP_OBJ_TO_PTR(lhs_in); + mp_obj_jsproxy_t *rhs = MP_OBJ_TO_PTR(rhs_in); + + switch (op) { + case MP_BINARY_OP_EQUAL: + return mp_obj_new_bool(lhs->ref == rhs->ref); + + default: + return MP_OBJ_NULL; // op not supported + } +} + EM_JS(void, proxy_js_free_obj, (int js_ref), { if (js_ref >= PROXY_JS_REF_NUM_STATIC) { proxy_js_ref[js_ref] = undefined; @@ -566,6 +583,7 @@ MP_DEFINE_CONST_OBJ_TYPE( MP_TYPE_FLAG_ITER_IS_GETITER, print, jsproxy_print, call, jsproxy_call, + binary_op, jsproxy_binary_op, attr, mp_obj_jsproxy_attr, subscr, jsproxy_subscr, iter, jsproxy_getiter