@@ -205,5 +205,42 @@ TEST(AstTest, ToStringCastWithinLtComparison) {
205
205
EXPECT_EQ (lt->ToString (), " (x as t) < x" );
206
206
}
207
207
208
+ TEST (AstTest, GetFuncParam) {
209
+ // Create an empty function
210
+ // fn f(p: u32) -> u32 {}
211
+
212
+ FileTable file_table;
213
+ const Span fake_span;
214
+ Module m (" test" , /* fs_path=*/ std::nullopt , file_table);
215
+
216
+ BuiltinNameDef* builtin_name_def = m.GetOrCreateBuiltinNameDef (" u32" );
217
+ BuiltinTypeAnnotation* u32_type_annotation = m.Make <BuiltinTypeAnnotation>(
218
+ fake_span, BuiltinType::kU32 , builtin_name_def);
219
+
220
+ NameDef* func_name_def =
221
+ m.Make <NameDef>(fake_span, std::string (" f" ), nullptr );
222
+ NameDef* param_name_def =
223
+ m.Make <NameDef>(fake_span, std::string (" p" ), nullptr );
224
+
225
+ std::vector<Param*> params;
226
+ params.push_back (m.Make <Param>(param_name_def, u32_type_annotation));
227
+
228
+ std::vector<ParametricBinding*> parametric_bindings;
229
+
230
+ StatementBlock* block =
231
+ m.Make <StatementBlock>(fake_span, std::vector<Statement*>{}, true );
232
+
233
+ Function* f =
234
+ m.Make <Function>(fake_span, func_name_def, parametric_bindings, params,
235
+ u32_type_annotation, block, FunctionTag::kNormal , false );
236
+
237
+ XLS_ASSERT_OK_AND_ASSIGN (Param * found_param, f->GetParamByName (" p" ));
238
+ EXPECT_EQ (found_param, params[0 ]);
239
+
240
+ EXPECT_THAT (f->GetParamByName (" not_a_param" ),
241
+ StatusIs (absl::StatusCode::kNotFound ,
242
+ HasSubstr (" Param 'not_a_param' not a parameter" )));
243
+ }
244
+
208
245
} // namespace
209
246
} // namespace xls::dslx
0 commit comments