From d64d5d685d86b38dda8a314b7d1404633e26b346 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 30 Sep 2022 10:23:16 +0200 Subject: vm: maintain export symbol tables per program Instead of having one global export table per VM instance maintain one table per program instance. This is required to avoid clobbering the export list in case `import` using code is loaded at runtime through `require()`, `loadfile()` etc. Signed-off-by: Jo-Philipp Wich --- types.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'types.c') diff --git a/types.c b/types.c index 5274d23..1a430ac 100644 --- a/types.c +++ b/types.c @@ -203,6 +203,9 @@ ucv_gc_mark(uc_value_t *uv) for (i = 0; i < program->sources.count; i++) ucv_gc_mark(&program->sources.entries[i]->header); + for (i = 0; i < program->exports.count; i++) + ucv_gc_mark(&program->exports.entries[i]->header); + break; default: @@ -297,7 +300,11 @@ ucv_free(uc_value_t *uv, bool retain) for (i = 0; i < program->sources.count; i++) ucv_put_value(&program->sources.entries[i]->header, retain); + for (i = 0; i < program->exports.count; i++) + ucv_put_value(&program->exports.entries[i]->header, retain); + uc_vector_clear(&program->sources); + uc_vector_clear(&program->exports); break; case UC_SOURCE: @@ -2227,9 +2234,6 @@ ucv_gc_common(uc_vm_t *vm, bool final) for (i = 0; i < vm->restypes.count; i++) ucv_gc_mark(vm->restypes.entries[i]->proto); - - for (i = 0; i < vm->exports.count; i++) - ucv_gc_mark(vm->exports.entries[i]->value); } /* unref unreachable objects */ -- cgit v1.2.3