Patchwork [C++0x] implement range-based for loops

login
register
mail settings
Submitter Rodrigo Rivas
Date Sept. 12, 2010, 12:04 a.m.
Message ID <AANLkTin6Kmhq1yEzGysOw7Mij5gzuntJfDJJejUNWPSN@mail.gmail.com>
Download mbox | patch
Permalink /patch/64531/
State New
Headers show

Comments

Rodrigo Rivas - Sept. 12, 2010, 12:04 a.m.
> OK, makes sense.

Here it is. Quite simple, actually.
Thank you for your help.
Rodrigo.
--
Changelog:

gcc/cp/

2010-09-12  Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>

	* semantics.c (finish_for_stmt): Always test flag_new_for_scope.
	(begin_range_for_stmt): Likewise.

Patch

Index: gcc/cp/semantics.c
===================================================================
--- gcc/cp/semantics.c	(revision 164212)
+++ gcc/cp/semantics.c	(working copy)
@@ -882,21 +882,13 @@  finish_for_expr (tree expr, tree for_stmt)
 void
 finish_for_stmt (tree for_stmt)
 {
-  bool scoped;
-
   if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
-    {
       RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
-      scoped = true;
-    }
   else
-    {
       FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
-      scoped = flag_new_for_scope > 0;
-    }
 
   /* Pop the scope for the body of the loop.  */
-  if (scoped)
+  if (flag_new_for_scope > 0)
     {
       tree scope = TREE_CHAIN (for_stmt);
       TREE_CHAIN (for_stmt) = NULL;
@@ -913,11 +905,13 @@  tree
 begin_range_for_stmt (void)
 {
   tree r;
+
   r = build_stmt (input_location, RANGE_FOR_STMT,
 		  NULL_TREE, NULL_TREE, NULL_TREE);
-  /* We can ignore flag_new_for_scope here. */
-  TREE_CHAIN (r) = do_pushlevel (sk_for);
 
+  if (flag_new_for_scope > 0)
+    TREE_CHAIN (r) = do_pushlevel (sk_for);
+
   return r;
 }