diff --git a/amalgamate.py b/amalgamate.py index 97d843bd..1a72f240 100644 --- a/amalgamate.py +++ b/amalgamate.py @@ -51,4 +51,4 @@ r'''/* f.write(final_text) shutil.copy("src/main.cpp", "amalgamated/main.cpp") -os.system("g++ -o pocketpy amalgamated/main.cpp --std=c++17 -O1") \ No newline at end of file +os.system("g++ -o pocketpy amalgamated/main.cpp --std=c++17 -O1 -pthread") \ No newline at end of file diff --git a/src/builtins.h b/src/builtins.h index f08def79..0f0abd5e 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -23,6 +23,14 @@ def __str4split(self, sep): str.split = __str4split del __str4split +def __str4index(self, sub): + for i in range(len(self) - len(sub) + 1): + if self[i:i+len(sub)] == sub: + return i + return -1 +str.index = __str4index +del __str4index + list.__repr__ = lambda self: '[' + ', '.join([repr(i) for i in self]) + ']' tuple.__repr__ = lambda self: '(' + ', '.join([repr(i) for i in self]) + ')' list.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']' diff --git a/src/pocketpy.h b/src/pocketpy.h index 23669a42..38d1b504 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -605,6 +605,36 @@ extern "C" { return vm->exec(code) != nullptr; } + __EXPORT + PyObjectDump* pkpy_get_global(VM* vm, const char* name){ + auto it = vm->_main->attribs.find(name); + if(it == vm->_main->attribs.end()) return nullptr; + return new PyObjectDump( + it->second->getTypeName().c_str(), + vm->PyStr_AS_C(vm->asJson(it->second)).c_str() + ); + } + + __EXPORT + void pkpy_set_global_int(VM* vm, const char* name, _Int value){ + vm->setAttr(vm->_main, name, vm->PyInt(value)); + } + + __EXPORT + void pkpy_set_global_float(VM* vm, const char* name, _Float value){ + vm->setAttr(vm->_main, name, vm->PyFloat(value)); + } + + __EXPORT + void pkpy_set_global_str(VM* vm, const char* name, const char* value){ + vm->setAttr(vm->_main, name, vm->PyStr(value)); + } + + __EXPORT + void pkpy_set_global_bool(VM* vm, const char* name, bool value){ + vm->setAttr(vm->_main, name, vm->PyBool(value)); + } + __EXPORT PyObjectDump* pkpy_eval(VM* vm, const char* source){ _Code code = compile(vm, source, "", EVAL_MODE);