This commit is contained in:
blueloveTH 2023-05-23 22:20:19 +08:00
parent 73fbb98712
commit 0befc0139f
3 changed files with 24 additions and 4 deletions

View File

@ -490,7 +490,18 @@ __NEXT_STEP:;
auto it = _lazy_modules.find(name); auto it = _lazy_modules.find(name);
if(it == _lazy_modules.end()){ if(it == _lazy_modules.end()){
Bytes b = _read_file_cwd(fmt(name, ".py")); 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()); source = Str(b.str());
}else{ }else{
source = it->second; source = it->second;

View File

@ -42,6 +42,7 @@
#define DEBUG_NO_AUTO_GC 0 #define DEBUG_NO_AUTO_GC 0
#define DEBUG_GC_STATS 0 #define DEBUG_GC_STATS 0
// config macros
#ifndef PK_ENABLE_OS #ifndef PK_ENABLE_OS
#ifdef __ANDROID__ #ifdef __ANDROID__
@ -59,6 +60,14 @@
#endif #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 // This is the maximum number of arguments in a function declaration
// including positional arguments, keyword-only arguments, and varargs // including positional arguments, keyword-only arguments, and varargs
#define PK_MAX_CO_VARNAMES 255 #define PK_MAX_CO_VARNAMES 255
@ -128,7 +137,6 @@ struct Type {
operator int() const noexcept { return this->index; } operator int() const noexcept { return this->index; }
}; };
#define THREAD_LOCAL // thread_local
#define CPP_LAMBDA(x) ([](VM* vm, ArgsView args) { return x; }) #define CPP_LAMBDA(x) ([](VM* vm, ArgsView args) { return x; })
#ifdef POCKETPY_H #ifdef POCKETPY_H

View File

@ -113,8 +113,9 @@ public:
std::vector<PyTypeInfo> _all_types; std::vector<PyTypeInfo> _all_types;
void (*_gc_marker_ex)(VM*) = nullptr; void (*_gc_marker_ex)(VM*) = nullptr;
NameDict _modules; // loaded modules NameDict _modules; // loaded modules
std::map<StrName, Str> _lazy_modules; // lazy loaded modules std::map<StrName, Str> _lazy_modules; // lazy loaded modules
std::vector<Str> _path; // search path
PyObject* None; PyObject* None;
PyObject* True; PyObject* True;