Skip to content

Commit e33a0f4

Browse files
WebReflectiondpgeorge
authored andcommitted
webassembly/objpyproxy: Avoid throwing on symbol or iterator has-check.
JavaScript code uses "Symbol in object" to brand check its own proxies, and such checks should also work on the Python side. Signed-off-by: Andrea Giammarchi <[email protected]>
1 parent 16f9d7f commit e33a0f4

File tree

3 files changed

+10
-0
lines changed

3 files changed

+10
-0
lines changed

ports/webassembly/objpyproxy.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ const py_proxy_handler = {
148148
};
149149
},
150150
has(target, prop) {
151+
// avoid throwing on `Symbol() in proxy` checks
152+
if (typeof prop !== "string") {
153+
// returns true only on iterator because other
154+
// symbols are not considered in the `get` trap
155+
return prop === Symbol.iterator;
156+
}
151157
return Module.ccall(
152158
"proxy_c_to_js_has_attr",
153159
"number",

tests/ports/webassembly/py_proxy_has.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ x = []
99
const x = mp.globals.get("x");
1010
console.log("no_exist" in x);
1111
console.log("sort" in x);
12+
console.log(Symbol.toStringTag in x);
13+
console.log(Symbol.iterator in x);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
false
22
true
3+
false
4+
true

0 commit comments

Comments
 (0)