diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-05-10 12:24:50 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-05-10 12:24:50 +0100 |
commit | 02f08eef46dbf257e60d935123ab72f22789ddd6 (patch) | |
tree | 05ac447361e6f022aafacb55242ff33df3d6963e | |
parent | 4fa08ea79cd30a7d8dd9c781a6247806a0dfe581 (diff) | |
download | gcc-02f08eef46dbf257e60d935123ab72f22789ddd6.zip gcc-02f08eef46dbf257e60d935123ab72f22789ddd6.tar.gz gcc-02f08eef46dbf257e60d935123ab72f22789ddd6.tar.bz2 |
Ensure generic arguments are resolved for MethodCallExpr
Method calls also support a turbo fish such as: instance.method()::<a,b>,
these need to name resolved before they can be type resolved even though
the actual method is resolved in the type resolution phase.
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 27f5305..dc16573 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -200,14 +200,22 @@ public: void visit (AST::Method &method) override { - if (method.has_return_type ()) - ResolveType::go (method.get_return_type ().get (), method.get_node_id ()); - NodeId scope_node_id = method.get_node_id (); resolver->get_name_scope ().push (scope_node_id); resolver->get_type_scope ().push (scope_node_id); + resolver->get_label_scope ().push (scope_node_id); resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); + resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); + + if (method.has_generics ()) + { + for (auto &generic : method.get_generic_params ()) + ResolveGenericParam::go (generic.get (), method.get_node_id ()); + } + + if (method.has_return_type ()) + ResolveType::go (method.get_return_type ().get (), method.get_node_id ()); // self turns into (self: Self) as a function param AST::SelfParam &self_param = method.get_self_param (); @@ -248,6 +256,7 @@ public: resolver->get_name_scope ().pop (); resolver->get_type_scope ().pop (); + resolver->get_label_scope ().pop (); } private: |