Skip to content
This repository was archived by the owner on Jul 27, 2023. It is now read-only.

Commit d68b16a

Browse files
committed
Optimize arguments
1 parent 0dc8fdf commit d68b16a

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

parser/src/function.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@ type ParameterDef = (ast::Arg, Option<ast::Expr>);
2121
pub(crate) fn validate_arguments(
2222
arguments: ast::Arguments,
2323
) -> Result<ast::Arguments, LexicalError> {
24-
let mut all_args: Vec<&ast::Arg> = vec![];
24+
let mut all_args: Vec<&ast::Arg> = Vec::with_capacity(
25+
arguments.posonlyargs.len()
26+
+ arguments.args.len()
27+
+ arguments.vararg.is_some() as usize
28+
+ arguments.kwonlyargs.len()
29+
+ arguments.kwarg.is_some() as usize,
30+
);
2531

2632
all_args.extend(arguments.posonlyargs.iter());
2733
all_args.extend(arguments.args.iter());
@@ -36,11 +42,11 @@ pub(crate) fn validate_arguments(
3642
all_args.push(a);
3743
}
3844

39-
let mut all_arg_names = FxHashSet::with_hasher(Default::default());
45+
let mut all_arg_names = FxHashSet::with_capacity_and_hasher(all_args.len(), Default::default());
4046
for arg in all_args {
4147
let arg_name = &arg.arg;
4248
// Check for duplicate arguments in the function definition.
43-
if !all_arg_names.insert(arg_name) {
49+
if !all_arg_names.insert(arg_name.as_str()) {
4450
return Err(LexicalError {
4551
error: LexicalErrorType::DuplicateArgumentError(arg_name.to_string()),
4652
location: arg.start(),
@@ -104,16 +110,14 @@ pub(crate) fn parse_args(func_args: Vec<FunctionArgument>) -> Result<ArgumentLis
104110
Some((start, end, name)) => {
105111
// Check for duplicate keyword arguments in the call.
106112
if let Some(keyword_name) = &name {
107-
if keyword_names.contains(keyword_name) {
113+
if !keyword_names.insert(keyword_name.to_string()) {
108114
return Err(LexicalError {
109115
error: LexicalErrorType::DuplicateKeywordArgumentError(
110116
keyword_name.to_string(),
111117
),
112118
location: start,
113119
});
114120
}
115-
116-
keyword_names.insert(keyword_name.clone());
117121
} else {
118122
double_starred = true;
119123
}

0 commit comments

Comments
 (0)