sim_lib_lang_clojure/
recur.rs1use sim_kernel::{
2 Cx, Ref, Result,
3 control::{ControlAbort, ControlPrompt, abort, default_control_result_shape, prompt},
4};
5
6use crate::clojure_recur_prompt_symbol;
7
8pub fn clojure_loop_prompt_ref() -> Ref {
10 Ref::Symbol(clojure_recur_prompt_symbol())
11}
12
13pub fn clojure_loop_prompt<F>(cx: &mut Cx, input: Ref, body: F) -> Result<Ref>
18where
19 F: FnOnce(&mut Cx) -> Result<Ref>,
20{
21 prompt(
22 cx,
23 ControlPrompt::new(
24 clojure_loop_prompt_ref(),
25 input,
26 default_control_result_shape(),
27 ),
28 body,
29 )
30}
31
32pub fn clojure_recur(cx: &mut Cx, value: Ref) -> Result<Ref> {
34 abort(
35 cx,
36 ControlAbort::new(
37 clojure_loop_prompt_ref(),
38 value,
39 default_control_result_shape(),
40 ),
41 )
42}