Skip to content

Commit 3e9577d

Browse files
authored
Improve kernel constructor to respect kernelspec args (#16)
Improve kernel constructor to respect kernelspec args
1 parent 97e3f1e commit 3e9577d

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111
jobs:
1212
emscripten_wasm:
1313

14-
runs-on: ubuntu-20.04
14+
runs-on: ubuntu-22.04
1515

1616
strategy:
1717
fail-fast: false

include/xeus-lite/xembind.hpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,26 @@ namespace xeus
4040

4141
xeus::xserver * get_server(xeus::xkernel * kernel);
4242

43-
template<class interpreter_type>
44-
std::unique_ptr<xkernel> make_xkernel()
43+
template <class interpreter_type>
44+
using builder_type = interpreter_type* (*)(ems::val);
45+
46+
template <class interpreter_type>
47+
interpreter_type* default_builder(ems::val)
48+
{
49+
return new interpreter_type();
50+
}
51+
52+
template<class interpreter_type, builder_type<interpreter_type> builder>
53+
std::unique_ptr<xkernel> make_xkernel(ems::val js_argv)
4554
{
4655
xeus::xconfiguration config;
4756

4857
using history_manager_ptr = std::unique_ptr<xeus::xhistory_manager>;
4958
history_manager_ptr hist = xeus::make_in_memory_history_manager();
5059

51-
using interpreter_ptr = std::unique_ptr<interpreter_type>;
52-
53-
auto interpreter = interpreter_ptr(new interpreter_type());
60+
std::unique_ptr<interpreter_type> interpreter;
61+
interpreter.reset((*builder)(js_argv));
62+
5463
auto context = std::make_unique<xeus::xcontext_impl<empty_context_tag>>();
5564

5665
xeus::xkernel * kernel = new xeus::xkernel(config,
@@ -64,11 +73,11 @@ namespace xeus
6473
return std::unique_ptr<xkernel>{kernel};
6574
}
6675

67-
template<class interpreter_type>
76+
template<class interpreter_type, builder_type<interpreter_type> builder = &default_builder<interpreter_type>>
6877
void export_kernel(const std::string kernel_name)
6978
{
7079
ems::class_<xkernel>(kernel_name.c_str())
71-
.constructor<>(&make_xkernel<interpreter_type>)
80+
.constructor<>(&make_xkernel<interpreter_type, builder>)
7281
.function("get_server", &get_server, ems::allow_raw_pointers())
7382
.function("start", &xkernel::start)
7483
;

test/test_wasm.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ global.self = {
88
}
99

1010
function test_start_kernel(Module) {
11-
raw_xkernel = new Module.xkernel();
11+
const argv = ["xtest_kernel"];
12+
raw_xkernel = new Module.xkernel(argv);
1213
var raw_xserver = raw_xkernel.get_server();
1314
raw_xkernel.start()
1415
}
@@ -48,7 +49,8 @@ function test_buffer_sequence_js_to_cpp(XeusModule) {
4849
}
4950

5051
function test_notify_listener(Module) {
51-
raw_xkernel = new Module.xkernel();
52+
const argv = ["xtest_kernel"];
53+
raw_xkernel = new Module.xkernel(argv);
5254
var raw_xserver = raw_xkernel.get_server();
5355
raw_xkernel.start()
5456

0 commit comments

Comments
 (0)