summaryrefslogtreecommitdiff
path: root/src/eval/methods.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-05-26 13:49:44 +0200
committerLaurenz <laurmaedje@gmail.com>2022-05-26 13:49:44 +0200
commita9869c212f7c1bc77a52e301ad014641b014e834 (patch)
tree97b5d6c71940e903482ba2f30cbcedd8f1c17ea3 /src/eval/methods.rs
parent66d8f4569a9f13270c5f477e0730f127a22333e2 (diff)
Locatable groups
Diffstat (limited to 'src/eval/methods.rs')
-rw-r--r--src/eval/methods.rs26
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()?,
};