symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally descend into all branches.
authorTobias Schlüter <tobi@gcc.gnu.org>
Thu, 29 Mar 2007 23:54:22 +0000 (01:54 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Thu, 29 Mar 2007 23:54:22 +0000 (01:54 +0200)
* symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally
descend into all branches.

From-SVN: r123355

gcc/fortran/ChangeLog
gcc/fortran/symbol.c

index 69364bc394447b6123ea3221cfc4d8c37af8efeb..ddb515bd995723c1187c53c9b475513924bed9b1 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-30  Tobias Schlüter  <tobi@gcc.gnu.org>
+
+       * symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally
+       descend into all branches.
+
 2007-03-29  Tobias Schlüter  <tobi@gcc.gnu.org>
 
        * intrinsic.c (conv_name): Let gfc_get_string handle the format.
index 7bf9aecf9574726a2c0917ff8b8715e2fbb8cd1e..b1c5ea3a3162725ce4f310e6b193d72dc8ed2a57 100644 (file)
@@ -2770,20 +2770,19 @@ gfc_symbol_state(void) {
 gfc_gsymbol *
 gfc_find_gsymbol (gfc_gsymbol *symbol, const char *name)
 {
-  gfc_gsymbol *s;
+  int c;
 
   if (symbol == NULL)
     return NULL;
-  if (strcmp (symbol->name, name) == 0)
-    return symbol;
 
-  s = gfc_find_gsymbol (symbol->left, name);
-  if (s != NULL)
-    return s;
+  while (symbol)
+    {
+      c = strcmp (name, symbol->name);
+      if (!c)
+       return symbol;
 
-  s = gfc_find_gsymbol (symbol->right, name);
-  if (s != NULL)
-    return s;
+      symbol = (c < 0) ? symbol->left : symbol->right;
+    }
 
   return NULL;
 }