diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 452f3df..90e265a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ on: jobs: emscripten_wasm: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: fail-fast: false diff --git a/include/xeus-lite/xembind.hpp b/include/xeus-lite/xembind.hpp index 88b679a..21f63fd 100644 --- a/include/xeus-lite/xembind.hpp +++ b/include/xeus-lite/xembind.hpp @@ -40,17 +40,26 @@ namespace xeus xeus::xserver * get_server(xeus::xkernel * kernel); - template - std::unique_ptr make_xkernel() + template + using builder_type = interpreter_type* (*)(ems::val); + + template + interpreter_type* default_builder(ems::val) + { + return new interpreter_type(); + } + + template builder> + std::unique_ptr make_xkernel(ems::val js_argv) { xeus::xconfiguration config; using history_manager_ptr = std::unique_ptr; history_manager_ptr hist = xeus::make_in_memory_history_manager(); - using interpreter_ptr = std::unique_ptr; - - auto interpreter = interpreter_ptr(new interpreter_type()); + std::unique_ptr interpreter; + interpreter.reset((*builder)(js_argv)); + auto context = std::make_unique>(); xeus::xkernel * kernel = new xeus::xkernel(config, @@ -64,11 +73,11 @@ namespace xeus return std::unique_ptr{kernel}; } - template + template builder = &default_builder> void export_kernel(const std::string kernel_name) { ems::class_(kernel_name.c_str()) - .constructor<>(&make_xkernel) + .constructor<>(&make_xkernel) .function("get_server", &get_server, ems::allow_raw_pointers()) .function("start", &xkernel::start) ; diff --git a/test/test_wasm.js b/test/test_wasm.js index c8ca589..8b66807 100644 --- a/test/test_wasm.js +++ b/test/test_wasm.js @@ -8,7 +8,8 @@ global.self = { } function test_start_kernel(Module) { - raw_xkernel = new Module.xkernel(); + const argv = ["xtest_kernel"]; + raw_xkernel = new Module.xkernel(argv); var raw_xserver = raw_xkernel.get_server(); raw_xkernel.start() } @@ -48,7 +49,8 @@ function test_buffer_sequence_js_to_cpp(XeusModule) { } function test_notify_listener(Module) { - raw_xkernel = new Module.xkernel(); + const argv = ["xtest_kernel"]; + raw_xkernel = new Module.xkernel(argv); var raw_xserver = raw_xkernel.get_server(); raw_xkernel.start()