diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-05-26 13:49:44 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-05-26 13:49:44 +0200 |
| commit | a9869c212f7c1bc77a52e301ad014641b014e834 (patch) | |
| tree | 97b5d6c71940e903482ba2f30cbcedd8f1c17ea3 /src/eval/methods.rs | |
| parent | 66d8f4569a9f13270c5f477e0730f127a22333e2 (diff) | |
Locatable groups
Diffstat (limited to 'src/eval/methods.rs')
| -rw-r--r-- | src/eval/methods.rs | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/eval/methods.rs b/src/eval/methods.rs index f6de614f..6ccd98e6 100644 --- a/src/eval/methods.rs +++ b/src/eval/methods.rs @@ -2,6 +2,7 @@ use super::{Args, Machine, Regex, StrExt, Value}; use crate::diag::{At, TypResult}; +use crate::model::{Content, Group}; use crate::syntax::Span; use crate::util::EcoString; @@ -66,18 +67,23 @@ pub fn call( _ => missing()?, }, - Value::Dyn(dynamic) => { - if let Some(regex) = dynamic.downcast::<Regex>() { - match method { - "matches" => { - Value::Bool(regex.matches(&args.expect::<EcoString>("text")?)) - } - _ => missing()?, + Value::Dyn(dynamic) => match method { + "matches" => { + if let Some(regex) = dynamic.downcast::<Regex>() { + Value::Bool(regex.matches(&args.expect::<EcoString>("text")?)) + } else { + missing()? } - } else { - missing()? } - } + "entry" => { + if let Some(group) = dynamic.downcast::<Group>() { + Value::Content(Content::Locate(group.entry(args.expect("recipe")?))) + } else { + missing()? + } + } + _ => missing()?, + }, _ => missing()?, }; |
