/* Code dealing with blocks for GDB.
- Copyright (C) 2003-2015 Free Software Foundation, Inc.
+ Copyright (C) 2003-2017 Free Software Foundation, Inc.
This file is part of GDB.
struct dictionary *dict;
- /* Used for language-specific info. */
+ /* Contains information about namespace-related info relevant to this block:
+ using directives and the current namespace scope. */
- union
- {
- struct
- {
- /* Contains information about namespace-related info relevant to
- this block: using directives and the current namespace
- scope. */
-
- struct block_namespace_info *the_namespace;
- }
- cplus_specific;
- }
- language_specific;
+ struct block_namespace_info *namespace_info;
};
/* The global block is singled out so that we can provide a back-link
#define BLOCK_FUNCTION(bl) (bl)->function
#define BLOCK_SUPERBLOCK(bl) (bl)->superblock
#define BLOCK_DICT(bl) (bl)->dict
-#define BLOCK_NAMESPACE(bl) (bl)->language_specific.cplus_specific.the_namespace
+#define BLOCK_NAMESPACE(bl) (bl)->namespace_info
struct blockvector
{
extern void set_block_compunit_symtab (struct block *,
struct compunit_symtab *);
+/* Return a property to evaluate the static link associated to BLOCK.
+
+ In the context of nested functions (available in Pascal, Ada and GNU C, for
+ instance), a static link (as in DWARF's DW_AT_static_link attribute) for a
+ function is a way to get the frame corresponding to the enclosing function.
+
+ Note that only objfile-owned and function-level blocks can have a static
+ link. Return NULL if there is no such property. */
+
+extern struct dynamic_prop *block_static_link (const struct block *block);
+
/* A block iterator. This structure should be treated as though it
were opaque; it is only defined here because we want to support
stack allocation of iterators. */