From 323afe4c89f529137c034a7ecbb69df221b46e31 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sun, 19 Jan 2025 00:02:22 +0100 Subject: [PATCH] make ) a closer from num/sym/key, and we run again! borkenly --- edn/src/iter.rs | 33 +++++++++++++++------------------ edn/src/token.rs | 4 ++-- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/edn/src/iter.rs b/edn/src/iter.rs index 7679f0e2..4b69d6a1 100644 --- a/edn/src/iter.rs +++ b/edn/src/iter.rs @@ -15,41 +15,38 @@ impl<'a> TokenIter<'a> { } } pub const fn peek_src <'a> (source: &'a str) -> Option> { - let mut token: Token<'a> = Token::new(source, Nil, 0, 0); + let mut token: Token<'a> = Token::new(source, 0, 0, Nil); iterate!(char_indices(source) => (start, c) => token = match token.value() { Err(_) => return Some(token), Nil => match c { - ' '|'\n'|'\r'|'\t' => token.grow(), - '(' => Token { source, start, length: 1, - value: Value::Exp(1, TokenIter(str_range(source, start, start + 1))), - }, - ':'|'@' => Token { source, start, length: 1, - value: Value::Sym(str_range(source, start, start + 1)), - }, - '/'|'a'..='z' => Token { source, start, length: 1, - value: Value::Key(str_range(source, start, start + 1)), - }, - '0'..='9' => Token { source, start, length: 1, - value: match to_digit(c) { + ' '|'\n'|'\r'|'\t' => + token.grow(), + '(' => + Token::new(source, start, 1, Exp(1, TokenIter(str_range(source, start, start + 1)))), + ':'|'@' => + Token::new(source, start, 1, Sym(str_range(source, start, start + 1))), + '/'|'a'..='z' => + Token::new(source, start, 1, Key(str_range(source, start, start + 1))), + '0'..='9' => + Token::new(source, start, 1, match to_digit(c) { Ok(c) => Value::Num(c), Result::Err(e) => Value::Err(e) - } - }, + }), _ => token.error(Unexpected(c)) }, Num(n) => match c { '0'..='9' => token.grow_num(n, c), - ' '|'\n'|'\r'|'\t' => return Some(token), + ' '|'\n'|'\r'|'\t'|')' => return Some(token), _ => token.error(Unexpected(c)) }, Sym(_) => match c { 'a'..='z'|'0'..='9'|'-' => token.grow_sym(), - ' '|'\n'|'\r'|'\t' => return Some(token), + ' '|'\n'|'\r'|'\t'|')' => return Some(token), _ => token.error(Unexpected(c)) }, Key(_) => match c { 'a'..='z'|'0'..='9'|'-'|'/' => token.grow_key(), - ' '|'\n'|'\r'|'\t' => return Some(token), + ' '|'\n'|'\r'|'\t'|')' => return Some(token), _ => token.error(Unexpected(c)) }, Exp(depth, _) => match depth { diff --git a/edn/src/token.rs b/edn/src/token.rs index ee11928a..d3ee2bba 100644 --- a/edn/src/token.rs +++ b/edn/src/token.rs @@ -15,8 +15,8 @@ use self::Value::*; Exp(usize, TokenIter<'a>), } impl<'a> Token<'a> { - pub const fn new (source: &'a str, value: Value<'a>, start: usize, length: usize) -> Self { - Self { source, value, start, length } + pub const fn new (source: &'a str, start: usize, length: usize, value: Value<'a>) -> Self { + Self { source, start, length, value } } pub const fn end (&self) -> usize { self.start + self.length