blueloveTH před 3 roky
rodič
revize
e61eb15a62
2 změnil soubory, kde provedl 12 přidání a 16 odebrání
  1. 6 6
      src/pocketpy.h
  2. 6 10
      src/vm.h

+ 6 - 6
src/pocketpy.h

@@ -509,7 +509,7 @@ void __initializeBuiltinFunctions(VM* _vm) {
 
 
 void __addModuleTime(VM* vm){
-    PyVar mod = vm->newModule("time");
+    PyVar mod = vm->new_module("time");
     vm->bindFunc<0>(mod, "time", [](VM* vm, const pkpy::ArgList& args) {
         auto now = std::chrono::high_resolution_clock::now();
         return vm->PyFloat(std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count() / 1000000.0);
@@ -517,7 +517,7 @@ void __addModuleTime(VM* vm){
 }
 
 void __addModuleSys(VM* vm){
-    PyVar mod = vm->newModule("sys");
+    PyVar mod = vm->new_module("sys");
     vm->bindFunc<1>(mod, "getrefcount", [](VM* vm, const pkpy::ArgList& args) {
         return vm->PyInt(args[0].use_count());
     });
@@ -535,7 +535,7 @@ void __addModuleSys(VM* vm){
 }
 
 void __addModuleJson(VM* vm){
-    PyVar mod = vm->newModule("json");
+    PyVar mod = vm->new_module("json");
     vm->bindFunc<1>(mod, "loads", [](VM* vm, const pkpy::ArgList& args) {
         const _Str& expr = vm->PyStr_AS_C(args[0]);
         _Code code = vm->compile(expr, "<json>", JSON_MODE);
@@ -548,7 +548,7 @@ void __addModuleJson(VM* vm){
 }
 
 void __addModuleMath(VM* vm){
-    PyVar mod = vm->newModule("math");
+    PyVar mod = vm->new_module("math");
     vm->setattr(mod, "pi", vm->PyFloat(3.1415926535897932384));
     vm->setattr(mod, "e" , vm->PyFloat(2.7182818284590452354));
 
@@ -647,7 +647,7 @@ PyVar __regex_search(const _Str& pattern, const _Str& string, bool fromStart, VM
 };
 
 void __addModuleRe(VM* vm){
-    PyVar mod = vm->newModule("re");
+    PyVar mod = vm->new_module("re");
     ReMatch::_bind(vm);
 
     vm->bindFunc<2>(mod, "match", [](VM* vm, const pkpy::ArgList& args) {
@@ -783,7 +783,7 @@ extern "C" {
     __EXPORT
     /// Add a source module into a virtual machine.
     void pkpy_vm_add_module(VM* vm, const char* name, const char* source){
-        vm->addLazyModule(name, source);
+        vm->_lazy_modules[name] = source;
     }
 
     void __vm_init(VM* vm){

+ 6 - 10
src/vm.h

@@ -22,7 +22,6 @@
 
 class VM {
     std::vector<PyVar> _small_integers;             // [-5, 256]
-    emhash8::HashMap<_Str, _Str> _lazy_modules;     // lazy loaded modules
 protected:
     std::deque< std::unique_ptr<Frame> > callstack;
     PyVar __py2py_call_signal;
@@ -310,7 +309,7 @@ protected:
                         }else{
                             const _Str& source = it2->second;
                             _Code code = compile(source, name, EXEC_MODE);
-                            PyVar _m = newModule(name);
+                            PyVar _m = new_module(name);
                             _exec(code, _m, pkpy::make_shared<PyVarDict>());
                             frame->push(_m);
                             _lazy_modules.erase(it2);
@@ -340,6 +339,7 @@ protected:
 public:
     PyVarDict _types;
     PyVarDict _modules;                             // loaded modules
+    emhash8::HashMap<_Str, _Str> _lazy_modules;     // lazy loaded modules
     PyVar None, True, False, Ellipsis;
 
     bool use_stdio;
@@ -598,17 +598,13 @@ public:
         return new_object(T::_tp(this), T(std::forward<Args>(args)...));
     }
 
-    PyVar newModule(_Str name) {
-        PyVar obj = new_object(_tp_module, (i64)-2);
+    PyVar new_module(_Str name) {
+        PyVar obj = new_object(_tp_module, DUMMY_VAL);
         setattr(obj, __name__, PyStr(name));
         _modules[name] = obj;
         return obj;
     }
 
-    void addLazyModule(_Str name, _Str source){
-        _lazy_modules[name] = source;
-    }
-
     PyVarOrNull getattr(const PyVar& obj, const _Str& name, bool throw_err=true) {
         PyVarDict::iterator it;
         PyObject* cls;
@@ -860,8 +856,8 @@ public:
         this->Ellipsis = new_object(_types["ellipsis"], DUMMY_VAL);
         this->True = new_object(_tp_bool, true);
         this->False = new_object(_tp_bool, false);
-        this->builtins = newModule("builtins");
-        this->_main = newModule("__main__");
+        this->builtins = new_module("builtins");
+        this->_main = new_module("__main__");
 
         setattr(_tp_type, __base__, _tp_object);
         _tp_type->_type = _tp_type;