2002-11-15 David Carlton <carlton@math.stanford.edu>
+ * symtab.c (lookup_symbol_aux): Get at static block via
+ block_static_block.
+ (lookup_symbol_aux_local): Delete static_block argument, and use
+ block_static_block.
+ * block.h: Declare block_static_block.
+ * block.c (block_static_block): New function.
+ * linespec.c (decode_all_digits): Move up definition of
+ need_canonical.
+
* Merge from mainline; tag is carlton_dictionary-20021115-merge.
2002-11-14 Andrew Cagney <ac131313@redhat.com>
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;
+}
const char *mangled_name,
const struct block *block,
const namespace_enum namespace,
- struct symtab **symtab,
- const struct block **static_block);
+ struct symtab **symtab);
static
struct symbol *lookup_symbol_aux_block (const char *name,
STATIC_BLOCK or GLOBAL_BLOCK. */
sym = lookup_symbol_aux_local (name, mangled_name, block, namespace,
- symtab, &static_block);
+ symtab);
if (sym != NULL)
return sym;
seems best: it's cleanest, it's correct, and it might be useful
for handling namespace scope issues completely correctly. */
+ static_block = block_static_block (block);
+
if (static_block != NULL)
{
sym = lookup_symbol_aux_block (name, mangled_name, static_block,
lookup_symbol_aux_local (const char *name, const char *mangled_name,
const struct block *block,
const namespace_enum namespace,
- struct symtab **symtab,
- const struct block **static_block)
+ struct symtab **symtab)
{
struct symbol *sym;
+ const struct block *static_block = block_static_block (block);
/* Either no block is specified or it's a global block. */
- if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL)
- {
- *static_block = NULL;
- return NULL;
- }
+ if (static_block == NULL)
+ return NULL;
- while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL)
+ while (block != static_block)
{
sym = lookup_symbol_aux_block (name, mangled_name, block, namespace,
symtab);
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;
}