Class-ify ui_out
[deliverable/binutils-gdb.git] / gdb / mi / mi-cmd-info.c
index 8eb4220963c6d5afe4440e56f4fc4634183e0d19..480fd2566ee6ff76c3c602c08b542697d2019502 100644 (file)
@@ -1,5 +1,5 @@
 /* MI Command Set - information commands.
-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Copyright (C) 2011-2016 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "defs.h"
 #include "osdata.h"
 #include "mi-cmds.h"
+#include "ada-lang.h"
+#include "arch-utils.h"
+
+/* Implement the "-info-ada-exceptions" GDB/MI command.  */
+
+void
+mi_cmd_info_ada_exceptions (char *command, char **argv, int argc)
+{
+  struct ui_out *uiout = current_uiout;
+  struct gdbarch *gdbarch = get_current_arch ();
+  char *regexp;
+  struct cleanup *old_chain;
+  VEC(ada_exc_info) *exceptions;
+  int ix;
+  struct ada_exc_info *info;
+
+  switch (argc)
+    {
+    case 0:
+      regexp = NULL;
+      break;
+    case 1:
+      regexp = argv[0];
+      break;
+    default:
+      error (_("Usage: -info-ada-exceptions [REGEXP]"));
+      break;
+    }
+
+  exceptions = ada_exceptions_list (regexp);
+  old_chain = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
+
+  make_cleanup_ui_out_table_begin_end
+    (uiout, 2, VEC_length (ada_exc_info, exceptions), "ada-exceptions");
+  uiout->table_header (1, ui_left, "name", "Name");
+  uiout->table_header (1, ui_left, "address", "Address");
+  uiout->table_body ();
+
+  for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
+    {
+      struct cleanup *sub_chain;
+
+      sub_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
+      uiout->field_string ("name", info->name);
+      uiout->field_core_addr ("address", gdbarch, info->addr);
+
+      do_cleanups (sub_chain);
+    }
+
+  do_cleanups (old_chain);
+}
+
+/* Implement the "-info-gdb-mi-command" GDB/MI command.  */
+
+void
+mi_cmd_info_gdb_mi_command (char *command, char **argv, int argc)
+{
+  const char *cmd_name;
+  struct mi_cmd *cmd;
+  struct ui_out *uiout = current_uiout;
+  struct cleanup *old_chain;
+
+  /* This command takes exactly one argument.  */
+  if (argc != 1)
+    error (_("Usage: -info-gdb-mi-command MI_COMMAND_NAME"));
+  cmd_name = argv[0];
+
+  /* Normally, the command name (aka the "operation" in the GDB/MI
+     grammar), does not include the leading '-' (dash).  But for
+     the user's convenience, allow the user to specify the command
+     name to be with or without that leading dash.  */
+  if (cmd_name[0] == '-')
+    cmd_name++;
+
+  cmd = mi_lookup (cmd_name);
+
+  old_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "command");
+  uiout->field_string ("exists", cmd != NULL ? "true" : "false");
+  do_cleanups (old_chain);
+}
 
 void
 mi_cmd_info_os (char *command, char **argv, int argc)
This page took 0.028798 seconds and 4 git commands to generate.