blueloveTH 2 лет назад
Родитель
Сommit
0befc0139f
3 измененных файлов с 24 добавлено и 4 удалено
  1. 12 1
      src/ceval.h
  2. 9 1
      src/common.h
  3. 3 2
      src/vm.h

+ 12 - 1
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;

+ 9 - 1
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

+ 3 - 2
src/vm.h

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