message: Avoid the recursion in the lexer
  Summary: Potentially could have blown the stack with super malicious arguments if tail call didn't kick in (which it would have) - still, better safe than sorry.
diff: @@ -373,7 +373,10 @@ impl<'a> Lexer<'a> {
  }
  pub fn next(&mut self) -> Option<Lexeme> {
  - if let Some(x) = self.buffer.pop_front() {
  + loop {
  + // Note that this function doesn't always return - a few branches use `continue`
  + // to always go round the loop again.
  + return if let Some(x) = self.buffer.pop_front() {
  Some(x)
  } else if self.done {
  None
  @@ -395,8 +398,7 @@ impl<'a> Lexer<'a> {
  self.lexer.span().start as u64,
  )));
  }
  - // Ideally wouldn't be recursive here, should be a tailcall
  - self.next()
  + continue;
  }
  Token::Newline => {
  if self.parens == 0 {
  @@ -406,8 +408,7 @@ impl<'a> Lexer<'a> {
  }
  Some(Ok((span.start as u64, Token::Newline, span.end as u64)))
  } else {
  - // Ideally wouldn't be recursive here, should be a tailcall
  - self.next()
  + continue;
  }
  }
  Token::Error => Some(Err(LexerError::InvalidCharacter(
  @@ -458,6 +459,7 @@ impl<'a> Lexer<'a> {
  _ => self.wrap(token),
  },
  }
  + };
  }
  }
  }
  