aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2022-07-27 16:30:43 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2022-07-28 11:27:31 +0200
commit2160d34c5ff8060723c4b71d31c3d195f51eaa06 (patch)
treee8d2def3fa26a6a302a381f2badaabd0f622c6f1
parent0bf54ff468270dc60cb06dc1940e4bfb9e918c2b (diff)
downloadgcc-2160d34c5ff8060723c4b71d31c3d195f51eaa06.zip
gcc-2160d34c5ff8060723c4b71d31c3d195f51eaa06.tar.gz
gcc-2160d34c5ff8060723c4b71d31c3d195f51eaa06.tar.bz2
hir: Add mappings to ArrayElems
-rw-r--r--gcc/rust/hir/rust-ast-lower-expr.h18
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h20
2 files changed, 30 insertions, 8 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-expr.h b/gcc/rust/hir/rust-ast-lower-expr.h
index 166a44b..b420a4d 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.h
+++ b/gcc/rust/hir/rust-ast-lower-expr.h
@@ -307,7 +307,14 @@ public:
elements.push_back (std::unique_ptr<HIR::Expr> (translated_elem));
}
- translated_array_elems = new HIR::ArrayElemsValues (std::move (elements));
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (mappings->get_current_crate (),
+ elems.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ UNKNOWN_LOCAL_DEFID);
+
+ translated_array_elems
+ = new HIR::ArrayElemsValues (mapping, std::move (elements));
}
void visit (AST::ArrayElemsCopied &elems) override
@@ -317,8 +324,15 @@ public:
HIR::Expr *num_copies
= ASTLoweringExpr::translate (elems.get_num_copies ().get ());
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (mappings->get_current_crate (),
+ elems.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ UNKNOWN_LOCAL_DEFID);
+
translated_array_elems
- = new HIR::ArrayElemsCopied (std::unique_ptr<HIR::Expr> (element),
+ = new HIR::ArrayElemsCopied (mapping,
+ std::unique_ptr<HIR::Expr> (element),
std::unique_ptr<HIR::Expr> (num_copies));
}
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index 327a9ac..d16ac92 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -849,6 +849,8 @@ public:
COPIED,
};
+ ArrayElems (Analysis::NodeMapping mappings) : mappings (mappings){};
+
virtual ~ArrayElems () {}
// Unique pointer custom clone ArrayElems function
@@ -863,9 +865,13 @@ public:
virtual ArrayExprType get_array_expr_type () const = 0;
+ Analysis::NodeMapping &get_mappings () { return mappings; }
+
protected:
// pure virtual clone implementation
virtual ArrayElems *clone_array_elems_impl () const = 0;
+
+ Analysis::NodeMapping mappings;
};
// Value array elements
@@ -876,12 +882,13 @@ class ArrayElemsValues : public ArrayElems
// TODO: should this store location data?
public:
- ArrayElemsValues (std::vector<std::unique_ptr<Expr> > elems)
- : values (std::move (elems))
+ ArrayElemsValues (Analysis::NodeMapping mappings,
+ std::vector<std::unique_ptr<Expr> > elems)
+ : ArrayElems (mappings), values (std::move (elems))
{}
// copy constructor with vector clone
- ArrayElemsValues (ArrayElemsValues const &other)
+ ArrayElemsValues (ArrayElemsValues const &other) : ArrayElems (other)
{
values.reserve (other.values.size ());
for (const auto &e : other.values)
@@ -930,15 +937,16 @@ class ArrayElemsCopied : public ArrayElems
public:
// Constructor requires pointers for polymorphism
- ArrayElemsCopied (std::unique_ptr<Expr> copied_elem,
+ ArrayElemsCopied (Analysis::NodeMapping mappings,
+ std::unique_ptr<Expr> copied_elem,
std::unique_ptr<Expr> copy_amount)
- : elem_to_copy (std::move (copied_elem)),
+ : ArrayElems (mappings), elem_to_copy (std::move (copied_elem)),
num_copies (std::move (copy_amount))
{}
// Copy constructor required due to unique_ptr - uses custom clone
ArrayElemsCopied (ArrayElemsCopied const &other)
- : elem_to_copy (other.elem_to_copy->clone_expr ()),
+ : ArrayElems (other), elem_to_copy (other.elem_to_copy->clone_expr ()),
num_copies (other.num_copies->clone_expr ())
{}