This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[rfa:cli] Delete one of the two ``struct cmd_list_element''s
- From: Andrew Cagney <ac131313 at cygnus dot com>
- To: gdb-patches at sources dot redhat dot com,Fernando Nasser <fnasser at redhat dot com>
- Date: Sun, 17 Mar 2002 22:07:46 -0500
- Subject: [rfa:cli] Delete one of the two ``struct cmd_list_element''s
Hello,
This is my fix to the duplicate ``struct cmd_list_element'' definition
problem (see "command.h" and "cli/cli-decode.h").
It zaps the definition from "command.h". However, it does also
formalize the status quo:
"command.h": included by any code wanting to create commands.
"cli-decode.h": included by any code implementing command internals.
In addition to the code in the gdb/cli/ directory, a number of gdb/ .c
files also include cli-decode.h: maint.c, top.c and completer.c.
Ok to commit? Hmm, if this is ok, the comment at the top of "command.h"
should be updated.
enjoy,
Andrew
2002-03-17 Andrew Cagney <ac131313@redhat.com>
* command.h: Update copyright.
(struct cmd_list_element): Replace definition with opaque
declaration.
(enum cmd_types): Document that it will eventually be moved to
cli/cli-decode.h
(CMD_DEPRECATED, DEPRECATED_WARN_USER): Delete macros.
(MALLOCED_REPLACEMENT): Delete macro.
* Makefile.in (cli_decode_h): Add $(command_h).
(top.o, completer.o, maint.o): Add dependency on $(cli_decode_h).
* top.c: Include "cli/cli-decode.h".
* completer.c: Include "cli/cli-decode.h".
* maint.c: Include "cli/cli-decode.h".
* cli/cli-decode.h: Include "command.h".
(enum command_class): Delete.
(enum cmd_types): Comment out.
(enum cmd_auto_boolean): Delete.
(enum var_types): Delete.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.164
diff -u -r1.164 Makefile.in
--- Makefile.in 2002/03/11 00:01:07 1.164
+++ Makefile.in 2002/03/18 02:53:10
@@ -592,7 +592,7 @@
c_lang_h = c-lang.h $(value_h)
call_cmds_h = call-cmds.h
cli_cmds_h = $(srcdir)/cli/cli-cmds.h
-cli_decode_h = $(srcdir)/cli/cli-decode.h
+cli_decode_h = $(srcdir)/cli/cli-decode.h $(command_h)
cli_out_h = cli-out.h
cli_script_h = $(srcdir)/cli/cli-script.h
cli_setshow_h = $(srcdir)/cli/cli-setshow.h
@@ -1391,7 +1391,7 @@
event-top.o: event-top.c $(top_h) $(readline_headers) \
$(defs_h) $(inferior_h) $(event_loop_h) $(event_top_h) $(terminal_h) \
- $(gdbcmd_h) $(target_h)
+ $(gdbcmd_h) $(target_h) $(cli_decode_h)
inf-loop.o: inf-loop.c $(defs_h) $(inferior_h) $(inf_loop_h) $(event_loop_h) \
$(event_top_h)
@@ -1709,7 +1709,8 @@
$(symfile_h) $(gdbcore_h) $(ui_out_h)
maint.o: maint.c $(defs_h) $(gdbcmd_h) $(gdbtypes_h) $(symtab_h) \
- $(language_h) $(expression_h) $(objfiles_h) $(symfile_h)
+ $(language_h) $(expression_h) $(objfiles_h) $(symfile_h) \
+ $(cli_decode_h)
mcore-tdep.o: mcore-tdep.c $(defs_h) $(frame_h) $(gdbcmd_h) $(value_h) \
$(symtab_h) $(symfile_h) $(gdbcore_h) $(inferior_h)
@@ -2094,7 +2095,8 @@
$(regcache_h) $(ui_out_h) $(gdb_h)
completer.o: completer.c $(completer_h) $(gdbtypes_h) $(symtab_h) \
- $(defs_h) $(gdbcmd_h) $(expression_h) $(readline_headers)
+ $(defs_h) $(gdbcmd_h) $(expression_h) $(readline_headers) \
+ $(cli_decode_h)
top.o: top.c $(top_h) $(bfd_h) $(getopt_h) $(readline_headers) $(call_cmds_h) \
$(cli_cmds_h) $(cli_script_h) $(cli_setshow_h) \
Index: command.h
===================================================================
RCS file: /cvs/src/src/gdb/command.h,v
retrieving revision 1.27
diff -u -r1.27 command.h
--- command.h 2002/03/18 02:26:31 1.27
+++ command.h 2002/03/18 02:53:10
@@ -6,9 +6,10 @@
2000-12-01 fnasser@redhat.com */
/* Header file for command-reading library command.c.
- Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000
- Free Software Foundation, Inc.
+ Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1999,
+ 2000, 2002 Free Software Foundation, Inc.
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@@ -44,6 +45,8 @@
class_pseudo, class_tui, class_xdb
};
+/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
+ cmd_types'' can be moved from "command.h" to "cli-decode.h". */
/* Not a set/show command. Note that some commands which begin with
"set" or "show" might be in this category, if their syntax does
not fall into one of the following categories. */
@@ -105,156 +108,7 @@
var_types;
/* This structure records one command'd definition. */
-
-
-/* This flag is used by the code executing commands to warn the user
- the first time a deprecated command is used, see the 'flags' field in
- the following struct.
-*/
-#define CMD_DEPRECATED 0x1
-#define DEPRECATED_WARN_USER 0x2
-#define MALLOCED_REPLACEMENT 0x4
-
-struct cmd_list_element
- {
- /* Points to next command in this list. */
- struct cmd_list_element *next;
-
- /* Name of this command. */
- char *name;
-
- /* Command class; class values are chosen by application program. */
- enum command_class class;
-
- /* Function definition of this command. NULL for command class
- names and for help topics that are not really commands. NOTE:
- cagney/2002-02-02: This function signature is evolving. For
- the moment suggest sticking with either set_cmd_cfunc() or
- set_cmd_sfunc(). */
- void (*func) (struct cmd_list_element *c, char *args, int from_tty);
- /* The command's real callback. At present func() bounces through
- to one of the below. */
- union
- {
- /* If type is not_set_cmd, call it like this: */
- void (*cfunc) (char *args, int from_tty);
-
- /* If type is set_cmd or show_cmd, first set the variables, and
- then call this. */
- void (*sfunc) (char *args, int from_tty, struct cmd_list_element * c);
- }
- function;
-
- /* Documentation of this command (or help topic).
- First line is brief documentation; remaining lines form, with it,
- the full documentation. First line should end with a period.
- Entire string should also end with a period, not a newline. */
- char *doc;
-
- /* flags : a bitfield
-
- bit 0: (LSB) CMD_DEPRECATED, when 1 indicated that this command
- is deprecated. It may be removed from gdb's command set in the
- future.
-
- bit 1: DEPRECATED_WARN_USER, the user needs to be warned that
- this is a deprecated command. The user should only be warned
- the first time a command is used.
-
- bit 2: MALLOCED_REPLACEMENT, when functions are deprecated at
- compile time (this is the way it should, in general, be done)
- the memory containing the replacement string is statically
- allocated. In some cases it makes sense to deprecate commands
- at runtime (the testsuite is one example). In this case the
- memory for replacement is malloc'ed. When a command is
- undeprecated or re-deprecated at runtime we don't want to risk
- calling free on statically allocated memory, so we check this
- flag.
- */
- int flags;
-
- /* if this command is deprecated, this is the replacement name */
- char *replacement;
-
- /* If this command represents a show command, then this function
- is called before the variable's value is examined. */
- void (*pre_show_hook) (struct cmd_list_element *c);
-
- /* Hook for another command to be executed before this command. */
- struct cmd_list_element *hook_pre;
-
- /* Hook for another command to be executed after this command. */
- struct cmd_list_element *hook_post;
-
- /* Flag that specifies if this command is already running it's hook. */
- /* Prevents the possibility of hook recursion. */
- int hook_in;
-
- /* Nonzero identifies a prefix command. For them, the address
- of the variable containing the list of subcommands. */
- struct cmd_list_element **prefixlist;
-
- /* For prefix commands only:
- String containing prefix commands to get here: this one
- plus any others needed to get to it. Should end in a space.
- It is used before the word "command" in describing the
- commands reached through this prefix. */
- char *prefixname;
-
- /* For prefix commands only:
- nonzero means do not get an error if subcommand is not
- recognized; call the prefix's own function in that case. */
- char allow_unknown;
-
- /* Nonzero says this is an abbreviation, and should not
- be mentioned in lists of commands.
- This allows "br<tab>" to complete to "break", which it
- otherwise wouldn't. */
- char abbrev_flag;
-
- /* Completion routine for this command. TEXT is the text beyond
- what was matched for the command itself (leading whitespace is
- skipped). It stops where we are supposed to stop completing
- (rl_point) and is '\0' terminated.
-
- Return value is a malloc'd vector of pointers to possible completions
- terminated with NULL. If there are no completions, returning a pointer
- to a NULL would work but returning NULL itself is also valid.
- WORD points in the same buffer as TEXT, and completions should be
- returned relative to this position. For example, suppose TEXT is "foo"
- and we want to complete to "foobar". If WORD is "oo", return
- "oobar"; if WORD is "baz/foo", return "baz/foobar". */
- char **(*completer) (char *text, char *word);
-
- /* Type of "set" or "show" command (or SET_NOT_SET if not "set"
- or "show"). */
- cmd_types type;
-
- /* Pointer to variable affected by "set" and "show". Doesn't matter
- if type is not_set. */
- void *var;
-
- /* What kind of variable is *VAR? */
- var_types var_type;
-
- /* Pointer to NULL terminated list of enumerated values (like argv). */
- const char **enums;
-
- /* Pointer to command strings of user-defined commands */
- struct command_line *user_commands;
-
- /* Pointer to command that is hooked by this one, (by hook_pre)
- so the hook can be removed when this one is deleted. */
- struct cmd_list_element *hookee_pre;
-
- /* Pointer to command that is hooked by this one, (by hook_post)
- so the hook can be removed when this one is deleted. */
- struct cmd_list_element *hookee_post;
-
- /* Pointer to command that is aliased by this one, so the
- aliased command can be located in case it has been hooked. */
- struct cmd_list_element *cmd_pointer;
- };
+struct cmd_list_element;
/* Forward-declarations of the entry-points of cli/cli-decode.c. */
Index: completer.c
===================================================================
RCS file: /cvs/src/src/gdb/completer.c,v
retrieving revision 1.10
diff -u -r1.10 completer.c
--- completer.c 2002/02/18 01:12:38 1.10
+++ completer.c 2002/03/18 02:53:10
@@ -24,6 +24,8 @@
#include "expression.h"
#include "filenames.h" /* for DOSish file names */
+#include "cli/cli-decode.h"
+
/* FIXME: This is needed because of lookup_cmd_1().
We should be calling a hook instead so we eliminate the CLI dependency. */
#include "gdbcmd.h"
Index: maint.c
===================================================================
RCS file: /cvs/src/src/gdb/maint.c,v
retrieving revision 1.24
diff -u -r1.24 maint.c
--- maint.c 2002/02/23 13:18:36 1.24
+++ maint.c 2002/03/18 02:53:11
@@ -36,6 +36,8 @@
#include "objfiles.h"
#include "value.h"
+#include "cli/cli-decode.h"
+
extern void _initialize_maint_cmds (void);
static void maintenance_command (char *, int);
Index: top.c
===================================================================
RCS file: /cvs/src/src/gdb/top.c,v
retrieving revision 1.59
diff -u -r1.59 top.c
--- top.c 2002/03/17 19:53:39 1.59
+++ top.c 2002/03/18 02:53:15
@@ -27,6 +27,7 @@
#include "cli/cli-cmds.h"
#include "cli/cli-script.h"
#include "cli/cli-setshow.h"
+#include "cli/cli-decode.h"
#include "symtab.h"
#include "inferior.h"
#include <signal.h>
Index: cli/cli-decode.h
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-decode.h,v
retrieving revision 1.9
diff -u -r1.9 cli-decode.h
--- cli-decode.h 2002/03/06 06:28:35 1.9
+++ cli-decode.h 2002/03/18 02:53:15
@@ -20,24 +20,11 @@
#define CLI_DECODE_H 1
#include "gdb_regex.h" /* Needed by apropos_cmd. */
+#include "command.h"
-/* Command classes are top-level categories into which commands are broken
- down for "help" purposes.
- Notes on classes: class_alias is for alias commands which are not
- abbreviations of the original command. class-pseudo is for
- commands which are not really commands nor help topics ("stop"). */
-
-enum command_class
-{
- /* Special args to help_list */
- class_deprecated, all_classes = -2, all_commands = -1,
- /* Classes of commands */
- no_class = -1, class_run = 0, class_vars, class_stack,
- class_files, class_support, class_info, class_breakpoint, class_trace,
- class_alias, class_obscure, class_user, class_maintenance,
- class_pseudo, class_tui, class_xdb
-};
-
+#if 0
+/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
+ cmd_types'' can be moved from "command.h" to "cli-decode.h". */
/* Not a set/show command. Note that some commands which begin with
"set" or "show" might be in this category, if their syntax does
not fall into one of the following categories. */
@@ -48,55 +35,7 @@
show_cmd
}
cmd_types;
-
-/* Reasonable values for an AUTO_BOOLEAN variable. */
-enum cmd_auto_boolean
-{
- CMD_AUTO_BOOLEAN_TRUE,
- CMD_AUTO_BOOLEAN_FALSE,
- CMD_AUTO_BOOLEAN_AUTO
-};
-
-/* Types of "set" or "show" command. */
-typedef enum var_types
- {
- /* "on" or "off". *VAR is an integer which is nonzero for on,
- zero for off. */
- var_boolean,
-
- /* "on" / "true" / "enable" or "off" / "false" / "disable" or
- "auto. *VAR is an ``enum cmd_auto_boolean''. NOTE: In general
- a custom show command will need to be implemented - one that
- for "auto" prints both the "auto" and the current auto-selected
- value. */
- var_auto_boolean,
-
- /* Unsigned Integer. *VAR is an unsigned int. The user can type 0
- to mean "unlimited", which is stored in *VAR as UINT_MAX. */
- var_uinteger,
-
- /* Like var_uinteger but signed. *VAR is an int. The user can type 0
- to mean "unlimited", which is stored in *VAR as INT_MAX. */
- var_integer,
-
- /* String which the user enters with escapes (e.g. the user types \n and
- it is a real newline in the stored string).
- *VAR is a malloc'd string, or NULL if the string is empty. */
- var_string,
- /* String which stores what the user types verbatim.
- *VAR is a malloc'd string, or NULL if the string is empty. */
- var_string_noescape,
- /* String which stores a filename.
- *VAR is a malloc'd string, or NULL if the string is empty. */
- var_filename,
- /* ZeroableInteger. *VAR is an int. Like Unsigned Integer except
- that zero really means zero. */
- var_zinteger,
- /* Enumerated type. Can only have one of the specified values. *VAR is a
- char pointer to the name of the element that we find. */
- var_enum
- }
-var_types;
+#endif
/* This structure records one command'd definition. */