Skip to content

Commit 42de5f9

Browse files
committed
Add mappings for external items
1 parent f3bf1f2 commit 42de5f9

File tree

5 files changed

+76
-12
lines changed

5 files changed

+76
-12
lines changed

gcc/rust/hir/rust-ast-lower-extern.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ class ASTLoweringExternItem : public ASTLoweringBase
4747
Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
4848
mappings->get_next_hir_id (crate_num),
4949
mappings->get_next_localdef_id (crate_num));
50-
mappings->insert_location (crate_num, mapping.get_hirid (),
51-
item.get_locus ());
5250

5351
HIR::ExternalStaticItem *static_item
5452
= new HIR::ExternalStaticItem (mapping, item.get_identifier (),
@@ -58,6 +56,11 @@ class ASTLoweringExternItem : public ASTLoweringBase
5856
item.get_locus ());
5957

6058
translated = static_item;
59+
60+
mappings->insert_hir_extern_item (crate_num, mapping.get_hirid (),
61+
translated);
62+
mappings->insert_location (crate_num, mapping.get_hirid (),
63+
item.get_locus ());
6164
}
6265

6366
void visit (AST::ExternalFunctionItem &function) override
@@ -97,8 +100,6 @@ class ASTLoweringExternItem : public ASTLoweringBase
97100
Analysis::NodeMapping mapping (crate_num, function.get_node_id (),
98101
mappings->get_next_hir_id (crate_num),
99102
mappings->get_next_localdef_id (crate_num));
100-
mappings->insert_location (crate_num, mapping.get_hirid (),
101-
function.get_locus ());
102103

103104
HIR::ExternalFunctionItem *function_item = new HIR::ExternalFunctionItem (
104105
mapping, function.get_identifier (), std::move (generic_params),
@@ -107,6 +108,11 @@ class ASTLoweringExternItem : public ASTLoweringBase
107108
function.get_outer_attrs (), function.get_locus ());
108109

109110
translated = function_item;
111+
112+
mappings->insert_hir_extern_item (crate_num, mapping.get_hirid (),
113+
translated);
114+
mappings->insert_location (crate_num, mapping.get_hirid (),
115+
function.get_locus ());
110116
}
111117

112118
private:

gcc/rust/hir/rust-ast-lower-item.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -571,10 +571,6 @@ class ASTLoweringItem : public ASTLoweringBase
571571
mappings->get_next_hir_id (crate_num),
572572
mappings->get_next_localdef_id (crate_num));
573573

574-
mappings->insert_defid_mapping (mapping.get_defid (), translated);
575-
mappings->insert_location (crate_num, mapping.get_hirid (),
576-
extern_block.get_locus ());
577-
578574
HIR::ExternBlock *hir_extern_block
579575
= new HIR::ExternBlock (mapping, extern_block.get_abi (),
580576
std::move (extern_items), std::move (vis),
@@ -583,6 +579,12 @@ class ASTLoweringItem : public ASTLoweringBase
583579
extern_block.get_locus ());
584580

585581
translated = hir_extern_block;
582+
583+
mappings->insert_defid_mapping (mapping.get_defid (), translated);
584+
mappings->insert_hir_item (mapping.get_crate_num (), mapping.get_hirid (),
585+
translated);
586+
mappings->insert_location (crate_num, mapping.get_hirid (),
587+
extern_block.get_locus ());
586588
}
587589

588590
private:

gcc/rust/hir/tree/rust-hir-item.h

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2713,6 +2713,8 @@ class ExternalItem
27132713

27142714
Analysis::NodeMapping get_mappings () const { return mappings; }
27152715

2716+
Identifier get_item_name () const { return item_name; }
2717+
27162718
protected:
27172719
ExternalItem (Analysis::NodeMapping mappings, Identifier item_name,
27182720
Visibility vis, AST::AttrVec outer_attrs, Location locus)
@@ -2746,9 +2748,6 @@ class ExternalItem
27462748

27472749
// Clone function implementation as pure virtual method
27482750
virtual ExternalItem *clone_external_item_impl () const = 0;
2749-
2750-
// possibly make this public if required
2751-
std::string get_item_name () const { return item_name; }
27522751
};
27532752

27542753
// A static item used in an extern block
@@ -2790,6 +2789,8 @@ class ExternalStaticItem : public ExternalItem
27902789

27912790
void accept_vis (HIRVisitor &vis) override;
27922791

2792+
std::unique_ptr<Type> &get_item_type () { return item_type; }
2793+
27932794
protected:
27942795
/* Use covariance to implement clone function as returning this object
27952796
* rather than base */
@@ -2840,6 +2841,12 @@ struct NamedFunctionParam
28402841
NamedFunctionParam &operator= (NamedFunctionParam &&other) = default;
28412842

28422843
std::string as_string () const;
2844+
2845+
Identifier get_param_name () const { return name; }
2846+
2847+
std::unique_ptr<Type> &get_type () { return param_type; }
2848+
2849+
Analysis::NodeMapping get_mappings () const { return mappings; }
28432850
};
28442851

28452852
// A function item used in an extern block
@@ -2920,6 +2927,20 @@ class ExternalFunctionItem : public ExternalItem
29202927

29212928
void accept_vis (HIRVisitor &vis) override;
29222929

2930+
std::vector<std::unique_ptr<GenericParam> > &get_generic_params ()
2931+
{
2932+
return generic_params;
2933+
}
2934+
2935+
std::unique_ptr<Type> &get_return_type () { return return_type; }
2936+
2937+
std::vector<NamedFunctionParam> &get_function_params ()
2938+
{
2939+
return function_params;
2940+
}
2941+
2942+
bool is_variadic () const { return has_variadics; }
2943+
29232944
protected:
29242945
/* Use covariance to implement clone function as returning this object
29252946
* rather than base */
@@ -2999,6 +3020,11 @@ class ExternBlock : public VisItem
29993020

30003021
void accept_vis (HIRVisitor &vis) override;
30013022

3023+
std::vector<std::unique_ptr<ExternalItem> > &get_extern_items ()
3024+
{
3025+
return extern_items;
3026+
}
3027+
30023028
protected:
30033029
/* Use covariance to implement clone function as returning this object
30043030
* rather than base */

gcc/rust/util/rust-hir-map.cc

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ void
263263
Mappings::insert_hir_trait_item (CrateNum crateNum, HirId id,
264264
HIR::TraitItem *item)
265265
{
266-
rust_assert (lookup_hir_item (crateNum, id) == nullptr);
266+
rust_assert (lookup_hir_trait_item (crateNum, id) == nullptr);
267267

268268
hirTraitItemMappings[crateNum][id] = item;
269269
nodeIdToHirMappings[crateNum][item->get_mappings ().get_nodeid ()] = id;
@@ -283,6 +283,30 @@ Mappings::lookup_hir_trait_item (CrateNum crateNum, HirId id)
283283
return iy->second;
284284
}
285285

286+
void
287+
Mappings::insert_hir_extern_item (CrateNum crateNum, HirId id,
288+
HIR::ExternalItem *item)
289+
{
290+
rust_assert (lookup_hir_extern_item (crateNum, id) == nullptr);
291+
292+
hirExternItemMappings[crateNum][id] = item;
293+
nodeIdToHirMappings[crateNum][item->get_mappings ().get_nodeid ()] = id;
294+
}
295+
296+
HIR::ExternalItem *
297+
Mappings::lookup_hir_extern_item (CrateNum crateNum, HirId id)
298+
{
299+
auto it = hirExternItemMappings.find (crateNum);
300+
if (it == hirExternItemMappings.end ())
301+
return nullptr;
302+
303+
auto iy = it->second.find (id);
304+
if (iy == it->second.end ())
305+
return nullptr;
306+
307+
return iy->second;
308+
}
309+
286310
void
287311
Mappings::insert_hir_impl_block (CrateNum crateNum, HirId id,
288312
HIR::ImplBlock *item)

gcc/rust/util/rust-hir-map.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ class Mappings
132132
HIR::TraitItem *item);
133133
HIR::TraitItem *lookup_hir_trait_item (CrateNum crateNum, HirId id);
134134

135+
void insert_hir_extern_item (CrateNum crateNum, HirId id,
136+
HIR::ExternalItem *item);
137+
HIR::ExternalItem *lookup_hir_extern_item (CrateNum crateNum, HirId id);
138+
135139
void insert_hir_impl_block (CrateNum crateNum, HirId id,
136140
HIR::ImplBlock *item);
137141
HIR::ImplBlock *lookup_hir_impl_block (CrateNum crateNum, HirId id);
@@ -239,6 +243,8 @@ class Mappings
239243
std::map<HirId, HIR::ImplBlock *> hirImplItemsToImplMappings;
240244
std::map<CrateNum, std::map<HirId, HIR::ImplBlock *> > hirImplBlockMappings;
241245
std::map<CrateNum, std::map<HirId, HIR::TraitItem *> > hirTraitItemMappings;
246+
std::map<CrateNum, std::map<HirId, HIR::ExternalItem *> >
247+
hirExternItemMappings;
242248

243249
// location info
244250
std::map<CrateNum, std::map<NodeId, Location> > locations;

0 commit comments

Comments
 (0)