From f94f22a3d0aeff98cc9169c94b683aa139e9c81c Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 27 Mar 2021 13:16:25 +0530 Subject: implement char literals --- src/lisp/parse.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/lisp/parse.rs') diff --git a/src/lisp/parse.rs b/src/lisp/parse.rs index 4e0f427..7cca434 100644 --- a/src/lisp/parse.rs +++ b/src/lisp/parse.rs @@ -58,7 +58,12 @@ impl<'lex> Parser<'lex> { .parse::() .map(|n| LispExpr::Number(LispNumber::Integer(n))) .map_err(|_| ParseError::new(span, ParseErrorKind::LiteralParseError).into()), - Token::String(s) => Ok(LispExpr::StringLit(s.into())), + Token::String(s) => Ok(LispExpr::StringLit(s[1..s.len() - 1].into())), + Token::Char(s) => Ok(LispExpr::Char(s.chars().nth(2).ok_or_else( + || -> LispError { + ParseError::new(span, ParseErrorKind::LiteralParseError).into() + }, + )?)), Token::Name(n) => Ok(name_expr(n)), Token::BackQuote => { total_backticks += 1; -- cgit v1.2.3