aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/resolve
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-01-18 17:57:22 +0000
committerPhilip Herron <herron.philip@googlemail.com>2021-01-20 09:59:22 +0000
commit12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03 (patch)
treeaaff0986f81394b83e8536b68a18bcd48ecb9484 /gcc/rust/resolve
parent6e2acd529fcfa43368f7ea8209cc5e6b88d2bd79 (diff)
downloadgcc-12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03.zip
gcc-12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03.tar.gz
gcc-12f7bd0fc4e9ab4e98869b5265aea6bacfb31d03.tar.bz2
Support struct initializers using Identifiers
This resolves each identifier for its respective field. It includes fixes for the TypeResolver to print errors instead of asserts where we loose decent debug info.
Diffstat (limited to 'gcc/rust/resolve')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-struct-expr-field.h5
-rw-r--r--gcc/rust/resolve/rust-ast-resolve.cc9
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-struct-expr-field.h b/gcc/rust/resolve/rust-ast-resolve-struct-expr-field.h
index 45d3e59..3916473 100644
--- a/gcc/rust/resolve/rust-ast-resolve-struct-expr-field.h
+++ b/gcc/rust/resolve/rust-ast-resolve-struct-expr-field.h
@@ -26,8 +26,7 @@ namespace Rust {
namespace Resolver {
// this resolves values being assigned not that the field actually exists yet.
-// We cant resolve the field to struct until type resolution since the HIR
-// Mappings don't exist yet.
+
class ResolveStructExprField : public ResolverBase
{
public:
@@ -43,6 +42,8 @@ public:
void visit (AST::StructExprFieldIndexValue &field);
+ void visit (AST::StructExprFieldIdentifier &field);
+
private:
ResolveStructExprField (NodeId parent) : ResolverBase (parent) {}
};
diff --git a/gcc/rust/resolve/rust-ast-resolve.cc b/gcc/rust/resolve/rust-ast-resolve.cc
index 910cd86..ec53ae0 100644
--- a/gcc/rust/resolve/rust-ast-resolve.cc
+++ b/gcc/rust/resolve/rust-ast-resolve.cc
@@ -324,5 +324,14 @@ ResolveStructExprField::visit (AST::StructExprFieldIndexValue &field)
ResolveExpr::go (field.get_value ().get (), field.get_node_id ());
}
+void
+ResolveStructExprField::visit (AST::StructExprFieldIdentifier &field)
+{
+ AST::IdentifierExpr expr (field.get_field_name (), field.get_locus ());
+ expr.set_node_id (field.get_node_id ());
+
+ ResolveExpr::go (&expr, field.get_node_id ());
+}
+
} // namespace Resolver
} // namespace Rust