From d3555b4af698b791824350cd3c93f9a109fe9452 Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 3 Jun 2022 20:35:38 +0300 Subject: [PATCH] =?UTF-8?q?fix=20=E2=80=A2Import=20when=20execution=20erro?= =?UTF-8?q?rs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/fns.c | 2 +- src/builtins/sysfn.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/builtins/fns.c b/src/builtins/fns.c index 8a3364fa..2226c66a 100644 --- a/src/builtins/fns.c +++ b/src/builtins/fns.c @@ -306,7 +306,7 @@ i32 getPrevImport(B path) { // -1 for unset, -2 for unfinished if (prevImports==NULL) prevImports = m_b2i(16); bool had; i32 prev = mk_b2i(&prevImports, path, &had); - if (had) return prevImports->a[prev].val; + if (had && prevImports->a[prev].val!=-1) return prevImports->a[prev].val; prevImports->a[prev].val = -2; return -1; } diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 3e9fb2d7..f3a82467 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -652,13 +652,21 @@ B import_c1(B d, B x) { return IGet(importValList, prevIdx); } if (prevIdx==-2) thrF("•Import: cyclic import of \"%R\"", path); + if (CATCH) { + setPrevImport(path, -1); + rethrow(); + } + + i32 prevLen = a(importValList)->ia; + importKeyList = vec_addN(importKeyList, path); + importValList = vec_addN(importValList, bi_N); + B r = bqn_execFile(inc(path), emptySVec()); - i32 prevLen = a(importKeyList)->ia; - // print_fmt("caching: %R @ %i\n", path, prevLen); + harr_ptr(importValList)[prevLen] = inc(r); setPrevImport(path, prevLen); - importKeyList = vec_addN(importKeyList, path); - importValList = vec_addN(importValList, inc(r)); + popCatch(); + return r; } static void sys_gcFn() {