summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2025-07-21 23:40:47 +1000
committerDamien George <damien@micropython.org>2025-07-31 11:40:03 +1000
commit813f0c1cb9460502d0d8de24106f7ee8cc0723ee (patch)
tree0baa896bda3a65bca15d9533282d5ca27270a3ca
parent241ee163c0c8a33267c699af59492641d0770f30 (diff)
webassembly/objjsproxy: Implement equality for JsProxy objects.
Signed-off-by: Damien George <damien@micropython.org>
-rw-r--r--ports/webassembly/mpconfigport.h1
-rw-r--r--ports/webassembly/objjsproxy.c18
2 files changed, 19 insertions, 0 deletions
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