diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-10-28 10:13:12 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-28 10:13:12 +0000 |
commit | a2ce3ef6b024736dfcbfabb062100c685fa95c6b (patch) | |
tree | 41e1e2c804b45cf8d841456e3176b128b218362d /gcc/rust/hir | |
parent | e28c43f2f40cf405e89b3892aa65f6a06fa1c802 (diff) | |
parent | 0114e3e5b3b222c190a640bdeda8e781042389c4 (diff) | |
download | gcc-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.h | 28 |
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 |