* lambda.c (current_nonlambda_scope): New.
authorJason Merrill <jason@redhat.com>
Thu, 20 Aug 2015 01:45:44 +0000 (21:45 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 20 Aug 2015 01:45:44 +0000 (21:45 -0400)
From-SVN: r227022

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/lambda.c

index e313e64106119decaff571178c398d04cd1b8666..155f86af9ff630ddb7a5ae5563e0972e0c6d79bf 100644 (file)
@@ -1,3 +1,7 @@
+2015-08-19  Jason Merrill  <jason@redhat.com>
+
+       * lambda.c (current_nonlambda_scope): New.
+
 2015-08-18  Trevor Saunders  <tbsaunde@tbsaunde.org>
 
        * call.c, class.c, cp-tree.h, decl.c, except.c, mangle.c,
index 7cf5278f04a5954f51aa238db641c50a50b8b680..4dee60c052703f580513c4623497365225c029b6 100644 (file)
@@ -6308,6 +6308,7 @@ extern tree lambda_expr_this_capture            (tree, bool);
 extern tree maybe_resolve_dummy                        (tree, bool);
 extern tree current_nonlambda_function         (void);
 extern tree nonlambda_method_basetype          (void);
+extern tree current_nonlambda_scope            (void);
 extern void maybe_add_lambda_conv_op            (tree);
 extern bool is_lambda_ignored_entity            (tree);
 
index dcd3bb92ca0def900943b39a2e6a71cfe9f50111..ea9dba05227556fd958adcbdd187d05e13920303 100644 (file)
@@ -817,6 +817,30 @@ nonlambda_method_basetype (void)
   return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
 }
 
+/* Like current_scope, but looking through lambdas.  */
+
+tree
+current_nonlambda_scope (void)
+{
+  tree scope = current_scope ();
+  for (;;)
+    {
+      if (TREE_CODE (scope) == FUNCTION_DECL
+         && LAMBDA_FUNCTION_P (scope))
+       {
+         scope = CP_TYPE_CONTEXT (DECL_CONTEXT (scope));
+         continue;
+       }
+      else if (LAMBDA_TYPE_P (scope))
+       {
+         scope = CP_TYPE_CONTEXT (scope);
+         continue;
+       }
+      break;
+    }
+  return scope;
+}
+
 /* Helper function for maybe_add_lambda_conv_op; build a CALL_EXPR with
    indicated FN and NARGS, but do not initialize the return type or any of the
    argument slots.  */