aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/resolve
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-01-18 14:51:36 +0000
committerPhilip Herron <herron.philip@googlemail.com>2021-01-20 09:59:22 +0000
commit9a942d6fbd0cc087cbc801ce4681a498e59dce2c (patch)
tree5198e76f054e741f5ba9793e111bfd63be88e80d /gcc/rust/resolve
parent89631998d2ffda0c0c05066c148c6fc19398da5c (diff)
downloadgcc-9a942d6fbd0cc087cbc801ce4681a498e59dce2c.zip
gcc-9a942d6fbd0cc087cbc801ce4681a498e59dce2c.tar.gz
gcc-9a942d6fbd0cc087cbc801ce4681a498e59dce2c.tar.bz2
Add in TupleStruct support
This adds in tuple struct support with name and type resolution. The arguments and number of arguments are validated against. Test cases added for those errors too.
Diffstat (limited to 'gcc/rust/resolve')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-expr.h1
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-item.h12
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-toplevel.h7
3 files changed, 18 insertions, 2 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-expr.h b/gcc/rust/resolve/rust-ast-resolve-expr.h
index 21b2194..9a7e231 100644
--- a/gcc/rust/resolve/rust-ast-resolve-expr.h
+++ b/gcc/rust/resolve/rust-ast-resolve-expr.h
@@ -83,7 +83,6 @@ public:
ResolveExpr::go (p, expr.get_node_id ());
return true;
});
- // resolver->insert_resolved_name(NodeId refId,NodeId defId)
}
void visit (AST::AssignmentExpr &expr)
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h
index b0b979f..02d6dfa 100644
--- a/gcc/rust/resolve/rust-ast-resolve-item.h
+++ b/gcc/rust/resolve/rust-ast-resolve-item.h
@@ -40,10 +40,20 @@ public:
~ResolveItem () {}
+ void visit (AST::TupleStruct &struct_decl)
+ {
+ struct_decl.iterate ([&] (AST::TupleField &field) mutable -> bool {
+ ResolveType::go (field.get_field_type ().get (),
+ struct_decl.get_node_id ());
+ return true;
+ });
+ }
+
void visit (AST::StructStruct &struct_decl)
{
struct_decl.iterate ([&] (AST::StructField &field) mutable -> bool {
- ResolveType::go (field.get_field_type ().get (), field.get_node_id ());
+ ResolveType::go (field.get_field_type ().get (),
+ struct_decl.get_node_id ());
return true;
});
}
diff --git a/gcc/rust/resolve/rust-ast-resolve-toplevel.h b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
index 447fe4b..47435a7 100644
--- a/gcc/rust/resolve/rust-ast-resolve-toplevel.h
+++ b/gcc/rust/resolve/rust-ast-resolve-toplevel.h
@@ -36,6 +36,13 @@ public:
~ResolveTopLevel () {}
+ void visit (AST::TupleStruct &struct_decl)
+ {
+ resolver->get_type_scope ().insert (struct_decl.get_identifier (),
+ struct_decl.get_node_id (),
+ struct_decl.get_locus ());
+ }
+
void visit (AST::StructStruct &struct_decl)
{
resolver->get_type_scope ().insert (struct_decl.get_identifier (),