diff --git a/build_wasm.sh b/build_wasm.sh index a993dbd3..7d39e985 100644 --- a/build_wasm.sh +++ b/build_wasm.sh @@ -1,3 +1,3 @@ rm -rf web/lib/ mkdir -p web/lib/ -em++ src/main.cpp -fno-rtti -fexceptions -sEXIT_RUNTIME -O3 -sMODULARIZE -sEXPORTED_FUNCTIONS=_repl_input,_repl_start,_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 -sEXPORTED_RUNTIME_METHODS=ccall,cwrap -o web/lib/pocketpy.js \ No newline at end of file +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 -sEXPORTED_RUNTIME_METHODS=ccall -o web/lib/pocketpy.js \ No newline at end of file diff --git a/plugins/flutter/example/pubspec.lock b/plugins/flutter/example/pubspec.lock index 35b8c427..ad2de5cc 100644 --- a/plugins/flutter/example/pubspec.lock +++ b/plugins/flutter/example/pubspec.lock @@ -67,6 +67,13 @@ packages: description: flutter source: sdk version: "0.0.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.5" matcher: dependency: transitive description: diff --git a/plugins/flutter/lib/web.dart b/plugins/flutter/lib/web.dart new file mode 100644 index 00000000..b881cb83 --- /dev/null +++ b/plugins/flutter/lib/web.dart @@ -0,0 +1,5 @@ +import 'package:js/js.dart'; + +@JS("Module.ccall") +external int ccall(String name, String returnType, List argTypes, + List args); diff --git a/plugins/flutter/pubspec.yaml b/plugins/flutter/pubspec.yaml index 004262e6..58e9ed3b 100644 --- a/plugins/flutter/pubspec.yaml +++ b/plugins/flutter/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: flutter: sdk: flutter ffi: ^2.0.1 + js: ^0.6.5 dev_dependencies: flutter_test: diff --git a/plugins/flutter/src/pocketpy.h b/plugins/flutter/src/pocketpy.h index ba6e3f12..a096a75c 100644 --- a/plugins/flutter/src/pocketpy.h +++ b/plugins/flutter/src/pocketpy.h @@ -6784,6 +6784,7 @@ void __initializeBuiltinFunctions(VM* _vm) { #elif defined(__EMSCRIPTEN__) || defined(__wasm__) || defined(__wasm32__) || defined(__wasm64__) #include #define __EXPORT EMSCRIPTEN_KEEPALIVE +#define __NO_MAIN #else #define __EXPORT #endif diff --git a/plugins/godot/godot-cpp b/plugins/godot/godot-cpp index 0024722d..d3e448cd 160000 --- a/plugins/godot/godot-cpp +++ b/plugins/godot/godot-cpp @@ -1 +1 @@ -Subproject commit 0024722da6796a9f5c954bba2d0b617c602106c7 +Subproject commit d3e448cdbca422c2c9af45b46d8371f66139e12e diff --git a/src/main.cpp b/src/main.cpp index 6b4068da..e3f9c0fc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,19 +22,6 @@ struct Timer{ } }; -#if defined(__EMSCRIPTEN__) || defined(__wasm__) || defined(__wasm32__) || defined(__wasm64__) - -// these code is for demo use, feel free to modify it -REPL* _repl; -extern "C" { - __EXPORT - void repl_start(){ _repl = pkpy_new_repl(pkpy_new_vm(true));} - __EXPORT - bool repl_input(const char* line){ return pkpy_repl_input(_repl, line) == NEED_MORE_LINES;} -} -#else - - void _tvm_dispatch(ThreadedVM* vm){ while(pkpy_tvm_get_state(vm) != THREAD_FINISHED){ if(pkpy_tvm_get_state(vm) == THREAD_SUSPENDED){ @@ -59,6 +46,7 @@ void _tvm_dispatch(ThreadedVM* vm){ } } +#ifndef __NO_MAIN int main(int argc, char** argv){ if(argc == 1){ diff --git a/src/pocketpy.h b/src/pocketpy.h index 88ec922c..3ed554b6 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -592,6 +592,7 @@ void __initializeBuiltinFunctions(VM* _vm) { #elif defined(__EMSCRIPTEN__) || defined(__wasm__) || defined(__wasm32__) || defined(__wasm64__) #include #define __EXPORT EMSCRIPTEN_KEEPALIVE +#define __NO_MAIN #else #define __EXPORT #endif diff --git a/web/index.js b/web/index.js index 6e4198c6..90512986 100644 --- a/web/index.js +++ b/web/index.js @@ -3,6 +3,7 @@ const term = new Terminal(); var command = ""; var need_more_lines = false; var stopped = false; +var repl = 0; var Module = { 'print': function(text) { @@ -12,7 +13,8 @@ var Module = { term.write(text + "\r\n"); }, 'onRuntimeInitialized': function(text) { - Module.ccall('repl_start', null, [], []); + var vm = Module.ccall('pkpy_new_vm', 'number', ['boolean'], [true]); + repl = Module.ccall('pkpy_new_repl', 'number', ['number'], [vm]); term.write(need_more_lines ? "... " : ">>> "); }, 'onAbort': function(text) { @@ -32,7 +34,7 @@ function term_init() { term.write("Bye!\r\n"); break; } - need_more_lines = Module.ccall('repl_input', Boolean, ['string'], [command]); + need_more_lines = Module.ccall('pkpy_repl_input', 'number', ['number', 'string'], [repl, command]) == 0; command = ''; term.write(need_more_lines ? "... " : ">>> "); break;