modify number_token to produce partial lexing results (#2986)

This commit is contained in:
Mark Thom
2025-07-05 00:58:28 -07:00
parent 8e01eea440
commit ce56b5ed6b
2 changed files with 144 additions and 210 deletions

View File

@@ -911,27 +911,16 @@ impl MachineState {
use crate::parser::lexer::*;
let nx = self.store(self.deref(self.registers[2]));
let add_dot = !string.ends_with('.') || string.ends_with("'.");
let cursor = std::io::Cursor::new(string);
let iter = std::io::Read::chain(cursor, {
let mut dot_buf: [u8; '.'.len_utf8()] = [0u8];
if add_dot && !string.ends_with('\'') {
'.'.encode_utf8(&mut dot_buf);
}
std::io::Cursor::new(dot_buf)
});
let iter = std::io::Cursor::new(string);
let mut lexer = Lexer::new(CharReader::new(iter), self);
let mut tokens = vec![];
match lexer.next_token() {
match lexer.next_number_token() {
Ok(token @ Token::Literal(Literal::Atom(atom!("-")) | Literal::Char('-'))) => {
tokens.push(token);
if let Ok(token) = lexer.next_token() {
if let Ok(token) = lexer.next_number_token() {
tokens.push(token);
}
}