mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
MAINT: remove unnecessary cloning
This commit is contained in:
parent
df8834dddc
commit
97d2493441
@ -83,7 +83,7 @@ fn parse_expression(i: SliceIter<Element>) -> Result<SliceIter<Element>, Express
|
|||||||
abort_on_end!(i_);
|
abort_on_end!(i_);
|
||||||
let el = i_.next();
|
let el = i_.next();
|
||||||
if let Some(&Element::Expr(ref expr)) = el {
|
if let Some(&Element::Expr(ref expr)) = el {
|
||||||
return Result::Complete(i_.clone(), expr.clone());
|
return Result::Complete(i_, expr.clone());
|
||||||
}
|
}
|
||||||
return Result::Fail(Error::new(
|
return Result::Fail(Error::new(
|
||||||
format!(
|
format!(
|
||||||
@ -101,7 +101,7 @@ fn parse_bool_operator(i: SliceIter<Element>) -> Result<SliceIter<Element>, Bina
|
|||||||
if let Some(&Element::Op(ref op)) = el {
|
if let Some(&Element::Op(ref op)) = el {
|
||||||
match op {
|
match op {
|
||||||
BinaryExprType::AND | BinaryExprType::OR => {
|
BinaryExprType::AND | BinaryExprType::OR => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
_other => {
|
_other => {
|
||||||
// noop
|
// noop
|
||||||
@ -124,7 +124,7 @@ fn parse_dot_operator(i: SliceIter<Element>) -> Result<SliceIter<Element>, Binar
|
|||||||
if let Some(&Element::Op(ref op)) = el {
|
if let Some(&Element::Op(ref op)) = el {
|
||||||
match op {
|
match op {
|
||||||
&BinaryExprType::DOT => {
|
&BinaryExprType::DOT => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
_other => {
|
_other => {
|
||||||
// noop
|
// noop
|
||||||
@ -147,10 +147,10 @@ fn parse_sum_operator(i: SliceIter<Element>) -> Result<SliceIter<Element>, Binar
|
|||||||
if let Some(&Element::Op(ref op)) = el {
|
if let Some(&Element::Op(ref op)) = el {
|
||||||
match op {
|
match op {
|
||||||
&BinaryExprType::Add => {
|
&BinaryExprType::Add => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
&BinaryExprType::Sub => {
|
&BinaryExprType::Sub => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
_other => {
|
_other => {
|
||||||
// noop
|
// noop
|
||||||
@ -173,13 +173,13 @@ fn parse_product_operator(i: SliceIter<Element>) -> Result<SliceIter<Element>, B
|
|||||||
if let Some(&Element::Op(ref op)) = el {
|
if let Some(&Element::Op(ref op)) = el {
|
||||||
match op {
|
match op {
|
||||||
&BinaryExprType::Mul => {
|
&BinaryExprType::Mul => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
&BinaryExprType::Div => {
|
&BinaryExprType::Div => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
&BinaryExprType::Mod => {
|
&BinaryExprType::Mod => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
_other => {
|
_other => {
|
||||||
// noop
|
// noop
|
||||||
@ -227,7 +227,7 @@ fn parse_compare_operator(i: SliceIter<Element>) -> Result<SliceIter<Element>, B
|
|||||||
| &BinaryExprType::Equal
|
| &BinaryExprType::Equal
|
||||||
| &BinaryExprType::IS
|
| &BinaryExprType::IS
|
||||||
| &BinaryExprType::IN => {
|
| &BinaryExprType::IN => {
|
||||||
return Result::Complete(i_.clone(), op.clone());
|
return Result::Complete(i_, op.clone());
|
||||||
}
|
}
|
||||||
_other => {
|
_other => {
|
||||||
// noop
|
// noop
|
||||||
@ -263,7 +263,7 @@ fn parse_operand_list<'a>(i: SliceIter<'a, Token>) -> ParseResult<'a, Vec<Elemen
|
|||||||
let err = Error::caused_by(
|
let err = Error::caused_by(
|
||||||
"Missing operand for binary expression",
|
"Missing operand for binary expression",
|
||||||
Box::new(e),
|
Box::new(e),
|
||||||
Box::new(_i.clone()),
|
Box::new(_i),
|
||||||
);
|
);
|
||||||
return Result::Abort(err);
|
return Result::Abort(err);
|
||||||
}
|
}
|
||||||
@ -360,7 +360,6 @@ fn parse_op(
|
|||||||
if !eoi(i.clone()).is_complete() {
|
if !eoi(i.clone()).is_complete() {
|
||||||
let (_, peek_op) = try_parse!(parse_operator_element(i.clone()));
|
let (_, peek_op) = try_parse!(parse_operator_element(i.clone()));
|
||||||
lookahead_op = peek_op;
|
lookahead_op = peek_op;
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
while !eoi(i.clone()).is_complete()
|
while !eoi(i.clone()).is_complete()
|
||||||
&& (lookahead_op.precedence_level() > op.precedence_level())
|
&& (lookahead_op.precedence_level() > op.precedence_level())
|
||||||
@ -437,8 +436,8 @@ pub fn op_expression<'a>(i: SliceIter<'a, Token>) -> Result<SliceIter<Token>, Ex
|
|||||||
Result::Abort(err)
|
Result::Abort(err)
|
||||||
}
|
}
|
||||||
Result::Incomplete(_) => Result::Incomplete(i.clone()),
|
Result::Incomplete(_) => Result::Incomplete(i.clone()),
|
||||||
Result::Complete(_rest_ops, expr) => {
|
Result::Complete(rest_ops, expr) => {
|
||||||
if _rest_ops.peek_next().is_some() {
|
if rest_ops.peek_next().is_some() {
|
||||||
panic!("premature abort parsing Operator expression!");
|
panic!("premature abort parsing Operator expression!");
|
||||||
}
|
}
|
||||||
Result::Complete(rest.clone(), expr)
|
Result::Complete(rest.clone(), expr)
|
||||||
|
@ -17,7 +17,7 @@ use std;
|
|||||||
|
|
||||||
use abortable_parser::combinators::*;
|
use abortable_parser::combinators::*;
|
||||||
use abortable_parser::iter::SliceIter;
|
use abortable_parser::iter::SliceIter;
|
||||||
use abortable_parser::{Error, Offsetable, Result};
|
use abortable_parser::{Error, Result};
|
||||||
|
|
||||||
use crate::ast::*;
|
use crate::ast::*;
|
||||||
use crate::error::StackPrinter;
|
use crate::error::StackPrinter;
|
||||||
@ -662,14 +662,8 @@ macro_rules! word {
|
|||||||
pub fn pos<'a>(i: SliceIter<'a, Token>) -> Result<SliceIter<'a, Token>, Position> {
|
pub fn pos<'a>(i: SliceIter<'a, Token>) -> Result<SliceIter<'a, Token>, Position> {
|
||||||
let mut _i = i.clone();
|
let mut _i = i.clone();
|
||||||
let tok = _i.next().unwrap();
|
let tok = _i.next().unwrap();
|
||||||
let line = tok.pos.line;
|
let pos = tok.pos.clone();
|
||||||
let column = tok.pos.column;
|
Result::Complete(i, pos)
|
||||||
let pos = Position::new(line, column, i.get_offset());
|
|
||||||
let pos = match tok.pos.file {
|
|
||||||
Some(ref f) => pos.with_file(f),
|
|
||||||
None => pos,
|
|
||||||
};
|
|
||||||
Result::Complete(i.clone(), pos)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
use abortable_parser::{Result, SliceIter};
|
use abortable_parser::{Offsetable, Result, SliceIter};
|
||||||
|
|
||||||
use crate::iter::OffsetStrIter;
|
use crate::iter::OffsetStrIter;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user