From 5638284566b17ba60eedca50f6e7bc13e7a3cc29 Mon Sep 17 00:00:00 2001 From: Fernando Nasser Date: Thu, 23 Mar 2000 23:43:19 +0000 Subject: 2000-03-23 Fernando Nasser From David Whedon * top.c (execute_command): Checks all commands beore executing to see if the user needs to be warned that the command is deprecated, warns user if appropriate. (add_info), (add_info_alias), (add_com) , (add_com_alias): Changed return values from void to struct cmd_list_element *. * command.c (lookup_cmd_1): Check aliases before following link in case user needs to be warned about a deprecated alias. (deprecate_cmd): new exported function for command deprecation, sets flags and posibly a replacement string. (deprecated_cmd_warning): New exported funciton to warn user about a deprecated command. (lookup_cmd_composition): New exported function that determines alias, prefix_command, and cmd based on a string. This is useful is we want to full name of a command. * command.h : Added prototypes for deprecate_cmd, deprecated_warn_user and lookup_cmd_composition, added flags to the cmd_list_element structure, changed return values for add_com_* and add_info_* from void to cmd_list_element. * maint.c : (maintenance_deprecate): New function to deprecate a command. This exists only so that the testsuite can deprecate commands at runtime and check the warning behavior. (maintenance_undeprecate) : New function, drops deprecated flags. (maintenance_do_deprecate): Actually does the (un)deprecation. (initialize_maint_cmds): Added the above new deprecate commands. --- gdb/command.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 7 deletions(-) (limited to 'gdb/command.h') diff --git a/gdb/command.h b/gdb/command.h index fcff845..200a487 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -82,6 +82,15 @@ 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. */ @@ -115,6 +124,31 @@ struct cmd_list_element 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 comtaining 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; + /* Hook for another command to be executed before this command. */ struct cmd_list_element *hook; @@ -208,18 +242,30 @@ extern struct cmd_list_element * lookup_cmd_1 PARAMS ((char **, struct cmd_list_element *, struct cmd_list_element **, int)); +extern struct cmd_list_element * + deprecate_cmd (struct cmd_list_element *, char * ); + extern void -add_com PARAMS ((char *, enum command_class, void (*fun) (char *, int), + deprecated_cmd_warning (char **); + +extern int + lookup_cmd_composition (char *text, + struct cmd_list_element **alias, + struct cmd_list_element **prefix_cmd, + struct cmd_list_element **cmd); + +extern struct cmd_list_element * + add_com PARAMS ((char *, enum command_class, void (*fun) (char *, int), char *)); -extern void -add_com_alias PARAMS ((char *, char *, enum command_class, int)); +extern struct cmd_list_element * + add_com_alias PARAMS ((char *, char *, enum command_class, int)); -extern void -add_info PARAMS ((char *, void (*fun) (char *, int), char *)); +extern struct cmd_list_element * + add_info PARAMS ((char *, void (*fun) (char *, int), char *)); -extern void -add_info_alias PARAMS ((char *, char *, int)); +extern struct cmd_list_element * + add_info_alias PARAMS ((char *, char *, int)); extern char ** complete_on_cmdlist PARAMS ((struct cmd_list_element *, char *, char *)); -- cgit v1.1