From 1553b785cbc75bfc47066096b81d0066017a91ad Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Tue, 30 Jun 2026 13:21:38 -0700 Subject: Added LookAhead, fixed up the proc-macro. LookAhead should make the rest of the parser and lexer stuff way easier, probably spin that out into it's own lib later on. --- crimtag/src/context.rs | 71 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 16 deletions(-) (limited to 'crimtag') diff --git a/crimtag/src/context.rs b/crimtag/src/context.rs index 6f8e04f..15448ee 100644 --- a/crimtag/src/context.rs +++ b/crimtag/src/context.rs @@ -107,24 +107,63 @@ pub enum MappedValue<'a> { impl<'a> fmt::Debug for MappedValue<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - MappedValue::<'a>::Struct(_) => write!(f, "MappedValue"), - MappedValue::<'a>::List(_) => write!(f, "MappedList"), - MappedValue::<'a>::Str(v) => write!(f, "{:?}", v), - MappedValue::<'a>::String(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Int8(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Int16(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Int32(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Int64(v) => write!(f, "{:?}", v), - MappedValue::<'a>::UInt8(v) => write!(f, "{:?}", v), - MappedValue::<'a>::UInt16(v) => write!(f, "{:?}", v), - MappedValue::<'a>::UInt32(v) => write!(f, "{:?}", v), - MappedValue::<'a>::UInt64(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Float32(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Float64(v) => write!(f, "{:?}", v), - MappedValue::<'a>::Bool(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Struct(_) => write!(f, "MappedValue"), + MappedValue::<'a>::List(_) => write!(f, "MappedList"), + MappedValue::<'a>::Str(v) => write!(f, "{:?}", v), + MappedValue::<'a>::String(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Int8(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Int16(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Int32(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Int64(v) => write!(f, "{:?}", v), + MappedValue::<'a>::UInt8(v) => write!(f, "{:?}", v), + MappedValue::<'a>::UInt16(v) => write!(f, "{:?}", v), + MappedValue::<'a>::UInt32(v) => write!(f, "{:?}", v), + MappedValue::<'a>::UInt64(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Float32(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Float64(v) => write!(f, "{:?}", v), + MappedValue::<'a>::Bool(v) => write!(f, "{:?}", v), } + } +} + +macro_rules! basic_mapped_value_from { + ( $x:ident, $y:ident ) => { + impl<'a> From<&$x> for MappedValue<'a> { + fn from(val: &$x) -> MappedValue<'a> { + MappedValue::$y(*val) + } + } + }; +} + +basic_mapped_value_from!(i8, Int8); +basic_mapped_value_from!(i16, Int16); +basic_mapped_value_from!(i32, Int32); +basic_mapped_value_from!(i64, Int64); +basic_mapped_value_from!(u8, UInt8); +basic_mapped_value_from!(u16, UInt16); +basic_mapped_value_from!(u32, UInt32); +basic_mapped_value_from!(u64, UInt64); +basic_mapped_value_from!(f32, Float32); +basic_mapped_value_from!(f64, Float64); +basic_mapped_value_from!(bool, Bool); + +impl<'a> From<&'a String> for MappedValue<'a> { + fn from(val: &'a String ) -> MappedValue<'a> { + MappedValue::String(val) + } +} + +impl<'a, T: MappedStructure<'a>> From<&'a Vec> for MappedValue<'a> { + fn from(val: &'a Vec ) -> MappedValue<'a> { + MappedValue::List(val) + } +} + +impl<'a,T: MappedStructure<'a>> From<&'a T> for MappedValue<'a> { + fn from(val: &'a T ) -> MappedValue<'a> { + MappedValue::Struct(val) } - } pub struct StatefulContext<'a> { -- cgit v1.2.3