@@ -10,12 +10,11 @@ use dodrio::{
11use nock::{
11use nock::{
12 cue::cue_bytes,
12 cue::cue_bytes,
13− interpreter::{generate_interpreter_context, slam, InterpreterContext},
13+ interpreter::{generate_interpreter_context, ram_ttanks, slam, InterpreterContext},
14 noun::{cell, Noun},
14 noun::{cell, Noun},
17use wasm_bindgen::prelude::*;
16use wasm_bindgen::prelude::*;
18−use wasm_bindgen_futures::{spawn_local, JsFuture};
17+use wasm_bindgen_futures::JsFuture;
19use web_sys::{console::error_1, Element};
18use web_sys::{console::error_1, Element};
21#[wasm_bindgen]
20#[wasm_bindgen]
@@ -29,41 +28,11 @@ extern "C" {
29 fn error(s: &str);
28 fn error(s: &str);
34− urbit: RefCell<Option<Rc<Noun>>>,
40− urbit: RefCell::new(None),
44− async fn get(self: &Self) -> Rc<Noun> {
45− match self.urbit.borrow().clone() {
46− Some(urbit) => urbit,
48− let urbit = load_nock("/urbit.nock").await.unwrap_or_else(|err| {
50− panic!("Could not load urbit.")
53− self.urbit.replace(Some(urbit.clone()));
61#[derive(Clone)]
31#[derive(Clone)]
62struct WockApp {
32struct WockApp {
63 nock: Rc<Noun>,
33 nock: Rc<Noun>,
64 ctx: RefCell<InterpreterContext>,
34 ctx: RefCell<InterpreterContext>,
65 model: Rc<Noun>,
35 model: Rc<Noun>,
69impl<'a> Render<'a> for WockApp {
38impl<'a> Render<'a> for WockApp {
@@ -75,13 +44,9 @@ impl<'a> Render<'a> for WockApp {
76 Ok(sail) => render_sail(cx, sail),
45 Ok(sail) => render_sail(cx, sail),
77 Err(tanks) => {
46 Err(tanks) => {
78− let wock_app = self.clone();
47+ let str = ram_ttanks(&mut (*self).ctx.borrow_mut(), tanks);
79− let mut ctx = (*self.ctx.borrow()).clone();
80− spawn_local(async move {
81− let urbit = wock_app.urbit.get().await;
82− let str = wash(&mut ctx, &urbit, tanks);
83− error_1(&JsValue::from_str(&str));
48+ error_1(&JsValue::from_str(&str));
85 panic!("Could not render");
50 panic!("Could not render");
@@ -142,13 +107,11 @@ fn render_sail<'a>(ctx: &mut RenderContext<'a>, manx: Rc<Noun>) -> Node<'a> {
142 vdom.schedule_render();
107 vdom.schedule_render();
144 Err(tanks) => {
109 Err(tanks) => {
145− let urbit = app.urbit.clone();
146 let mut ctx = ctx.borrow_mut().clone();
110 let mut ctx = ctx.borrow_mut().clone();
147− spawn_local(async move {
111+
148− let urbit = urbit.get().await;
149− let str = wash(&mut ctx, &urbit, tanks);
112+ let str = ram_ttanks(&mut ctx, tanks);
150− error_1(&JsValue::from_str(&str));
113+ error_1(&JsValue::from_str(&str));
152 error(&*format!(
115 error(&*format!(
153 "Application failed to process event: {}",
116 "Application failed to process event: {}",
@@ -216,12 +179,7 @@ pub async fn main(path: &str) {
216 let model = match model {
179 let model = match model {
217 Ok(model) => model,
180 Ok(model) => model,
218 Err(tanks) => {
181 Err(tanks) => {
219− let urbit = load_nock("/urbit.nock").await.unwrap_or_else(|err| {
221− panic!("Could not load urbit.")
224− let str = wash(&mut ctx, &urbit, tanks);
182+ let str = ram_ttanks(&mut ctx, tanks);
225 error_1(&JsValue::from_str(&str));
183 error_1(&JsValue::from_str(&str));
226 panic!("Could not load initial model.");
184 panic!("Could not load initial model.");
@@ -233,7 +191,6 @@ pub async fn main(path: &str) {
235 ctx: RefCell::new(ctx),
193 ctx: RefCell::new(ctx),
236− urbit: Rc::new(Urbit::new()),
239 .forget();
196 .forget();