Skip to content

Commit 9f5d8a8

Browse files
committed
ast: Translate visibilities properly when lowering AST nodes
Previously, the lowering code would simply create public `HIR::Visibility`s for every AST Node being lowered. We now call `translate_visibility()` properly to perform the necessary conversions
1 parent 7d806eb commit 9f5d8a8

File tree

7 files changed

+37
-35
lines changed

7 files changed

+37
-35
lines changed

gcc/rust/ast/rust-item.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ struct Visibility
632632
: public_vis_type (public_vis_type), in_path (std::move (in_path))
633633
{}
634634

635-
PublicVisType get_public_vis_type () { return public_vis_type; }
635+
PublicVisType get_public_vis_type () const { return public_vis_type; }
636636

637637
// Returns whether visibility is in an error state.
638638
bool is_error () const
@@ -884,6 +884,8 @@ class Method : public InherentImplItem, public TraitImplItem
884884

885885
FunctionQualifiers get_qualifiers () { return qualifiers; }
886886

887+
const Visibility &get_visibility () const { return vis; }
888+
887889
protected:
888890
/* Use covariance to implement clone function as returning this object
889891
* rather than base */
@@ -941,8 +943,8 @@ class VisItem : public Item
941943
std::string as_string () const override;
942944

943945
// TODO: this mutable getter seems really dodgy. Think up better way.
944-
Visibility &get_vis () { return visibility; }
945-
const Visibility &get_vis () const { return visibility; }
946+
Visibility &get_visibility () { return visibility; }
947+
const Visibility &get_visibility () const { return visibility; }
946948

947949
std::vector<Attribute> &get_outer_attrs () { return outer_attrs; }
948950
const std::vector<Attribute> &get_outer_attrs () const { return outer_attrs; }
@@ -1896,7 +1898,7 @@ struct StructField
18961898
return field_type;
18971899
}
18981900

1899-
Visibility get_visibility () const { return visibility; }
1901+
const Visibility &get_visibility () const { return visibility; }
19001902

19011903
NodeId get_node_id () const { return node_id; }
19021904
};
@@ -2030,6 +2032,8 @@ struct TupleField
20302032

20312033
NodeId get_node_id () const { return node_id; }
20322034

2035+
const Visibility &get_visibility () const { return visibility; }
2036+
20332037
Location get_locus () const { return locus; }
20342038

20352039
// TODO: this mutable getter seems really dodgy. Think up better way.
@@ -3921,6 +3925,8 @@ class ExternalStaticItem : public ExternalItem
39213925

39223926
Identifier get_identifier () const { return item_name; }
39233927

3928+
const Visibility &get_visibility () const { return visibility; }
3929+
39243930
bool is_mut () const { return has_mut; }
39253931

39263932
protected:
@@ -4083,6 +4089,8 @@ class ExternalFunctionItem : public ExternalItem
40834089

40844090
Location get_locus () const { return locus; }
40854091

4092+
const Visibility &get_visibility () const { return visibility; }
4093+
40864094
ExternalFunctionItem (
40874095
Identifier item_name,
40884096
std::vector<std::unique_ptr<GenericParam>> generic_params,

gcc/rust/backend/rust-compile-implitem.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ CompileTraitItem::visit (HIR::TraitItemFunc &func)
8484
&canonical_path);
8585
rust_assert (ok);
8686

87-
// FIXME: Get from lowering the item's visibility instead
88-
auto vis = HIR::Visibility::create_public ();
87+
// FIXME: How do we get the proper visibility here?
88+
auto vis = HIR::Visibility (HIR::Visibility::VisType::PUBLIC);
8989
HIR::TraitFunctionDecl &function = func.get_decl ();
9090
tree fndecl
9191
= compile_function (ctx, function.get_function_name (),

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#ifndef RUST_AST_LOWER_ENUMITEM
2020
#define RUST_AST_LOWER_ENUMITEM
2121

22+
#include "rust-ast-lower.h"
2223
#include "rust-diagnostics.h"
2324

2425
#include "rust-ast-lower-base.h"
@@ -51,7 +52,7 @@ class ASTLoweringEnumItem : public ASTLoweringBase
5152
if (item.has_visibility ())
5253
rust_error_at (item.get_locus (),
5354
"visibility qualifier %qs not allowed on enum item",
54-
item.get_vis ().as_string ().c_str ());
55+
item.get_visibility ().as_string ().c_str ());
5556

5657
translated = new HIR::EnumItem (mapping, item.get_identifier (),
5758
item.get_outer_attrs (), item.get_locus ());
@@ -73,12 +74,12 @@ class ASTLoweringEnumItem : public ASTLoweringBase
7374
if (item.has_visibility ())
7475
rust_error_at (item.get_locus (),
7576
"visibility qualifier %qs not allowed on enum item",
76-
item.get_vis ().as_string ().c_str ());
77+
item.get_visibility ().as_string ().c_str ());
7778

7879
std::vector<HIR::TupleField> fields;
7980
for (auto &field : item.get_tuple_fields ())
8081
{
81-
HIR::Visibility vis = HIR::Visibility::create_public ();
82+
HIR::Visibility vis = translate_visibility (field.get_visibility ());
8283
HIR::Type *type
8384
= ASTLoweringType::translate (field.get_field_type ().get ());
8485

@@ -117,12 +118,12 @@ class ASTLoweringEnumItem : public ASTLoweringBase
117118
if (item.has_visibility ())
118119
rust_error_at (item.get_locus (),
119120
"visibility qualifier %qs not allowed on enum item",
120-
item.get_vis ().as_string ().c_str ());
121+
item.get_visibility ().as_string ().c_str ());
121122

122123
std::vector<HIR::StructField> fields;
123124
for (auto &field : item.get_struct_fields ())
124125
{
125-
HIR::Visibility vis = HIR::Visibility::create_public ();
126+
HIR::Visibility vis = translate_visibility (field.get_visibility ());
126127
HIR::Type *type
127128
= ASTLoweringType::translate (field.get_field_type ().get ());
128129

@@ -165,7 +166,7 @@ class ASTLoweringEnumItem : public ASTLoweringBase
165166
if (item.has_visibility ())
166167
rust_error_at (item.get_locus (),
167168
"visibility qualifier %qs not allowed on enum item",
168-
item.get_vis ().as_string ().c_str ());
169+
item.get_visibility ().as_string ().c_str ());
169170

170171
HIR::Expr *expr = ASTLoweringExpr::translate (item.get_expr ().get ());
171172
translated

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "rust-ast-lower-base.h"
2323
#include "rust-ast-lower-type.h"
24+
#include "rust-ast-lower.h"
2425

2526
namespace Rust {
2627
namespace HIR {
@@ -39,7 +40,7 @@ class ASTLoweringExternItem : public ASTLoweringBase
3940

4041
void visit (AST::ExternalStaticItem &item) override
4142
{
42-
HIR::Visibility vis = HIR::Visibility::create_public ();
43+
HIR::Visibility vis = translate_visibility (item.get_visibility ());
4344
HIR::Type *static_type
4445
= ASTLoweringType::translate (item.get_type ().get ());
4546

@@ -65,7 +66,7 @@ class ASTLoweringExternItem : public ASTLoweringBase
6566
{
6667
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
6768
HIR::WhereClause where_clause (std::move (where_clause_items));
68-
HIR::Visibility vis = HIR::Visibility::create_public ();
69+
HIR::Visibility vis = translate_visibility (function.get_visibility ());
6970

7071
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
7172
if (function.has_generics ())

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class ASTLowerImplItem : public ASTLoweringBase
5656
{
5757
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
5858
HIR::WhereClause where_clause (std::move (where_clause_items));
59-
HIR::Visibility vis = HIR::Visibility::create_public ();
59+
HIR::Visibility vis = translate_visibility (alias.get_visibility ());
6060

6161
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
6262
if (alias.has_generics ())
@@ -87,7 +87,7 @@ class ASTLowerImplItem : public ASTLoweringBase
8787

8888
void visit (AST::ConstantItem &constant) override
8989
{
90-
HIR::Visibility vis = HIR::Visibility::create_public ();
90+
HIR::Visibility vis = translate_visibility (constant.get_visibility ());
9191

9292
HIR::Type *type = ASTLoweringType::translate (constant.get_type ().get ());
9393
HIR::Expr *expr = ASTLoweringExpr::translate (constant.get_expr ().get ());
@@ -120,7 +120,7 @@ class ASTLowerImplItem : public ASTLoweringBase
120120
HIR::WhereClause where_clause (std::move (where_clause_items));
121121
HIR::FunctionQualifiers qualifiers
122122
= lower_qualifiers (function.get_qualifiers ());
123-
HIR::Visibility vis = HIR::Visibility::create_public ();
123+
HIR::Visibility vis = translate_visibility (function.get_visibility ());
124124

125125
// need
126126
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
@@ -204,7 +204,7 @@ class ASTLowerImplItem : public ASTLoweringBase
204204
HIR::WhereClause where_clause (std::move (where_clause_items));
205205
HIR::FunctionQualifiers qualifiers
206206
= lower_qualifiers (method.get_qualifiers ());
207-
HIR::Visibility vis = HIR::Visibility::create_public ();
207+
HIR::Visibility vis = translate_visibility (method.get_visibility ());
208208

209209
// need
210210
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class ASTLoweringStmt : public ASTLoweringBase
8585

8686
void visit (AST::ConstantItem &constant) override
8787
{
88-
HIR::Visibility vis = HIR::Visibility::create_public ();
88+
HIR::Visibility vis = translate_visibility (constant.get_visibility ());
8989

9090
HIR::Type *type = ASTLoweringType::translate (constant.get_type ().get ());
9191
HIR::Expr *expr = ASTLoweringExpr::translate (constant.get_expr ().get ());
@@ -148,12 +148,12 @@ class ASTLoweringStmt : public ASTLoweringBase
148148

149149
std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
150150
HIR::WhereClause where_clause (std::move (where_clause_items));
151-
HIR::Visibility vis = HIR::Visibility::create_public ();
151+
HIR::Visibility vis = translate_visibility (struct_decl.get_visibility ());
152152

153153
std::vector<HIR::TupleField> fields;
154154
for (AST::TupleField &field : struct_decl.get_fields ())
155155
{
156-
HIR::Visibility vis = HIR::Visibility::create_public ();
156+
HIR::Visibility vis = translate_visibility (field.get_visibility ());
157157
HIR::Type *type
158158
= ASTLoweringType::translate (field.get_field_type ().get ());
159159

@@ -199,13 +199,13 @@ class ASTLoweringStmt : public ASTLoweringBase
199199

200200
std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
201201
HIR::WhereClause where_clause (std::move (where_clause_items));
202-
HIR::Visibility vis = HIR::Visibility::create_public ();
202+
HIR::Visibility vis = translate_visibility (struct_decl.get_visibility ());
203203

204204
bool is_unit = struct_decl.is_unit_struct ();
205205
std::vector<HIR::StructField> fields;
206206
for (AST::StructField &field : struct_decl.get_fields ())
207207
{
208-
HIR::Visibility vis = HIR::Visibility::create_public ();
208+
HIR::Visibility vis = translate_visibility (field.get_visibility ());
209209
HIR::Type *type
210210
= ASTLoweringType::translate (field.get_field_type ().get ());
211211

@@ -255,12 +255,12 @@ class ASTLoweringStmt : public ASTLoweringBase
255255

256256
std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
257257
HIR::WhereClause where_clause (std::move (where_clause_items));
258-
HIR::Visibility vis = HIR::Visibility::create_public ();
258+
HIR::Visibility vis = translate_visibility (union_decl.get_visibility ());
259259

260260
std::vector<HIR::StructField> variants;
261261
for (AST::StructField &variant : union_decl.get_variants ())
262262
{
263-
HIR::Visibility vis = HIR::Visibility::create_public ();
263+
HIR::Visibility vis = translate_visibility (variant.get_visibility ());
264264
HIR::Type *type
265265
= ASTLoweringType::translate (variant.get_field_type ().get ());
266266

@@ -308,7 +308,7 @@ class ASTLoweringStmt : public ASTLoweringBase
308308

309309
std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
310310
HIR::WhereClause where_clause (std::move (where_clause_items));
311-
HIR::Visibility vis = HIR::Visibility::create_public ();
311+
HIR::Visibility vis = translate_visibility (enum_decl.get_visibility ());
312312

313313
// bool is_unit = enum_decl.is_zero_variant ();
314314
std::vector<std::unique_ptr<HIR::EnumItem>> items;
@@ -358,7 +358,7 @@ class ASTLoweringStmt : public ASTLoweringBase
358358
HIR::WhereClause where_clause (std::move (where_clause_items));
359359
HIR::FunctionQualifiers qualifiers
360360
= lower_qualifiers (function.get_qualifiers ());
361-
HIR::Visibility vis = HIR::Visibility::create_public ();
361+
HIR::Visibility vis = translate_visibility (function.get_visibility ());
362362

363363
// need
364364
std::vector<std::unique_ptr<HIR::GenericParam>> generic_params;

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -582,14 +582,6 @@ struct Visibility
582582
return Visibility (ERROR, AST::SimplePath::create_empty ());
583583
}
584584

585-
// Creates a public visibility.
586-
// FIXME: Remove this function: We should not be calling it anymore and
587-
// instead we should be using `translate_visibility`
588-
static Visibility create_public ()
589-
{
590-
return Visibility (ERROR, AST::SimplePath::create_empty ());
591-
}
592-
593585
VisType get_vis_type () const { return vis_type; }
594586

595587
std::string as_string () const;

0 commit comments

Comments
 (0)