mirror of
https://github.com/micropython/micropython.git
synced 2025-08-25 12:00:40 +02:00
webassembly/api: Allow specifying the pystack size.
This allows increasing the Python recursion depth if needed. Also increase the default to 2k words. There is enough RAM in the browser/node context for this to be increased, and having a larger pystack allows more complex code to run without hitting the limit. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Options:
|
// Options:
|
||||||
|
// - pystack: size in words of the MicroPython Python stack.
|
||||||
// - heapsize: size in bytes of the MicroPython GC heap.
|
// - heapsize: size in bytes of the MicroPython GC heap.
|
||||||
// - url: location to load `micropython.mjs`.
|
// - url: location to load `micropython.mjs`.
|
||||||
// - stdin: function to return input characters.
|
// - stdin: function to return input characters.
|
||||||
@@ -34,10 +35,11 @@
|
|||||||
// - stderr: same behaviour as stdout but for error output.
|
// - stderr: same behaviour as stdout but for error output.
|
||||||
// - linebuffer: whether to buffer line-by-line to stdout/stderr.
|
// - linebuffer: whether to buffer line-by-line to stdout/stderr.
|
||||||
export async function loadMicroPython(options) {
|
export async function loadMicroPython(options) {
|
||||||
const { heapsize, url, stdin, stdout, stderr, linebuffer } = Object.assign(
|
const { pystack, heapsize, url, stdin, stdout, stderr, linebuffer } =
|
||||||
{ heapsize: 1024 * 1024, linebuffer: true },
|
Object.assign(
|
||||||
options,
|
{ pystack: 2 * 1024, heapsize: 1024 * 1024, linebuffer: true },
|
||||||
);
|
options,
|
||||||
|
);
|
||||||
let Module = {};
|
let Module = {};
|
||||||
Module.locateFile = (path, scriptDirectory) =>
|
Module.locateFile = (path, scriptDirectory) =>
|
||||||
url || scriptDirectory + path;
|
url || scriptDirectory + path;
|
||||||
@@ -96,7 +98,12 @@ export async function loadMicroPython(options) {
|
|||||||
);
|
);
|
||||||
return proxy_convert_mp_to_js_obj_jsside_with_free(value);
|
return proxy_convert_mp_to_js_obj_jsside_with_free(value);
|
||||||
};
|
};
|
||||||
Module.ccall("mp_js_init", "null", ["number"], [heapsize]);
|
Module.ccall(
|
||||||
|
"mp_js_init",
|
||||||
|
"null",
|
||||||
|
["number", "number"],
|
||||||
|
[pystack, heapsize],
|
||||||
|
);
|
||||||
Module.ccall("proxy_c_init", "null", [], []);
|
Module.ccall("proxy_c_init", "null", [], []);
|
||||||
return {
|
return {
|
||||||
_module: Module,
|
_module: Module,
|
||||||
|
@@ -66,7 +66,12 @@ void external_call_depth_dec(void) {
|
|||||||
--external_call_depth;
|
--external_call_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mp_js_init(int heap_size) {
|
void mp_js_init(int pystack_size, int heap_size) {
|
||||||
|
#if MICROPY_ENABLE_PYSTACK
|
||||||
|
mp_obj_t *pystack = (mp_obj_t *)malloc(pystack_size * sizeof(mp_obj_t));
|
||||||
|
mp_pystack_init(pystack, pystack + pystack_size);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MICROPY_ENABLE_GC
|
#if MICROPY_ENABLE_GC
|
||||||
char *heap = (char *)malloc(heap_size * sizeof(char));
|
char *heap = (char *)malloc(heap_size * sizeof(char));
|
||||||
gc_init(heap, heap + heap_size);
|
gc_init(heap, heap + heap_size);
|
||||||
@@ -80,11 +85,6 @@ void mp_js_init(int heap_size) {
|
|||||||
MP_STATE_MEM(gc_alloc_threshold) = 16 * 1024 / MICROPY_BYTES_PER_GC_BLOCK;
|
MP_STATE_MEM(gc_alloc_threshold) = 16 * 1024 / MICROPY_BYTES_PER_GC_BLOCK;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MICROPY_ENABLE_PYSTACK
|
|
||||||
static mp_obj_t pystack[1024];
|
|
||||||
mp_pystack_init(pystack, &pystack[MP_ARRAY_SIZE(pystack)]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mp_init();
|
mp_init();
|
||||||
|
|
||||||
#if MICROPY_VFS_POSIX
|
#if MICROPY_VFS_POSIX
|
||||||
|
@@ -17,11 +17,11 @@
|
|||||||
135109888
|
135109888
|
||||||
134978800
|
134978800
|
||||||
134716640
|
134716640
|
||||||
135216848
|
135216784
|
||||||
136217216
|
136217152
|
||||||
138218032
|
138217840
|
||||||
142219616
|
142219296
|
||||||
150222864
|
150222224
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
4
|
4
|
||||||
|
Reference in New Issue
Block a user