From 0befc0139f2ff549ea1690c964a12999cbe9a9c9 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Tue, 23 May 2023 22:20:19 +0800 Subject: [PATCH] ... --- src/ceval.h | 13 ++++++++++++- src/common.h | 10 +++++++++- src/vm.h | 5 +++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/ceval.h b/src/ceval.h index 3f9b3b31..64922653 100644 --- a/src/ceval.h +++ b/src/ceval.h @@ -490,7 +490,18 @@ __NEXT_STEP:; auto it = _lazy_modules.find(name); if(it == _lazy_modules.end()){ Bytes b = _read_file_cwd(fmt(name, ".py")); - if(!b) _error("ImportError", fmt("module ", name.escape(), " not found")); + if(!b) { + for(Str path: _path){ +#ifdef _WIN32 + const char* sep = "\\"; +#else + const char* sep = "/"; +#endif + b = _read_file_cwd(fmt(path, sep, name, ".py")); + if(b) break; + } + if(!b) _error("ImportError", fmt("module ", name.escape(), " not found")); + } source = Str(b.str()); }else{ source = it->second; diff --git a/src/common.h b/src/common.h index 898a4b6d..0ae527e9 100644 --- a/src/common.h +++ b/src/common.h @@ -42,6 +42,7 @@ #define DEBUG_NO_AUTO_GC 0 #define DEBUG_GC_STATS 0 +// config macros #ifndef PK_ENABLE_OS #ifdef __ANDROID__ @@ -59,6 +60,14 @@ #endif +#if PK_ENABLE_THREAD +#define THREAD_LOCAL thread_local +#else +#define THREAD_LOCAL +#endif + +/*******************************************************************************/ + // This is the maximum number of arguments in a function declaration // including positional arguments, keyword-only arguments, and varargs #define PK_MAX_CO_VARNAMES 255 @@ -128,7 +137,6 @@ struct Type { operator int() const noexcept { return this->index; } }; -#define THREAD_LOCAL // thread_local #define CPP_LAMBDA(x) ([](VM* vm, ArgsView args) { return x; }) #ifdef POCKETPY_H diff --git a/src/vm.h b/src/vm.h index 8623d4fb..b438fd86 100644 --- a/src/vm.h +++ b/src/vm.h @@ -113,8 +113,9 @@ public: std::vector _all_types; void (*_gc_marker_ex)(VM*) = nullptr; - NameDict _modules; // loaded modules - std::map _lazy_modules; // lazy loaded modules + NameDict _modules; // loaded modules + std::map _lazy_modules; // lazy loaded modules + std::vector _path; // search path PyObject* None; PyObject* True;