@@ -65,7 +65,7 @@ class ASTLoweringExternItem : public ASTLoweringBase
65
65
item.get_outer_attrs (), item.get_locus ());
66
66
}
67
67
68
- void visit (AST::ExternalFunctionItem &function) override
68
+ void visit (AST::Function &function) override
69
69
{
70
70
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
71
71
HIR::WhereClause where_clause (std::move (where_clause_items));
@@ -88,12 +88,25 @@ class ASTLoweringExternItem : public ASTLoweringBase
88
88
std::vector<HIR::NamedFunctionParam> function_params;
89
89
for (auto it = begin; it != end; it++)
90
90
{
91
+ auto param = static_cast <AST::FunctionParam *> (it->get ());
92
+
93
+ if (param->is_variadic () || param->is_self ())
94
+ continue ;
95
+ auto param_kind = param->get_pattern ()->get_pattern_kind ();
96
+
97
+ rust_assert (param_kind == AST::Pattern::Kind::Identifier
98
+ || param_kind == AST::Pattern::Kind::Wildcard);
99
+ auto param_ident = static_cast <AST::IdentifierPattern *> (
100
+ param->get_pattern ().get ());
101
+ Identifier param_name = param_kind == AST::Pattern::Kind::Identifier
102
+ ? param_ident->get_ident ()
103
+ : std::string (" _" );
104
+
91
105
HIR::Type *param_type
92
- = ASTLoweringType::translate (it->get_type ().get ());
93
- Identifier param_name = it->get_name ();
106
+ = ASTLoweringType::translate (param->get_type ().get ());
94
107
95
108
auto crate_num = mappings->get_current_crate ();
96
- Analysis::NodeMapping mapping (crate_num, it ->get_node_id (),
109
+ Analysis::NodeMapping mapping (crate_num, param ->get_node_id (),
97
110
mappings->get_next_hir_id (crate_num),
98
111
mappings->get_next_localdef_id (
99
112
crate_num));
@@ -109,7 +122,7 @@ class ASTLoweringExternItem : public ASTLoweringBase
109
122
mappings->get_next_localdef_id (crate_num));
110
123
111
124
translated = new HIR::ExternalFunctionItem (
112
- mapping, function.get_identifier (), std::move (generic_params),
125
+ mapping, function.get_function_name (), std::move (generic_params),
113
126
std::unique_ptr<HIR::Type> (return_type), std::move (where_clause),
114
127
std::move (function_params), is_variadic, std::move (vis),
115
128
function.get_outer_attrs (), function.get_locus ());
0 commit comments