fix(dsl): take some more ownership
Some checks are pending
/ build (push) Waiting to run

why implement Dsl for &Dsl otherwise?
This commit is contained in:
🪞👃🪞 2025-09-02 22:36:49 +03:00
parent 4f1131744b
commit ad2d7c38b1
2 changed files with 8 additions and 8 deletions

View file

@ -248,21 +248,21 @@ pub trait DslNs<'t, T: 't>: 't {
/// Known expressions. /// Known expressions.
const EXPRS: DslExprs<'t, Self, T> = DslNsMap::new(&[]); const EXPRS: DslExprs<'t, Self, T> = DslNsMap::new(&[]);
/// Resolve an expression or symbol. /// Resolve an expression or symbol.
fn from <D: Dsl> (&'t self, dsl: &D) -> Perhaps<T> { fn from (&'t self, dsl: impl Dsl) -> Perhaps<T> {
if let Ok(Some(literal)) = self.from_literal(dsl) { if let Ok(Some(literal)) = self.from_literal(&dsl) {
Ok(Some(literal)) Ok(Some(literal))
} else if let Ok(Some(meaning)) = self.from_word(dsl) { } else if let Ok(Some(meaning)) = self.from_word(&dsl) {
Ok(Some(meaning)) Ok(Some(meaning))
} else { } else {
self.from_expr(dsl) self.from_expr(&dsl)
} }
} }
/// Resolve as literal if valid. /// Resolve as literal if valid.
fn from_literal <D: Dsl> (&self, _: &D) -> Perhaps<T> { fn from_literal (&self, _: impl Dsl) -> Perhaps<T> {
Ok(None) Ok(None)
} }
/// Resolve a symbol if known. /// Resolve a symbol if known.
fn from_word <D: Dsl> (&'t self, dsl: &D) -> Perhaps<T> { fn from_word (&'t self, dsl: impl Dsl) -> Perhaps<T> {
if let Some(dsl) = dsl.word()? { if let Some(dsl) = dsl.word()? {
for (key, get) in Self::WORDS.0.iter() { for (key, get) in Self::WORDS.0.iter() {
if dsl == *key { if dsl == *key {
@ -274,7 +274,7 @@ pub trait DslNs<'t, T: 't>: 't {
return Ok(None) return Ok(None)
} }
/// Resolve an expression if known. /// Resolve an expression if known.
fn from_expr <D: Dsl> (&'t self, dsl: &D) -> Perhaps<T> { fn from_expr (&'t self, dsl: impl Dsl) -> Perhaps<T> {
if let Some(expr) = dsl.expr()? { if let Some(expr) = dsl.expr()? {
for (key, get) in Self::EXPRS.0.iter() { for (key, get) in Self::EXPRS.0.iter() {
if Some(*key) == expr.head()? { if Some(*key) == expr.head()? {

View file

@ -95,7 +95,7 @@
$(dsl_ns!{@word ($state: $State) -> $Type { $pat => $body }}),*]); $(dsl_ns!{@word ($state: $State) -> $Type { $pat => $body }}),*]);
const EXPRS: DslExprs<'t, $State, $Type> = DslNsMap::new(&[ const EXPRS: DslExprs<'t, $State, $Type> = DslNsMap::new(&[
$(dsl_ns!{@exp ($state: $State) -> $Type { $pat => $body }}),*]); $(dsl_ns!{@exp ($state: $State) -> $Type { $pat => $body }}),*]);
fn from_literal <D: Dsl> (&self, dsl: &D) -> Perhaps<$Type> { fn from_literal (&self, dsl: impl Dsl) -> Perhaps<$Type> {
Ok(if let Some(src) = dsl.src()? { Ok(if let Some(src) = dsl.src()? {
Some(to_number(src)? as $Type) Some(to_number(src)? as $Type)
} else { } else {