@@ -487,7 +487,7 @@ fn string_literal(i: &mut TokenSlice) -> ModalResult<Node<Literal>> {
487
487
let result = Node :: new (
488
488
Literal {
489
489
value,
490
- raw : token. value . clone ( ) ,
490
+ raw : token. value ,
491
491
digest : None ,
492
492
} ,
493
493
token. start ,
@@ -550,7 +550,7 @@ pub(crate) fn unsigned_number_literal(i: &mut TokenSlice) -> ModalResult<Node<Li
550
550
Ok ( Node :: new (
551
551
Literal {
552
552
value,
553
- raw : token. value . clone ( ) ,
553
+ raw : token. value ,
554
554
digest : None ,
555
555
} ,
556
556
token. start ,
@@ -1213,12 +1213,12 @@ fn if_expr(i: &mut TokenSlice) -> ModalResult<BoxNode<IfExpression>> {
1213
1213
1214
1214
// If there's a non-fatal parser error (e.g. a problem with the `else` branch),
1215
1215
// return this after emitting the nonfatal error.
1216
- let if_with_no_else = || {
1216
+ let if_with_no_else = |cond , then_val , else_ifs | {
1217
1217
Ok ( Node :: boxed (
1218
1218
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,
1222
1222
final_else : Node :: boxed ( Default :: default ( ) , 0 , 0 , if_. module_id ) ,
1223
1223
digest : Default :: default ( ) ,
1224
1224
} ,
@@ -1244,33 +1244,33 @@ fn if_expr(i: &mut TokenSlice) -> ModalResult<BoxNode<IfExpression>> {
1244
1244
. parse_next ( i) ;
1245
1245
let Ok ( else_) = else_ else {
1246
1246
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 ) ;
1248
1248
} ;
1249
1249
let else_range = SourceRange :: new ( else_, else_ + 4 , if_. module_id ) ;
1250
1250
ignore_whitespace ( i) ;
1251
1251
1252
1252
// Parse the else clause
1253
1253
if open_brace ( i) . is_err ( ) {
1254
1254
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 ) ;
1256
1256
}
1257
1257
ignore_whitespace ( i) ;
1258
1258
let Ok ( final_else) = program. parse_next ( i) . map ( Box :: new) else {
1259
1259
ParseContext :: err ( CompilationError :: err ( else_range, IF_ELSE_CANNOT_BE_EMPTY ) ) ;
1260
1260
let _ = opt ( close_brace) . parse_next ( i) ;
1261
- return if_with_no_else ( ) ;
1261
+ return if_with_no_else ( cond , then_val , else_ifs ) ;
1262
1262
} ;
1263
1263
ignore_whitespace ( i) ;
1264
1264
1265
1265
if final_else. body . is_empty ( ) {
1266
1266
ParseContext :: err ( CompilationError :: err ( else_range, IF_ELSE_CANNOT_BE_EMPTY ) ) ;
1267
1267
let _ = opt ( close_brace) . parse_next ( i) ;
1268
- return if_with_no_else ( ) ;
1268
+ return if_with_no_else ( cond , then_val , else_ifs ) ;
1269
1269
}
1270
1270
if !final_else. ends_with_expr ( ) {
1271
1271
ParseContext :: err ( CompilationError :: err ( else_range, ELSE_MUST_END_IN_EXPR ) ) ;
1272
1272
let _ = opt ( close_brace) . parse_next ( i) ;
1273
- return if_with_no_else ( ) ;
1273
+ return if_with_no_else ( cond , then_val , else_ifs ) ;
1274
1274
}
1275
1275
1276
1276
let end = close_brace ( i) ?. end ;
@@ -2146,7 +2146,7 @@ fn expr_allowed_in_pipe_expr(i: &mut TokenSlice) -> ModalResult<Expr> {
2146
2146
. context ( expected ( "a KCL expression (but not a pipe expression)" ) )
2147
2147
. parse_next ( i) ?;
2148
2148
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.
2150
2150
if let Ok ( mem) = maybe_member {
2151
2151
return Ok ( Expr :: MemberExpression ( Box :: new ( mem) ) ) ;
2152
2152
}
0 commit comments