partway towards commands
I got very confused and started mucking about with "spawn" when in fact all I needed was the "inline" extension type in orcx that allows the interpreter to expose custom constants.
This commit is contained in:
@@ -1,15 +1,11 @@
|
||||
use std::rc::Rc;
|
||||
|
||||
use orchid_base::error::mk_errv;
|
||||
use orchid_base::format::fmt;
|
||||
use orchid_base::interner::is;
|
||||
use orchid_base::sym;
|
||||
use orchid_extension::atom::ForeignAtom;
|
||||
use orchid_extension::conv::ToExpr;
|
||||
use orchid_base::{fmt, is, mk_errv, sym};
|
||||
use orchid_extension::ForeignAtom;
|
||||
use orchid_extension::coroutine_exec::exec;
|
||||
use orchid_extension::expr::Expr;
|
||||
use orchid_extension::func_atom::get_arg;
|
||||
use orchid_extension::gen_expr::{call, new_atom, sym_ref};
|
||||
use orchid_extension::gen_expr::{call, new_atom};
|
||||
use orchid_extension::tree::{GenMember, comments, fun, prefix};
|
||||
use unicode_segmentation::UnicodeSegmentation;
|
||||
|
||||
@@ -154,13 +150,13 @@ pub fn gen_str_lib() -> Vec<GenMember> {
|
||||
fun(true, "to_str", async |input: Expr| {
|
||||
exec(async move |mut h| {
|
||||
if let Ok(atom) = h.exec::<ForeignAtom>(input.clone()).await {
|
||||
if let Some(str) = atom.request(ToStringMethod).await {
|
||||
if let Some(str) = atom.call(ToStringMethod).await {
|
||||
return new_atom(StrAtom::new(Rc::new(str)));
|
||||
}
|
||||
let proto_ref = sym_ref(sym!(std::string::to_string::__protocol_tag__));
|
||||
let proto_ref = sym!(std::string::to_string::__protocol_tag__);
|
||||
let proto = h.exec(proto_ref).await.expect("This protocol is defined in this system");
|
||||
if let Ok(cb) = get_impl(atom.clone(), proto).await {
|
||||
return call(cb.to_gen().await, [atom.to_gen().await]).to_gen().await;
|
||||
return call(cb, atom).await;
|
||||
}
|
||||
}
|
||||
return new_atom(StrAtom::new(Rc::new(fmt(&input).await)));
|
||||
|
||||
Reference in New Issue
Block a user