Skip to content

Commit 65503d6

Browse files
committed
Avoid clone when converting attribute name to range
1 parent 6cd9155 commit 65503d6

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

vhdl_lang/src/syntax/range.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,25 @@ fn parse_name_or_range(stream: &mut TokenStream) -> ParseResult<NameOrRange> {
5151
pos,
5252
} = expr
5353
{
54-
if let Name::Attribute(ref attribute_name) = *name.as_ref() {
54+
if let Name::Attribute(attribute_name) = *name {
5555
if matches!(
5656
attribute_name.attr.item,
5757
AttributeDesignator::Range | AttributeDesignator::ReverseRange
5858
) {
59-
// @TODO avoid clone
60-
let range = ast::Range::Attribute(attribute_name.clone());
61-
return Ok(NameOrRange::Range(WithPos::from(range, pos)));
59+
let range = ast::Range::Attribute(attribute_name);
60+
Ok(NameOrRange::Range(WithPos::from(range, pos)))
61+
} else {
62+
Ok(NameOrRange::Name(WithPos::from(
63+
Name::Attribute(attribute_name),
64+
pos,
65+
)))
6266
}
67+
} else {
68+
Ok(NameOrRange::Name(WithPos::from(*name, pos)))
6369
}
64-
return Ok(NameOrRange::Name(WithPos::from(*name, pos)));
70+
} else {
71+
Err(Diagnostic::error(&expr, "Expected name or range"))
6572
}
66-
67-
Err(Diagnostic::error(&expr, "Expected name or range"))
6873
}
6974

7075
/// {selected_name}'range

0 commit comments

Comments
 (0)