/* Interface to C preprocessor macro tables for GDB.
- Copyright (C) 2002-2019 Free Software Foundation, Inc.
+ Copyright (C) 2002-2023 Free Software Foundation, Inc.
Contributed by Red Hat, Inc.
This file is part of GDB.
#ifndef MACROTAB_H
#define MACROTAB_H
-#include "common/function-view.h"
+#include "gdbsupport/function-view.h"
struct obstack;
-struct bcache;
struct compunit_symtab;
+namespace gdb {
+struct bcache;
+}
+
/* How do we represent a source location? I mean, how should we
represent them within GDB; the user wants to use all sorts of
ambiguous abbreviations, like "break 32" and "break foo.c:32"
number." This is analogous to the way GCC reports errors in
#include files:
- $ gcc -c base.c
- In file included from header2.h:8,
- from header1.h:3,
- from base.c:5:
- header3.h:1: parse error before ')' token
- $
+ $ gcc -c base.c
+ In file included from header2.h:8,
+ from header1.h:3,
+ from base.c:5:
+ header3.h:1: parse error before ')' token
+ $
GCC tells you exactly what path of #inclusions led you to the
problem. It gives you complete information, in a way that the
following would not:
- $ gcc -c base.c
- header3.h:1: parse error before ')' token
- $
+ $ gcc -c base.c
+ header3.h:1: parse error before ')' token
+ $
Converting all of GDB to use this is a big task, and I'm not really
suggesting it should be a priority. But this module's whole
line info, but not in macro info. This means that GDB's symtabs
(built from the former, among other things) may mention filenames
that the #inclusion tree (built from the latter) doesn't have any
- record of. See macroscope.c:sal_macro_scope for how to accomodate
+ record of. See macroscope.c:sal_macro_scope for how to accommodate
this.
It's worth noting that libcpp has a simpler way of representing all
the same source location (although 'gcc -DFOO -UFOO -DFOO=2' does
do that in GCC 4.1.2.). */
struct macro_table *new_macro_table (struct obstack *obstack,
- struct bcache *bcache,
+ gdb::bcache *bcache,
struct compunit_symtab *cust);
The macro table makes its own copy of FILENAME; the caller is
responsible for freeing FILENAME when it is no longer needed. */
struct macro_source_file *macro_set_main (struct macro_table *table,
- const char *filename);
+ const char *filename);
/* Return the main source file of the macro table TABLE. */
The macro table makes its own copy of INCLUDED; the caller is
responsible for freeing INCLUDED when it is no longer needed. */
struct macro_source_file *macro_include (struct macro_source_file *source,
- int line,
- const char *included);
+ int line,
+ const char *included);
/* Define any special macros, like __FILE__ or __LINE__. This should
be called once, on the main source file. */
appears more than once in the inclusion tree, return the
least-nested inclusion --- the one closest to the main source file. */
struct macro_source_file *macro_lookup_inclusion
- (struct macro_source_file *source,
- const char *name);
+ (struct macro_source_file *source,
+ const char *name);
/* Record an object-like #definition (i.e., one with no parameter list).
string is REPLACEMENT. This function makes copies of NAME and
REPLACEMENT; the caller is responsible for freeing them. */
void macro_define_object (struct macro_source_file *source, int line,
- const char *name, const char *replacement);
+ const char *name, const char *replacement);
/* Record an function-like #definition (i.e., one with a parameter list).
NAME, ARGV, and REPLACEMENT; the caller is responsible for freeing
them. */
void macro_define_function (struct macro_source_file *source, int line,
- const char *name, int argc, const char **argv,
- const char *replacement);
+ const char *name, int argc, const char **argv,
+ const char *replacement);
/* Record an #undefinition.
Record in SOURCE's macro table that, at line number LINE in SOURCE,
we removed the definition for the preprocessor symbol named NAME. */
void macro_undef (struct macro_source_file *source, int line,
- const char *name);
+ const char *name);
/* Different kinds of macro definitions. */
enum macro_kind
the caller need not free it. Return zero if NAME is not #defined
at that point. */
struct macro_definition *macro_lookup_definition
- (struct macro_source_file *source,
- int line, const char *name);
+ (struct macro_source_file *source,
+ int line, const char *name);
/* Return the source location of the definition for NAME in scope at
the file. Return zero if NAME has no definition in scope at that
point, and leave *DEFINITION_LINE unchanged. */
struct macro_source_file *macro_definition_location
- (struct macro_source_file *source,
- int line,
- const char *name,
- int *definition_line);
+ (struct macro_source_file *source,
+ int line,
+ const char *name,
+ int *definition_line);
/* Prototype for a callback callable when walking a macro table. NAME
is the name of the macro, and DEFINITION is the definition. SOURCE