diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-01-16 16:02:26 +0000 |
---|---|---|
committer | Philip Herron <herron.philip@googlemail.com> | 2021-01-18 10:01:57 +0000 |
commit | 2b7518cf8ae5e34aec81dbb8efb6ea15bb95c68c (patch) | |
tree | 6698017f6a9d29113e9d2087152cda3e57712a5c /gcc/rust/hir/rust-ast-lower-expr.h | |
parent | 02132139efa60954c3f9d5aeb4d87210066b1b58 (diff) | |
download | gcc-2b7518cf8ae5e34aec81dbb8efb6ea15bb95c68c.zip gcc-2b7518cf8ae5e34aec81dbb8efb6ea15bb95c68c.tar.gz gcc-2b7518cf8ae5e34aec81dbb8efb6ea15bb95c68c.tar.bz2 |
Add struct_field_expression support
This adds in struct field expressions and should be generic enough for
tuples later on.
Diffstat (limited to 'gcc/rust/hir/rust-ast-lower-expr.h')
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-expr.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-expr.h b/gcc/rust/hir/rust-ast-lower-expr.h index 1003e8c..29be5cc 100644 --- a/gcc/rust/hir/rust-ast-lower-expr.h +++ b/gcc/rust/hir/rust-ast-lower-expr.h @@ -544,6 +544,25 @@ public: std::move (outer_attribs), expr.get_locus ()); } + void visit (AST::FieldAccessExpr &expr) + { + std::vector<HIR::Attribute> inner_attribs; + std::vector<HIR::Attribute> outer_attribs; + + HIR::Expr *receiver + = ASTLoweringExpr::translate (expr.get_receiver_expr ().get ()); + + auto crate_num = mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, expr.get_node_id (), + mappings->get_next_hir_id (crate_num), + UNKNOWN_LOCAL_DEFID); + translated + = new HIR::FieldAccessExpr (mapping, + std::unique_ptr<HIR::Expr> (receiver), + expr.get_field_name (), + std::move (outer_attribs), expr.get_locus ()); + } + private: ASTLoweringExpr () : translated (nullptr), translated_array_elems (nullptr), terminated (false) |