diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-01-18 14:51:36 +0000 |
---|---|---|
committer | Philip Herron <herron.philip@googlemail.com> | 2021-01-20 09:59:22 +0000 |
commit | 9a942d6fbd0cc087cbc801ce4681a498e59dce2c (patch) | |
tree | 5198e76f054e741f5ba9793e111bfd63be88e80d /gcc/rust/resolve | |
parent | 89631998d2ffda0c0c05066c148c6fc19398da5c (diff) | |
download | gcc-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.h | 1 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.h | 12 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-toplevel.h | 7 |
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 (), |