Use Runtime::enter in Emulator

This commit is contained in:
Héctor Ramón Jiménez 2025-08-28 13:14:30 +02:00
parent 2d83da799a
commit a88e67105e
No known key found for this signature in database
GPG key ID: 4C07CEC81AFA161F

View file

@ -82,11 +82,13 @@ impl<P: Program + 'static> Emulator<P> {
let runtime = Runtime::new(executor, sender); let runtime = Runtime::new(executor, sender);
let (state, task) = if let Some(preset) = preset { let (state, task) = runtime.enter(|| {
preset.boot() if let Some(preset) = preset {
} else { preset.boot()
program.boot() } else {
}; program.boot()
}
});
let mut emulator = Self { let mut emulator = Self {
state, state,
@ -108,7 +110,9 @@ impl<P: Program + 'static> Emulator<P> {
} }
pub fn update(&mut self, program: &P, message: P::Message) { pub fn update(&mut self, program: &P, message: P::Message) {
let task = program.update(&mut self.state, message); let task = self
.runtime
.enter(|| program.update(&mut self.state, message));
self.resubscribe(program); self.resubscribe(program);
@ -285,10 +289,11 @@ impl<P: Program + 'static> Emulator<P> {
self.cache = Some(user_interface.into_cache()); self.cache = Some(user_interface.into_cache());
let task = let task = self.runtime.enter(|| {
Task::batch(messages.into_iter().map(|message| { Task::batch(messages.into_iter().map(|message| {
program.update(&mut self.state, message) program.update(&mut self.state, message)
})); }))
});
self.resubscribe(program); self.resubscribe(program);
self.wait_for(task); self.wait_for(task);
@ -357,11 +362,14 @@ impl<P: Program + 'static> Emulator<P> {
} }
pub fn resubscribe(&mut self, program: &P) { pub fn resubscribe(&mut self, program: &P) {
self.runtime.track(subscription::into_recipes( self.runtime
program.subscription(&self.state).map(|message| { .track(subscription::into_recipes(self.runtime.enter(|| {
Event::Action(Action::Runtime(runtime::Action::Output(message))) program.subscription(&self.state).map(|message| {
}), Event::Action(Action::Runtime(runtime::Action::Output(
)); message,
)))
})
})));
} }
pub fn view( pub fn view(