aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-05-10 12:24:50 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-05-10 12:24:50 +0100
commit02f08eef46dbf257e60d935123ab72f22789ddd6 (patch)
tree05ac447361e6f022aafacb55242ff33df3d6963e
parent4fa08ea79cd30a7d8dd9c781a6247806a0dfe581 (diff)
downloadgcc-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.h15
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: