2003-05-19 David Carlton <carlton@bactrian.org>

* block.h: Declare block_static_block.
	* block.c (block_static_block): New.
	* symtab.c (lookup_symbol_aux): Remove 'static_block' argument to
	lookup_symbol_aux_local, calling block_static_block instead.
	(lookup_symbol_aux_local): Delete 'static_block' argument.
This commit is contained in:
David Carlton
2003-05-20 01:26:58 +00:00
parent eed3f8ab35
commit 89a9d1b163
4 changed files with 36 additions and 16 deletions

View File

@@ -1,3 +1,11 @@
2003-05-19 David Carlton <carlton@bactrian.org>
* block.h: Declare block_static_block.
* block.c (block_static_block): New.
* symtab.c (lookup_symbol_aux): Remove 'static_block' argument to
lookup_symbol_aux_local, calling block_static_block instead.
(lookup_symbol_aux_local): Delete 'static_block' argument.
2003-05-19 David Carlton <carlton@bactrian.org> 2003-05-19 David Carlton <carlton@bactrian.org>
* symtab.c (lookup_symbol_aux): Delete #if 0 hunk. * symtab.c (lookup_symbol_aux): Delete #if 0 hunk.

View File

@@ -199,3 +199,18 @@ block_initialize_namespace (struct block *block, struct obstack *obstack)
BLOCK_NAMESPACE (block)->using = NULL; BLOCK_NAMESPACE (block)->using = NULL;
} }
} }
/* Return the static block associated to BLOCK. Return NULL if block
is NULL or if block is a global block. */
const struct block *
block_static_block (const struct block *block)
{
if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL)
return NULL;
while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL)
block = BLOCK_SUPERBLOCK (block);
return block;
}

View File

@@ -207,4 +207,6 @@ extern void block_set_using (struct block *block,
struct using_direct *using, struct using_direct *using,
struct obstack *obstack); struct obstack *obstack);
extern const struct block *block_static_block (const struct block *block);
#endif /* BLOCK_H */ #endif /* BLOCK_H */

View File

@@ -93,8 +93,7 @@ struct symbol *lookup_symbol_aux_local (const char *name,
const char *linkage_name, const char *linkage_name,
const struct block *block, const struct block *block,
const domain_enum domain, const domain_enum domain,
struct symtab **symtab, struct symtab **symtab);
const struct block **static_block);
static static
struct symbol *lookup_symbol_aux_block (const char *name, struct symbol *lookup_symbol_aux_block (const char *name,
@@ -964,7 +963,7 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
STATIC_BLOCK or GLOBAL_BLOCK. */ STATIC_BLOCK or GLOBAL_BLOCK. */
sym = lookup_symbol_aux_local (name, linkage_name, block, domain, sym = lookup_symbol_aux_local (name, linkage_name, block, domain,
symtab, &static_block); symtab);
if (sym != NULL) if (sym != NULL)
return sym; return sym;
@@ -1008,6 +1007,7 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
than that one, so I don't think we should worry about that for than that one, so I don't think we should worry about that for
now. */ now. */
static_block = block_static_block (block);
if (static_block != NULL) if (static_block != NULL)
{ {
sym = lookup_symbol_aux_block (name, linkage_name, static_block, sym = lookup_symbol_aux_block (name, linkage_name, static_block,
@@ -1053,27 +1053,23 @@ lookup_symbol_aux (const char *name, const char *linkage_name,
} }
/* Check to see if the symbol is defined in BLOCK or its superiors. /* Check to see if the symbol is defined in BLOCK or its superiors.
Don't search STATIC_BLOCK or GLOBAL_BLOCK. If we don't find a Don't search STATIC_BLOCK or GLOBAL_BLOCK. */
match, store the address of STATIC_BLOCK in static_block. */
static struct symbol * static struct symbol *
lookup_symbol_aux_local (const char *name, const char *linkage_name, lookup_symbol_aux_local (const char *name, const char *linkage_name,
const struct block *block, const struct block *block,
const domain_enum domain, const domain_enum domain,
struct symtab **symtab, struct symtab **symtab)
const struct block **static_block)
{ {
struct symbol *sym; struct symbol *sym;
const struct block *static_block = block_static_block (block);
/* Check if either no block is specified or it's a global block. */ /* Check if either no block is specified or it's a global block. */
if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL) if (static_block == NULL)
{ return NULL;
*static_block = NULL;
return NULL;
}
while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL) while (block != static_block)
{ {
sym = lookup_symbol_aux_block (name, linkage_name, block, domain, sym = lookup_symbol_aux_block (name, linkage_name, block, domain,
symtab); symtab);
@@ -1082,9 +1078,8 @@ lookup_symbol_aux_local (const char *name, const char *linkage_name,
block = BLOCK_SUPERBLOCK (block); block = BLOCK_SUPERBLOCK (block);
} }
/* We've reached the static block. */ /* We've reached the static block without finding a result. */
*static_block = block;
return NULL; return NULL;
} }