瀏覽代碼

add some methods

blueloveTH 3 年之前
父節點
當前提交
3177406e1d
共有 3 個文件被更改,包括 39 次插入1 次删除
  1. 1 1
      amalgamate.py
  2. 8 0
      src/builtins.h
  3. 30 0
      src/pocketpy.h

+ 1 - 1
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")
+os.system("g++ -o pocketpy amalgamated/main.cpp --std=c++17 -O1 -pthread")

+ 8 - 0
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]) + ']'

+ 30 - 0
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>", EVAL_MODE);