Skip to content

Commit

Permalink
Fix some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
hoodmane committed Oct 21, 2023
1 parent cfe06e5 commit a02466b
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 19 deletions.
22 changes: 11 additions & 11 deletions src/core/jslib.c
Expand Up @@ -55,25 +55,25 @@ EM_JS_BOOL(bool, JsvArray_Check, (JsVal obj), {
return false;
});

EM_JS_VAL(JsVal, JsvArray_Get, (JsVal array, int idx), {
return nullToUndefined(array[idx]);
EM_JS_VAL(JsVal, JsvArray_Get, (JsVal arr, int idx), {
return nullToUndefined(arr[idx]);
});

EM_JS_NUM(errcode, JsvArray_Set, (JsVal array, int idx, JsVal val), {
obj[idx] = val;
EM_JS_NUM(errcode, JsvArray_Set, (JsVal arr, int idx, JsVal val), {
arr[idx] = val;
});

EM_JS_VAL(JsVal, JsvArray_Delete, (JsVal array, int idx), {
EM_JS_VAL(JsVal, JsvArray_Delete, (JsVal arr, int idx), {
// Weird edge case: allow deleting an empty entry, but we raise a key error if
// access is attempted.
if (idx < 0 || idx >= obj.length) {
if (idx < 0 || idx >= arr.length) {
return ERROR_NUM;
}
return array.splice(idx, 1)[0];
return arr.splice(idx, 1)[0];
});

EM_JS(int, JsvArray_Push, (JsVal array, JsVal obj), {
return array.push(obj);
EM_JS(int, JsvArray_Push, (JsVal arr, JsVal obj), {
return arr.push(obj);
});

// clang-format off
Expand All @@ -82,8 +82,8 @@ EM_JS(void, JsvArray_Extend, (JsVal arr, JsVal vals), {
});
// clang-format on

EM_JS_NUM(JsVal, JsvArray_ShallowCopy, (JsVal obj), {
return ("slice" in obj) ? obj.slice() : Array.from(obj);
EM_JS_NUM(JsVal, JsvArray_ShallowCopy, (JsVal arr), {
return ("slice" in arr) ? arr.slice() : Array.from(arr);
})

// clang-format off
Expand Down
11 changes: 5 additions & 6 deletions src/core/pyproxy.ts
Expand Up @@ -727,15 +727,15 @@ export class PyProxy {
} = {}): any {
let ptrobj = _getPtr(this);
let idresult;
let proxies_id;
let proxies;
let dict_converter_id = 0;
let default_converter_id = 0;
if (!create_pyproxies) {
proxies_id = 0;
proxies = null;
} else if (pyproxies) {
proxies_id = Hiwire.new_value(pyproxies);
proxies = pyproxies;
} else {
proxies_id = Hiwire.new_value([]);
proxies = [];
}
if (dict_converter) {
dict_converter_id = Hiwire.new_value(dict_converter);
Expand All @@ -748,15 +748,14 @@ export class PyProxy {
idresult = _python2js_custom(
ptrobj,
depth,
proxies_id,
proxies,
dict_converter_id,
default_converter_id,
);
Py_EXIT();
} catch (e) {
API.fatal_error(e);
} finally {
Hiwire.decref(proxies_id);
Hiwire.decref(dict_converter_id);
Hiwire.decref(default_converter_id);
}
Expand Down
1 change: 1 addition & 0 deletions src/core/python2js.c
Expand Up @@ -227,6 +227,7 @@ _python2js_sequence(ConversionContext context, PyObject* x)
success = true;
finally:
Py_CLEAR(pyitem);
hiwire_CLEAR(jsarray_ref);
hiwire_CLEAR(jsitem);
return success ? hiwire_new(jsarray) : NULL;
}
Expand Down
2 changes: 1 addition & 1 deletion src/js/types.ts
Expand Up @@ -82,7 +82,7 @@ declare global {
export const _python2js_custom: (
obj: number,
depth: number,
proxies: number,
proxies: PyProxy[] | null,
dict_converter: number,
default_converter: number,
) => number;
Expand Down
9 changes: 8 additions & 1 deletion src/tests/test_jsproxy.py
Expand Up @@ -252,7 +252,7 @@ def test_jsproxy_implicit_iter(selenium):
) == [1, 2, 3]


def test_jsproxy_call(selenium):
def test_jsproxy_call1(selenium):
assert (
selenium.run_js(
"""
Expand All @@ -271,6 +271,13 @@ def test_jsproxy_call(selenium):
== list(range(10))
)

@run_in_pyodide
def test_jsproxy_call2(selenium):
from pyodide.code import run_js

f = run_js("(function(){ return arguments.length; })")
assert [f(*range(n)) for n in range(10)] == list(range(10))


def test_jsproxy_call_kwargs(selenium):
assert (
Expand Down

0 comments on commit a02466b

Please sign in to comment.