Clippy conformance
This commit is contained in:
parent
e45df2efe7
commit
b26c0ab639
|
@ -126,8 +126,8 @@ impl ExecEnv {
|
||||||
match kind {
|
match kind {
|
||||||
// Arithmetic operators.
|
// Arithmetic operators.
|
||||||
Add | Subtract | Multiply | Divide => {
|
Add | Subtract | Multiply | Divide => {
|
||||||
let lhs = lhs.to_i32(&expr.span)?;
|
let lhs = lhs.try_into_i32(&expr.span)?;
|
||||||
let rhs = rhs.to_i32(&expr.span)?;
|
let rhs = rhs.try_into_i32(&expr.span)?;
|
||||||
|
|
||||||
let res = match kind {
|
let res = match kind {
|
||||||
Add => lhs.checked_add(rhs),
|
Add => lhs.checked_add(rhs),
|
||||||
|
@ -145,8 +145,8 @@ impl ExecEnv {
|
||||||
|
|
||||||
// Numeric comparisons.
|
// Numeric comparisons.
|
||||||
Less | Greater => {
|
Less | Greater => {
|
||||||
let lhs = lhs.to_i32(&expr.span)?;
|
let lhs = lhs.try_into_i32(&expr.span)?;
|
||||||
let rhs = rhs.to_i32(&expr.span)?;
|
let rhs = rhs.try_into_i32(&expr.span)?;
|
||||||
|
|
||||||
let res = match kind {
|
let res = match kind {
|
||||||
Less => lhs < rhs,
|
Less => lhs < rhs,
|
||||||
|
@ -168,8 +168,8 @@ impl ExecEnv {
|
||||||
|
|
||||||
// Logical connectives.
|
// Logical connectives.
|
||||||
And | Or => {
|
And | Or => {
|
||||||
let lhs = lhs.to_bool();
|
let lhs = lhs.into_bool();
|
||||||
let rhs = rhs.to_bool();
|
let rhs = rhs.into_bool();
|
||||||
let res = match kind {
|
let res = match kind {
|
||||||
And => lhs && rhs,
|
And => lhs && rhs,
|
||||||
Or => lhs || rhs,
|
Or => lhs || rhs,
|
||||||
|
@ -179,7 +179,7 @@ impl ExecEnv {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Not(expr) => Bool(!self.eval_expr(&expr)?.to_bool()),
|
Not(expr) => Bool(!self.eval_expr(&expr)?.into_bool()),
|
||||||
Literal(value) => value.clone(),
|
Literal(value) => value.clone(),
|
||||||
|
|
||||||
// TODO: not too happy with constructing an artificial
|
// TODO: not too happy with constructing an artificial
|
||||||
|
@ -225,7 +225,7 @@ impl ExecEnv {
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|tape_len| {
|
.map(|tape_len| {
|
||||||
self.eval_expr(tape_len)
|
self.eval_expr(tape_len)
|
||||||
.and_then(|v| v.to_i32(&stmt.span))
|
.and_then(|v| v.try_into_i32(&stmt.span))
|
||||||
.map(|len| len as usize)
|
.map(|len| len as usize)
|
||||||
})
|
})
|
||||||
.unwrap_or(Ok(crate::brian::DEFAULT_TAPE_SIZE_LIMIT))?,
|
.unwrap_or(Ok(crate::brian::DEFAULT_TAPE_SIZE_LIMIT))?,
|
||||||
|
@ -233,7 +233,7 @@ impl ExecEnv {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
StmtKind::If { cond, body } => {
|
StmtKind::If { cond, body } => {
|
||||||
if self.eval_expr(cond)?.to_bool() {
|
if self.eval_expr(cond)?.into_bool() {
|
||||||
return self.eval_stmts_hs(&body.block, true);
|
return self.eval_stmts_hs(&body.block, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ impl<'source> Parser<'source> {
|
||||||
)),
|
)),
|
||||||
Token::Rickroll => Ok(Stmt::new(
|
Token::Rickroll => Ok(Stmt::new(
|
||||||
self.semi_terminated(StmtKind::Rickroll)?,
|
self.semi_terminated(StmtKind::Rickroll)?,
|
||||||
start..self.lexer.span().end
|
start..self.lexer.span().end,
|
||||||
)),
|
)),
|
||||||
|
|
||||||
Token::Identifier(_)
|
Token::Identifier(_)
|
||||||
|
@ -123,7 +123,7 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::Identifier(iden) => Ok(Iden {
|
Token::Identifier(iden) => Ok(Iden {
|
||||||
iden: if self.tdark {
|
iden: if self.tdark {
|
||||||
|
@ -206,7 +206,7 @@ impl<'source> Parser<'source> {
|
||||||
let next = self
|
let next = self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?;
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?;
|
||||||
ExprKind::Not(Box::new(self.parse_expr(next, buf)?))
|
ExprKind::Not(Box::new(self.parse_expr(next, buf)?))
|
||||||
},
|
},
|
||||||
start..self.lexer.span().end,
|
start..self.lexer.span().end,
|
||||||
|
@ -225,13 +225,13 @@ impl<'source> Parser<'source> {
|
||||||
Ok(ExprKind::BinOp {
|
Ok(ExprKind::BinOp {
|
||||||
lhs: Box::new(
|
lhs: Box::new(
|
||||||
lhs.take()
|
lhs.take()
|
||||||
.ok_or(Error::new(ErrorKind::MissingLhs, self.lexer.span()))?,
|
.ok_or_else(|| Error::new(ErrorKind::MissingLhs, self.lexer.span()))?,
|
||||||
),
|
),
|
||||||
rhs: {
|
rhs: {
|
||||||
let next = self
|
let next = self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?;
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?;
|
||||||
Box::new(self.parse_expr(next, &mut None)?)
|
Box::new(self.parse_expr(next, &mut None)?)
|
||||||
},
|
},
|
||||||
kind,
|
kind,
|
||||||
|
@ -245,12 +245,12 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
t if t == terminate => {
|
t if t == terminate => {
|
||||||
break buf
|
break buf.take().ok_or_else(|| {
|
||||||
.take()
|
Error::new(ErrorKind::UnexpectedToken(t), self.lexer.span())
|
||||||
.ok_or(Error::new(ErrorKind::UnexpectedToken(t), self.lexer.span()))?
|
})?
|
||||||
}
|
}
|
||||||
t => buf = Some(self.parse_expr(t, &mut buf)?),
|
t => buf = Some(self.parse_expr(t, &mut buf)?),
|
||||||
}
|
}
|
||||||
|
@ -266,7 +266,7 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::RightCurly => break,
|
Token::RightCurly => break,
|
||||||
t => block.push(self.parse(t)?),
|
t => block.push(self.parse(t)?),
|
||||||
|
@ -284,14 +284,13 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
// Print to stdout
|
// Print to stdout
|
||||||
Token::Print => {
|
Token::Print => {
|
||||||
let stmt = StmtKind::Print(buf.take().ok_or(Error::new(
|
let stmt = StmtKind::Print(buf.take().ok_or_else(|| {
|
||||||
ErrorKind::UnexpectedToken(Token::Print),
|
Error::new(ErrorKind::UnexpectedToken(Token::Print), self.lexer.span())
|
||||||
self.lexer.span(),
|
})?);
|
||||||
))?);
|
|
||||||
break self.semi_terminated(stmt)?;
|
break self.semi_terminated(stmt)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,7 +351,7 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::RightParen => break,
|
Token::RightParen => break,
|
||||||
Token::Identifier(i) => {
|
Token::Identifier(i) => {
|
||||||
|
@ -362,7 +361,7 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::Comma => continue,
|
Token::Comma => continue,
|
||||||
Token::RightParen => break,
|
Token::RightParen => break,
|
||||||
|
@ -392,7 +391,7 @@ impl<'source> Parser<'source> {
|
||||||
let tape_len = match self
|
let tape_len = match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::LeftParen => {
|
Token::LeftParen => {
|
||||||
let len = Some(self.expr_flow(Token::RightParen)?);
|
let len = Some(self.expr_flow(Token::RightParen)?);
|
||||||
|
@ -413,7 +412,7 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::Plus
|
Token::Plus
|
||||||
| Token::Minus
|
| Token::Minus
|
||||||
|
@ -443,7 +442,7 @@ impl<'source> Parser<'source> {
|
||||||
match self
|
match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
// End of argument list
|
// End of argument list
|
||||||
Token::RightParen => {
|
Token::RightParen => {
|
||||||
|
@ -478,7 +477,7 @@ impl<'source> Parser<'source> {
|
||||||
let init = match self
|
let init = match self
|
||||||
.lexer
|
.lexer
|
||||||
.next()
|
.next()
|
||||||
.ok_or(Error::unexpected_eof(self.lexer.span().start))?
|
.ok_or_else(|| Error::unexpected_eof(self.lexer.span().start))?
|
||||||
{
|
{
|
||||||
Token::Equal => Some(self.expr_flow(Token::Semicolon)?),
|
Token::Equal => Some(self.expr_flow(Token::Semicolon)?),
|
||||||
Token::Semicolon => None,
|
Token::Semicolon => None,
|
||||||
|
|
|
@ -122,7 +122,7 @@ impl Value {
|
||||||
/// Attempt to coerce a Value to an integer. If the conversion
|
/// Attempt to coerce a Value to an integer. If the conversion
|
||||||
/// fails, the generated error message is associated with the
|
/// fails, the generated error message is associated with the
|
||||||
/// given span.
|
/// given span.
|
||||||
pub fn to_i32(self, span: &Range<usize>) -> Result<i32, Error> {
|
pub fn try_into_i32(self, span: &Range<usize>) -> Result<i32, Error> {
|
||||||
match self {
|
match self {
|
||||||
Value::Int(i) => Ok(i),
|
Value::Int(i) => Ok(i),
|
||||||
_ => Err(Error {
|
_ => Err(Error {
|
||||||
|
@ -133,13 +133,13 @@ impl Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Coerce a Value to a boolean. The conversion cannot fail.
|
/// Coerce a Value to a boolean. The conversion cannot fail.
|
||||||
pub fn to_bool(self) -> bool {
|
pub fn into_bool(self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
// Booleans and abooleans have a trivial conversion.
|
// Booleans and abooleans have a trivial conversion.
|
||||||
Value::Bool(b) => b,
|
Value::Bool(b) => b,
|
||||||
Value::Abool(b) => b.into(),
|
Value::Abool(b) => b.into(),
|
||||||
// The empty string is falsey, other strings are truthy.
|
// The empty string is falsey, other strings are truthy.
|
||||||
Value::Str(s) => s.len() != 0,
|
Value::Str(s) => !s.is_empty(),
|
||||||
// 0 is falsey, nonzero is truthy.
|
// 0 is falsey, nonzero is truthy.
|
||||||
Value::Int(x) => x != 0,
|
Value::Int(x) => x != 0,
|
||||||
// Functios are always truthy.
|
// Functios are always truthy.
|
||||||
|
|
Loading…
Reference in a new issue