diff options
author | Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de> | 2007-03-29 23:54:22 +0000 |
---|---|---|
committer | Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de> | 2007-03-29 23:54:22 +0000 |
commit | ede714d3e45292748c7e89692bb1b8b2bc7710dd (patch) | |
tree | b2697eaefba649bcb7efb7fb9ace72180ef60577 | |
parent | 079758638530efd1e36e1e34793641644f6d6cbb (diff) |
* symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally
descend into all branches.
git-svn-id: https://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; } |