mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
up
This commit is contained in:
parent
48ad1f2ca2
commit
e61eb15a62
@ -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){
|
||||
|
16
src/vm.h
16
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user