From d56b0b50e24dc57f3f804a392743804ac76ea9a8 Mon Sep 17 00:00:00 2001 From: acdenisSK Date: Thu, 19 Jul 2018 11:05:01 +0200 Subject: Use an `Option` to denote end --- src/framework/standard/args.rs | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) (limited to 'src/framework') diff --git a/src/framework/standard/args.rs b/src/framework/standard/args.rs index d72537c..17ee460 100644 --- a/src/framework/standard/args.rs +++ b/src/framework/standard/args.rs @@ -85,7 +85,6 @@ enum TokenKind { Delimiter, Argument, QuotedArgument, - Eof, } #[derive(Debug)] @@ -99,14 +98,6 @@ impl<'a> Token<'a> { fn new(kind: TokenKind, lit: &'a str, pos: usize) -> Self { Token { kind, lit, pos } } - - fn empty() -> Self { - Token { - kind: TokenKind::Eof, - lit: "", - pos: !0, - } - } } #[derive(Debug, Clone)] @@ -170,15 +161,15 @@ impl<'a> Lexer<'a> { Some(()) } - fn commit(&mut self) -> Token<'a> { + fn commit(&mut self) -> Option> { if self.at_end() { - return Token::empty(); + return None; } if self.current().unwrap().contains(self.delims) { let start = self.offset; self.next(); - return Token::new(TokenKind::Delimiter, &self.msg[start..self.offset], start); + return Some(Token::new(TokenKind::Delimiter, &self.msg[start..self.offset], start)); } if self.current().unwrap() == "\"" { @@ -193,12 +184,12 @@ impl<'a> Lexer<'a> { let end = self.offset; - return if self.at_end() && &self.msg[find_start(self.msg, end).unwrap()..end] != "\"" { + return Some(if self.at_end() && &self.msg[find_start(self.msg, end).unwrap()..end] != "\"" { // We're missing an end quote. View this as a normal argument. Token::new(TokenKind::Argument, &self.msg[start..], start) } else { Token::new(TokenKind::QuotedArgument, &self.msg[start..end], start) - }; + }); } let start = self.offset; @@ -207,7 +198,7 @@ impl<'a> Lexer<'a> { self.next(); } - Token::new(TokenKind::Argument, &self.msg[start..self.offset], start) + Some(Token::new(TokenKind::Argument, &self.msg[start..self.offset], start)) } } @@ -342,9 +333,7 @@ impl Args { let mut args = Vec::new(); - while !lex.at_end() { - let token = lex.commit(); - + while let Some(token) = lex.commit() { if token.kind == TokenKind::Delimiter { continue; } -- cgit v1.2.3