From 9e0b7be9a9c80b5df52854ab426bc60b794931ed Mon Sep 17 00:00:00 2001 From: unspeaker Date: Thu, 31 Jul 2025 21:00:13 +0300 Subject: [PATCH] fix(dsl): tail condition --- dsl/src/dsl.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/dsl/src/dsl.rs b/dsl/src/dsl.rs index 979585d..d8de0f5 100644 --- a/dsl/src/dsl.rs +++ b/dsl/src/dsl.rs @@ -6,19 +6,13 @@ extern crate const_panic; use const_panic::PanicFmt; use std::fmt::Debug; - pub(crate) use std::error::Error; pub(crate) use std::sync::Arc; - pub(crate) use konst::string::{str_range, char_indices}; pub(crate) use thiserror::Error; pub(crate) use ::tengri_core::*; - pub(crate) use self::DslError::*; - -mod dsl_conv; -pub use self::dsl_conv::*; - +mod dsl_conv; pub use self::dsl_conv::*; mod dsl_parse; pub(crate) use self::dsl_parse::*; pub mod parse { pub use crate::dsl_parse::*; } @@ -47,11 +41,20 @@ pub trait DslExp: Dsl { Ok(exp_peek(self.src())?) } fn head (&self) -> DslPerhaps<&str> { - Ok(peek(&self.src()[1..])?) + let start = 1; + let src = self.src(); + let src = &src[start.min(src.len().saturating_sub(1))..]; + peek(src) } fn tail (&self) -> DslPerhaps<&str> { - Ok(if let Some((head_start, head_len)) = seek(&self.src()[1..])? { - peek(&self.src()[(1+head_start+head_len)..])? + let start = 1; + let src = self.src(); + let src = &src[start.min(src.len().saturating_sub(1))..]; + Ok(if let Some((head_start, head_len)) = seek(src)? { + let start = 1 + head_start + head_len; + let src = self.src(); + let src = &src[start.min(src.len().saturating_sub(1))..]; + peek(src)? } else { None })