on master help sign in
reuse context
commita2873ae84d293e22b6e53e1d291ee79fe2959400 authoriko <mail@iko.soy> dateTue 5 Nov 2024, 19:10 (2 years ago) parent7d27db8
1 file changed+22−9
wock-web/src/lib.rs+22−9
wock-web/src/lib.rs+22−9
@@ -1,7 +1,12 @@
11#![feature(iter_collect_into)]
22mod utils;
33
4−use std::rc::Rc;
4+use std::{
5+ borrow::BorrowMut,
6+ cell::RefCell,
7+ ops::{Deref, DerefMut},
8+ rc::Rc,
9+};
510
611use dodrio::{
712 bumpalo::{self, Bump},
@@ -9,7 +14,7 @@ use dodrio::{
914};
1015use nock::{
1116 cue::cue_bytes,
12− interpreter::{generate_interpreter_context, slam},
17+ interpreter::{generate_interpreter_context, slam, InterpreterContext},
1318 noun::{cell, Noun},
1419};
1520use wasm_bindgen::prelude::*;
@@ -26,15 +31,14 @@ extern "C" {
2631
2732struct WockApp {
2833 nock: Rc<Noun>,
34+ ctx: RefCell<InterpreterContext>,
2935 model: Rc<Noun>,
3036}
3137
3238impl<'a> Render<'a> for WockApp {
3339 fn render(&self, cx: &mut dodrio::RenderContext<'a>) -> dodrio::Node<'a> {
34− let mut ctx = generate_interpreter_context();
35−
3640 let sail = slam(
37− &mut ctx,
41+ &mut *self.ctx.borrow_mut(),
3842 &self.nock,
3943 &cell(&Rc::new(Noun::from_bytes(b"view")), &self.model),
4044 )
@@ -76,11 +80,12 @@ fn render_sail<'a>(ctx: &mut RenderContext<'a>, manx: Rc<Noun>) -> Node<'a> {
7680 move |root: &mut dyn RootRender,
7781 vdom: VdomWeak,
7882 _event: web_sys::Event| {
79− let mut ctx = generate_interpreter_context();
80− let sig = ctx.nouns.sig.clone();
81−
8283 let app = root.unwrap_mut::<WockApp>();
8384
85+ let mut ctx = app.ctx.borrow_mut();
86+
87+ let sig = ctx.nouns.sig.clone();
88+
8489 let new_model = slam(
8590 &mut ctx,
8691 &app.nock,
@@ -151,7 +156,15 @@ pub async fn main(path: &str) {
151156 )
152157 .unwrap();
153158
154− dodrio::Vdom::new(&output_el, WockApp { nock, model }).forget();
159+ dodrio::Vdom::new(
160+ &output_el,
161+ WockApp {
162+ nock,
163+ model,
164+ ctx: RefCell::new(ctx),
165+ },
166+ )
167+ .forget();
155168}
156169
157170pub async fn load_nock(path: &str) -> Rc<Noun> {