diff options
author | tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-29 23:54:22 +0000 |
---|---|---|
committer | tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-29 23:54:22 +0000 |
commit | b047c3a1fdcb7442acdc8f65d623a5dda80e1439 (patch) | |
tree | b2697eaefba649bcb7efb7fb9ace72180ef60577 | |
parent | 9c0794a194bd92a1439b192259afee18f9a93ab2 (diff) | |
download | gcc-b047c3a1fdcb7442acdc8f65d623a5dda80e1439.tar.gz |
* symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally
descend into all branches.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123355 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 17 |
2 files changed, 13 insertions, 9 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 69364bc3944..ddb515bd995 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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. diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 7bf9aecf957..b1c5ea3a316 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -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; } |