aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-10-28 10:13:12 +0000
committerGitHub <noreply@github.com>2021-10-28 10:13:12 +0000
commita2ce3ef6b024736dfcbfabb062100c685fa95c6b (patch)
tree41e1e2c804b45cf8d841456e3176b128b218362d /gcc/rust/hir
parente28c43f2f40cf405e89b3892aa65f6a06fa1c802 (diff)
parent0114e3e5b3b222c190a640bdeda8e781042389c4 (diff)
downloadgcc-a2ce3ef6b024736dfcbfabb062100c685fa95c6b.zip
gcc-a2ce3ef6b024736dfcbfabb062100c685fa95c6b.tar.gz
gcc-a2ce3ef6b024736dfcbfabb062100c685fa95c6b.tar.bz2
Merge #775
775: Support const within block-expr's r=philberty a=philberty This adds support for constant folding within block expr's and constant ArrayIndexExpression. Fixes #711 Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r--gcc/rust/hir/rust-ast-lower-stmt.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-stmt.h b/gcc/rust/hir/rust-ast-lower-stmt.h
index 50ccc9f..eab0922 100644
--- a/gcc/rust/hir/rust-ast-lower-stmt.h
+++ b/gcc/rust/hir/rust-ast-lower-stmt.h
@@ -83,6 +83,34 @@ public:
mappings->insert_hir_stmt (crate_num, mapping.get_hirid (), translated);
}
+ void visit (AST::ConstantItem &constant) override
+ {
+ HIR::Visibility vis = HIR::Visibility::create_public ();
+
+ HIR::Type *type = ASTLoweringType::translate (constant.get_type ().get ());
+ HIR::Expr *expr = ASTLoweringExpr::translate (constant.get_expr ().get ());
+
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (crate_num, constant.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ mappings->get_next_localdef_id (crate_num));
+
+ HIR::ConstantItem *constant_item
+ = new HIR::ConstantItem (mapping, constant.get_identifier (), vis,
+ std::unique_ptr<HIR::Type> (type),
+ std::unique_ptr<HIR::Expr> (expr),
+ constant.get_outer_attrs (),
+ constant.get_locus ());
+ translated = constant_item;
+
+ mappings->insert_hir_item (mapping.get_crate_num (), mapping.get_hirid (),
+ constant_item);
+ mappings->insert_hir_stmt (mapping.get_crate_num (), mapping.get_hirid (),
+ constant_item);
+ mappings->insert_location (crate_num, mapping.get_hirid (),
+ constant.get_locus ());
+ }
+
void visit (AST::LetStmt &stmt) override
{
HIR::Pattern *variables