Skip to content

Commit

Permalink
extern-types: Lower to HIR::ExternalTypeItem properly
Browse files Browse the repository at this point in the history
gcc/rust/ChangeLog:

	* hir/rust-ast-lower-extern.h: Lower to HIR::ExternalTypeItem nodes.
	* hir/tree/rust-hir-item.h (class ExternalTypeItem): Create private
	visibility by default as extern types have no visibility - add a comment
	about the correctness of this.
  • Loading branch information
CohenArthur committed Feb 29, 2024
1 parent 8e3c34a commit 9ee5b51
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
9 changes: 8 additions & 1 deletion gcc/rust/hir/rust-ast-lower-extern.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "rust-ast-lower-base.h"
#include "rust-ast-lower-type.h"
#include "rust-ast-lower.h"
#include "rust-hir-full-decls.h"

namespace Rust {
namespace HIR {
Expand Down Expand Up @@ -116,7 +117,13 @@ class ASTLoweringExternItem : public ASTLoweringBase

void visit (AST::ExternalTypeItem &type) override
{
rust_sorry_at (type.get_locus (), "extern types are not implemented yet");
auto crate_num = mappings->get_current_crate ();
Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
mappings->get_next_hir_id (crate_num),
mappings->get_next_localdef_id (crate_num));

translated = new HIR::ExternalTypeItem (mapping, type.get_identifier (),
type.get_locus ());
}

private:
Expand Down
10 changes: 8 additions & 2 deletions gcc/rust/hir/tree/rust-hir-item.h
Original file line number Diff line number Diff line change
Expand Up @@ -3152,16 +3152,20 @@ class ExternalFunctionItem : public ExternalItem

class ExternalTypeItem : public ExternalItem
{
public:
ExternalTypeItem (Analysis::NodeMapping mappings, Identifier item_name,
Visibility vis, AST::AttrVec outer_attrs, location_t locus)
location_t locus)
: ExternalItem (std::move (mappings), std::move (item_name),
std::move (vis), std::move (outer_attrs), locus)
Visibility (Visibility::PRIVATE),
/* FIXME: Is that correct? */
{}, locus)
{}

ExternalTypeItem (ExternalTypeItem const &other) : ExternalItem (other) {}

ExternalTypeItem (ExternalTypeItem &&other) = default;
ExternalTypeItem &operator= (ExternalTypeItem &&other) = default;
ExternalTypeItem &operator= (ExternalTypeItem const &other) = default;

std::string as_string () const override;

Expand All @@ -3171,6 +3175,8 @@ class ExternalTypeItem : public ExternalItem
ExternKind get_extern_kind () override { return ExternKind::Type; }

protected:
/* Use covariance to implement clone function as returning this object
* rather than base */
ExternalTypeItem *clone_external_item_impl () const override
{
return new ExternalTypeItem (*this);
Expand Down

0 comments on commit 9ee5b51

Please sign in to comment.