tylisp/ops/
rc.rs

1use crate::ops::*;
2pub use std::rc::Rc;
3pub use std::cell::Cell;
4
5#[derive(Debug,Default)]
6pub struct WrapRc;
7defun!{ WrapRc {
8    (T) { t:T } => {Ret, @Rc<T> = Rc::new(t)};
9}}
10
11#[derive(Debug,Default)]
12pub struct UnwrapRc;
13defun!{ UnwrapRc {
14    (T) { rc:Rc<T> } => {
15        Ret, @T = Rc::try_unwrap(rc)
16                     .unwrap_or_else(|_| panic!("Couldn't unwrap {}",
17                                                core::any::type_name::<T>()))
18    };
19}}
20
21#[derive(Debug,Default)]
22pub struct Unwrap;
23defun!{ Unwrap {
24    (T) { opt:Option<T> } => {
25        Ret, @T = opt.unwrap_or_else(|| panic!("Couldn't unwrap {}",
26                                                core::any::type_name::<T>()))
27    };
28}}