Skip to content

Commit 88fad30

Browse files
authored
KCL: Remove clones in parser (#7856)
These aren't needed, but on ARM64 MacOS it didn't make a difference to benchmarks, so I assume it's been optimized out by the compiler.
1 parent 0fc746d commit 88fad30

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

rust/kcl-lib/src/parsing/parser.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ fn string_literal(i: &mut TokenSlice) -> ModalResult<Node<Literal>> {
487487
let result = Node::new(
488488
Literal {
489489
value,
490-
raw: token.value.clone(),
490+
raw: token.value,
491491
digest: None,
492492
},
493493
token.start,
@@ -550,7 +550,7 @@ pub(crate) fn unsigned_number_literal(i: &mut TokenSlice) -> ModalResult<Node<Li
550550
Ok(Node::new(
551551
Literal {
552552
value,
553-
raw: token.value.clone(),
553+
raw: token.value,
554554
digest: None,
555555
},
556556
token.start,
@@ -1213,12 +1213,12 @@ fn if_expr(i: &mut TokenSlice) -> ModalResult<BoxNode<IfExpression>> {
12131213

12141214
// If there's a non-fatal parser error (e.g. a problem with the `else` branch),
12151215
// return this after emitting the nonfatal error.
1216-
let if_with_no_else = || {
1216+
let if_with_no_else = |cond, then_val, else_ifs| {
12171217
Ok(Node::boxed(
12181218
IfExpression {
1219-
cond: cond.clone(),
1220-
then_val: then_val.clone(),
1221-
else_ifs: else_ifs.clone(),
1219+
cond,
1220+
then_val,
1221+
else_ifs,
12221222
final_else: Node::boxed(Default::default(), 0, 0, if_.module_id),
12231223
digest: Default::default(),
12241224
},
@@ -1244,33 +1244,33 @@ fn if_expr(i: &mut TokenSlice) -> ModalResult<BoxNode<IfExpression>> {
12441244
.parse_next(i);
12451245
let Ok(else_) = else_ else {
12461246
ParseContext::err(CompilationError::err(if_.as_source_range(), MISSING_ELSE));
1247-
return if_with_no_else();
1247+
return if_with_no_else(cond, then_val, else_ifs);
12481248
};
12491249
let else_range = SourceRange::new(else_, else_ + 4, if_.module_id);
12501250
ignore_whitespace(i);
12511251

12521252
// Parse the else clause
12531253
if open_brace(i).is_err() {
12541254
ParseContext::err(CompilationError::err(else_range, ELSE_STRUCTURE));
1255-
return if_with_no_else();
1255+
return if_with_no_else(cond, then_val, else_ifs);
12561256
}
12571257
ignore_whitespace(i);
12581258
let Ok(final_else) = program.parse_next(i).map(Box::new) else {
12591259
ParseContext::err(CompilationError::err(else_range, IF_ELSE_CANNOT_BE_EMPTY));
12601260
let _ = opt(close_brace).parse_next(i);
1261-
return if_with_no_else();
1261+
return if_with_no_else(cond, then_val, else_ifs);
12621262
};
12631263
ignore_whitespace(i);
12641264

12651265
if final_else.body.is_empty() {
12661266
ParseContext::err(CompilationError::err(else_range, IF_ELSE_CANNOT_BE_EMPTY));
12671267
let _ = opt(close_brace).parse_next(i);
1268-
return if_with_no_else();
1268+
return if_with_no_else(cond, then_val, else_ifs);
12691269
}
12701270
if !final_else.ends_with_expr() {
12711271
ParseContext::err(CompilationError::err(else_range, ELSE_MUST_END_IN_EXPR));
12721272
let _ = opt(close_brace).parse_next(i);
1273-
return if_with_no_else();
1273+
return if_with_no_else(cond, then_val, else_ifs);
12741274
}
12751275

12761276
let end = close_brace(i)?.end;
@@ -2146,7 +2146,7 @@ fn expr_allowed_in_pipe_expr(i: &mut TokenSlice) -> ModalResult<Expr> {
21462146
.context(expected("a KCL expression (but not a pipe expression)"))
21472147
.parse_next(i)?;
21482148

2149-
let maybe_member = build_member_expression(parsed_expr.clone(), i);
2149+
let maybe_member = build_member_expression(parsed_expr.clone(), i); // TODO: Eliminate this clone.
21502150
if let Ok(mem) = maybe_member {
21512151
return Ok(Expr::MemberExpression(Box::new(mem)));
21522152
}

0 commit comments

Comments
 (0)