blueloveTH 3 ani în urmă
părinte
comite
f210de9675

+ 1 - 1
build_wasm.sh

@@ -1,3 +1,3 @@
 rm -rf web/lib/
 mkdir -p web/lib/
-em++ src/main.cpp -fno-rtti -fexceptions -O3 -sEXPORTED_FUNCTIONS=_pkpy_delete,_pkpy_new_repl,_pkpy_repl_input,_pkpy_new_tvm,_pkpy_tvm_exec_async,_pkpy_tvm_get_state,_pkpy_tvm_read_jsonrpc_request,_pkpy_tvm_reset_state,_pkpy_tvm_terminate,_pkpy_tvm_write_jsonrpc_response,_pkpy_new_vm,_pkpy_vm_add_module,_pkpy_vm_eval,_pkpy_vm_exec,_pkpy_vm_get_global,_pkpy_vm_read_output -sASYNCIFY -sEXPORTED_RUNTIME_METHODS=ccall -sASYNCIFY_IMPORTS=pkpy_tvm_exec_async -o web/lib/pocketpy.js
+em++ src/main.cpp -fno-rtti -fexceptions -sASYNCIFY_STACK_SIZE=131072 -O0 -sEXPORTED_FUNCTIONS=_pkpy_delete,_pkpy_new_repl,_pkpy_repl_input,_pkpy_new_tvm,_pkpy_tvm_exec_async,_pkpy_tvm_get_state,_pkpy_tvm_read_jsonrpc_request,_pkpy_tvm_reset_state,_pkpy_tvm_terminate,_pkpy_tvm_write_jsonrpc_response,_pkpy_new_vm,_pkpy_vm_add_module,_pkpy_vm_eval,_pkpy_vm_exec,_pkpy_vm_get_global,_pkpy_vm_read_output -sASYNCIFY -sEXPORTED_RUNTIME_METHODS=ccall -sASYNCIFY_IMPORTS=pkpy_tvm_exec_async,pkpy_repl_input -o web/lib/pocketpy.js

+ 1 - 1
plugins/flutter/CHANGELOG.md

@@ -1,4 +1,4 @@
-## 0.6.0+4
+## 0.6.1+1
 
 + Break change
 

+ 1 - 1
plugins/flutter/example/pubspec.lock

@@ -108,7 +108,7 @@ packages:
       path: ".."
       relative: true
     source: path
-    version: "0.5.2+1"
+    version: "0.6.1+1"
   sky_engine:
     dependency: transitive
     description: flutter

+ 25 - 18
plugins/flutter/lib/web.dart

@@ -3,28 +3,35 @@ import 'dart:convert' as cvt;
 import 'package:js/js.dart';
 import 'common.dart';
 
+@JS()
+@anonymous
+class Opt {
+  external bool get async;
+  external factory Opt({bool async});
+}
+
 @JS("Module.ccall")
-external dynamic ccall(String name, String? returnType, List<String> argTypes, List<dynamic> args);
+external dynamic ccall(String name, String? returnType, List<String> argTypes, List<dynamic> args, Opt opt);
 
 class _Bindings
 {
-  static final pkpy_delete = (dynamic p) => ccall("pkpy_delete", null, ["number"], [p]);
-  static final pkpy_new_repl = (dynamic vm) => ccall("pkpy_new_repl", "number", ["number"], [vm]);
-  static final pkpy_repl_input = (dynamic r, String line) => ccall("pkpy_repl_input", null, ["number", "string"], [r, line]);
-  static final pkpy_repl_last_input_result = (dynamic r) => ccall("pkpy_repl_last_input_result", "number", ["number"], [r]);
-  static final pkpy_new_tvm = (bool use_stdio) => ccall("pkpy_new_tvm", "number", ["boolean"], [use_stdio]);
-  static final pkpy_tvm_exec_async = (dynamic vm, String source) => ccall("pkpy_tvm_exec_async", null, ["number", "string"], [vm, source]);
-  static final pkpy_tvm_get_state = (dynamic vm) => ccall("pkpy_tvm_get_state", "number", ["number"], [vm]);
-  static final pkpy_tvm_read_jsonrpc_request = (dynamic vm) => ccall("pkpy_tvm_read_jsonrpc_request", "string", ["number"], [vm]);
-  static final pkpy_tvm_reset_state = (dynamic vm) => ccall("pkpy_tvm_reset_state", null, ["number"], [vm]);
-  static final pkpy_tvm_terminate = (dynamic vm) => ccall("pkpy_tvm_terminate", null, ["number"], [vm]);
-  static final pkpy_tvm_write_jsonrpc_response = (dynamic vm, String value) => ccall("pkpy_tvm_write_jsonrpc_response", null, ["number", "string"], [vm, value]);
-  static final pkpy_new_vm = (bool use_stdio) => ccall("pkpy_new_vm", "number", ["boolean"], [use_stdio]);
-  static final pkpy_vm_add_module = (dynamic vm, String name, String source) => ccall("pkpy_vm_add_module", null, ["number", "string", "string"], [vm, name, source]);
-  static final pkpy_vm_eval = (dynamic vm, String source) => ccall("pkpy_vm_eval", "string", ["number", "string"], [vm, source]);
-  static final pkpy_vm_exec = (dynamic vm, String source) => ccall("pkpy_vm_exec", null, ["number", "string"], [vm, source]);
-  static final pkpy_vm_get_global = (dynamic vm, String name) => ccall("pkpy_vm_get_global", "string", ["number", "string"], [vm, name]);
-  static final pkpy_vm_read_output = (dynamic vm) => ccall("pkpy_vm_read_output", "string", ["number"], [vm]);
+  static final pkpy_delete = (dynamic p) => ccall("pkpy_delete", null, ["number"], [p], Opt(async: false));
+  static final pkpy_new_repl = (dynamic vm) => ccall("pkpy_new_repl", "number", ["number"], [vm], Opt(async: false));
+  static final pkpy_repl_input = (dynamic r, String line) => ccall("pkpy_repl_input", null, ["number", "string"], [r, line], Opt(async: true));
+  static final pkpy_repl_last_input_result = (dynamic r) => ccall("pkpy_repl_last_input_result", "number", ["number"], [r], Opt(async: false));
+  static final pkpy_new_tvm = (bool use_stdio) => ccall("pkpy_new_tvm", "number", ["boolean"], [use_stdio], Opt(async: false));
+  static final pkpy_tvm_exec_async = (dynamic vm, String source) => ccall("pkpy_tvm_exec_async", null, ["number", "string"], [vm, source], Opt(async: true));
+  static final pkpy_tvm_get_state = (dynamic vm) => ccall("pkpy_tvm_get_state", "number", ["number"], [vm], Opt(async: false));
+  static final pkpy_tvm_read_jsonrpc_request = (dynamic vm) => ccall("pkpy_tvm_read_jsonrpc_request", "string", ["number"], [vm], Opt(async: false));
+  static final pkpy_tvm_reset_state = (dynamic vm) => ccall("pkpy_tvm_reset_state", null, ["number"], [vm], Opt(async: false));
+  static final pkpy_tvm_terminate = (dynamic vm) => ccall("pkpy_tvm_terminate", null, ["number"], [vm], Opt(async: false));
+  static final pkpy_tvm_write_jsonrpc_response = (dynamic vm, String value) => ccall("pkpy_tvm_write_jsonrpc_response", null, ["number", "string"], [vm, value], Opt(async: false));
+  static final pkpy_new_vm = (bool use_stdio) => ccall("pkpy_new_vm", "number", ["boolean"], [use_stdio], Opt(async: false));
+  static final pkpy_vm_add_module = (dynamic vm, String name, String source) => ccall("pkpy_vm_add_module", null, ["number", "string", "string"], [vm, name, source], Opt(async: false));
+  static final pkpy_vm_eval = (dynamic vm, String source) => ccall("pkpy_vm_eval", "string", ["number", "string"], [vm, source], Opt(async: false));
+  static final pkpy_vm_exec = (dynamic vm, String source) => ccall("pkpy_vm_exec", null, ["number", "string"], [vm, source], Opt(async: false));
+  static final pkpy_vm_get_global = (dynamic vm, String name) => ccall("pkpy_vm_get_global", "string", ["number", "string"], [vm, name], Opt(async: false));
+  static final pkpy_vm_read_output = (dynamic vm) => ccall("pkpy_vm_read_output", "string", ["number"], [vm], Opt(async: false));
 }
 
 class VM {

+ 1 - 1
plugins/flutter/pubspec.yaml

@@ -1,6 +1,6 @@
 name: pocketpy
 description: A lightweight Python interpreter for game engines.
-version: 0.6.0+4
+version: 0.6.1+1
 homepage: https://pocketpy.dev
 repository: https://github.com/blueloveth/pocketpy
 

+ 11 - 3
plugins/flutter/src/pocketpy.h

@@ -1837,7 +1837,7 @@ private:
 #include <thread>
 #endif
 
-#define PK_VERSION "0.6.0"
+#define PK_VERSION "0.6.1"
 
 //#define PKPY_NO_TYPE_CHECK
 //#define PKPY_NO_INDEX_CHECK
@@ -5005,7 +5005,9 @@ class ThreadedVM : public VM {
         }
     }
 #else
-    void __deleteThread(){}
+    void __deleteThread(){
+        terminate();
+    }
 #endif
 
 public:
@@ -5024,7 +5026,13 @@ public:
     void terminate(){
         if(_state == THREAD_RUNNING || _state == THREAD_SUSPENDED){
             keyboardInterrupt();
-            while(_state != THREAD_FINISHED);
+            while(_state != THREAD_FINISHED) {
+#ifdef __EMSCRIPTEN__
+            emscripten_sleep(20);
+#else
+            std::this_thread::sleep_for(std::chrono::milliseconds(20));
+#endif
+            }
         }
     }
 

+ 1 - 1
plugins/godot/godot-cpp

@@ -1 +1 @@
-Subproject commit 484bb4f281a60bda5ccb121b753b05fa4deead60
+Subproject commit 3b6f3c85037a67fe1f8817ffa40532b3c1ecc728

+ 1 - 1
src/__stl__.h

@@ -37,7 +37,7 @@
 #include <thread>
 #endif
 
-#define PK_VERSION "0.6.0"
+#define PK_VERSION "0.6.1"
 
 //#define PKPY_NO_TYPE_CHECK
 //#define PKPY_NO_INDEX_CHECK

+ 10 - 2
src/vm.h

@@ -1099,7 +1099,9 @@ class ThreadedVM : public VM {
         }
     }
 #else
-    void __deleteThread(){}
+    void __deleteThread(){
+        terminate();
+    }
 #endif
 
 public:
@@ -1118,7 +1120,13 @@ public:
     void terminate(){
         if(_state == THREAD_RUNNING || _state == THREAD_SUSPENDED){
             keyboardInterrupt();
-            while(_state != THREAD_FINISHED);
+            while(_state != THREAD_FINISHED) {
+#ifdef __EMSCRIPTEN__
+            emscripten_sleep(20);
+#else
+            std::this_thread::sleep_for(std::chrono::milliseconds(20));
+#endif
+            }
         }
     }