15796c8dcSSimon Schubert /* GDB variable objects API. 2*ef5ccd6cSJohn Marino Copyright (C) 1999-2013 Free Software Foundation, Inc. 35796c8dcSSimon Schubert 45796c8dcSSimon Schubert This program is free software; you can redistribute it and/or modify 55796c8dcSSimon Schubert it under the terms of the GNU General Public License as published by 65796c8dcSSimon Schubert the Free Software Foundation; either version 3 of the License, or 75796c8dcSSimon Schubert (at your option) any later version. 85796c8dcSSimon Schubert 95796c8dcSSimon Schubert This program is distributed in the hope that it will be useful, 105796c8dcSSimon Schubert but WITHOUT ANY WARRANTY; without even the implied warranty of 115796c8dcSSimon Schubert MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 125796c8dcSSimon Schubert GNU General Public License for more details. 135796c8dcSSimon Schubert 145796c8dcSSimon Schubert You should have received a copy of the GNU General Public License 155796c8dcSSimon Schubert along with this program. If not, see <http://www.gnu.org/licenses/>. */ 165796c8dcSSimon Schubert 175796c8dcSSimon Schubert #ifndef VAROBJ_H 185796c8dcSSimon Schubert #define VAROBJ_H 1 195796c8dcSSimon Schubert 205796c8dcSSimon Schubert #include "symtab.h" 215796c8dcSSimon Schubert #include "gdbtypes.h" 225796c8dcSSimon Schubert #include "vec.h" 235796c8dcSSimon Schubert 245796c8dcSSimon Schubert /* Enumeration for the format types */ 255796c8dcSSimon Schubert enum varobj_display_formats 265796c8dcSSimon Schubert { 275796c8dcSSimon Schubert FORMAT_NATURAL, /* What gdb actually calls 'natural' */ 285796c8dcSSimon Schubert FORMAT_BINARY, /* Binary display */ 295796c8dcSSimon Schubert FORMAT_DECIMAL, /* Decimal display */ 305796c8dcSSimon Schubert FORMAT_HEXADECIMAL, /* Hex display */ 315796c8dcSSimon Schubert FORMAT_OCTAL /* Octal display */ 325796c8dcSSimon Schubert }; 335796c8dcSSimon Schubert 345796c8dcSSimon Schubert enum varobj_type 355796c8dcSSimon Schubert { 36c50c785cSJohn Marino USE_SPECIFIED_FRAME, /* Use the frame passed to varobj_create. */ 37c50c785cSJohn Marino USE_CURRENT_FRAME, /* Use the current frame. */ 38c50c785cSJohn Marino USE_SELECTED_FRAME /* Always reevaluate in selected frame. */ 395796c8dcSSimon Schubert }; 405796c8dcSSimon Schubert 415796c8dcSSimon Schubert /* Enumerator describing if a variable object is in scope. */ 425796c8dcSSimon Schubert enum varobj_scope_status 435796c8dcSSimon Schubert { 445796c8dcSSimon Schubert VAROBJ_IN_SCOPE = 0, /* Varobj is scope, value available. */ 45c50c785cSJohn Marino VAROBJ_NOT_IN_SCOPE = 1, /* Varobj is not in scope, value not 46c50c785cSJohn Marino available, but varobj can become in 47c50c785cSJohn Marino scope later. */ 485796c8dcSSimon Schubert VAROBJ_INVALID = 2, /* Varobj no longer has any value, and never 495796c8dcSSimon Schubert will. */ 505796c8dcSSimon Schubert }; 515796c8dcSSimon Schubert 52c50c785cSJohn Marino /* String representations of gdb's format codes (defined in varobj.c). */ 535796c8dcSSimon Schubert extern char *varobj_format_string[]; 545796c8dcSSimon Schubert 555796c8dcSSimon Schubert /* Languages supported by this variable objects system. */ 565796c8dcSSimon Schubert enum varobj_languages 575796c8dcSSimon Schubert { 58a45ae5f8SJohn Marino vlang_unknown = 0, vlang_c, vlang_cplus, vlang_java, vlang_ada, vlang_end 595796c8dcSSimon Schubert }; 605796c8dcSSimon Schubert 61c50c785cSJohn Marino /* String representations of gdb's known languages (defined in varobj.c). */ 625796c8dcSSimon Schubert extern char *varobj_language_string[]; 635796c8dcSSimon Schubert 64c50c785cSJohn Marino /* Struct thar describes a variable object instance. */ 655796c8dcSSimon Schubert struct varobj; 665796c8dcSSimon Schubert 675796c8dcSSimon Schubert typedef struct varobj *varobj_p; 685796c8dcSSimon Schubert DEF_VEC_P (varobj_p); 695796c8dcSSimon Schubert 705796c8dcSSimon Schubert typedef struct varobj_update_result_t 715796c8dcSSimon Schubert { 725796c8dcSSimon Schubert struct varobj *varobj; 735796c8dcSSimon Schubert int type_changed; 745796c8dcSSimon Schubert int children_changed; 755796c8dcSSimon Schubert int changed; 765796c8dcSSimon Schubert enum varobj_scope_status status; 775796c8dcSSimon Schubert /* This variable is used internally by varobj_update to indicate if the 785796c8dcSSimon Schubert new value of varobj is already computed and installed, or has to 79c50c785cSJohn Marino be yet installed. Don't use this outside varobj.c. */ 805796c8dcSSimon Schubert int value_installed; 815796c8dcSSimon Schubert 825796c8dcSSimon Schubert /* This will be non-NULL when new children were added to the varobj. 835796c8dcSSimon Schubert It lists the new children (which must necessarily come at the end 845796c8dcSSimon Schubert of the child list) added during an update. The caller is 855796c8dcSSimon Schubert responsible for freeing this vector. */ 865796c8dcSSimon Schubert VEC (varobj_p) *new; 875796c8dcSSimon Schubert } varobj_update_result; 885796c8dcSSimon Schubert 895796c8dcSSimon Schubert DEF_VEC_O (varobj_update_result); 905796c8dcSSimon Schubert 915796c8dcSSimon Schubert /* API functions */ 925796c8dcSSimon Schubert 935796c8dcSSimon Schubert extern struct varobj *varobj_create (char *objname, 945796c8dcSSimon Schubert char *expression, CORE_ADDR frame, 955796c8dcSSimon Schubert enum varobj_type type); 965796c8dcSSimon Schubert 975796c8dcSSimon Schubert extern char *varobj_gen_name (void); 985796c8dcSSimon Schubert 995796c8dcSSimon Schubert extern struct varobj *varobj_get_handle (char *name); 1005796c8dcSSimon Schubert 1015796c8dcSSimon Schubert extern char *varobj_get_objname (struct varobj *var); 1025796c8dcSSimon Schubert 1035796c8dcSSimon Schubert extern char *varobj_get_expression (struct varobj *var); 1045796c8dcSSimon Schubert 1055796c8dcSSimon Schubert extern int varobj_delete (struct varobj *var, char ***dellist, 1065796c8dcSSimon Schubert int only_children); 1075796c8dcSSimon Schubert 1085796c8dcSSimon Schubert extern enum varobj_display_formats varobj_set_display_format ( 1095796c8dcSSimon Schubert struct varobj *var, 1105796c8dcSSimon Schubert enum varobj_display_formats format); 1115796c8dcSSimon Schubert 1125796c8dcSSimon Schubert extern enum varobj_display_formats varobj_get_display_format ( 1135796c8dcSSimon Schubert struct varobj *var); 1145796c8dcSSimon Schubert 1155796c8dcSSimon Schubert extern int varobj_get_thread_id (struct varobj *var); 1165796c8dcSSimon Schubert 1175796c8dcSSimon Schubert extern void varobj_set_frozen (struct varobj *var, int frozen); 1185796c8dcSSimon Schubert 1195796c8dcSSimon Schubert extern int varobj_get_frozen (struct varobj *var); 1205796c8dcSSimon Schubert 1215796c8dcSSimon Schubert extern void varobj_get_child_range (struct varobj *var, int *from, int *to); 1225796c8dcSSimon Schubert 1235796c8dcSSimon Schubert extern void varobj_set_child_range (struct varobj *var, int from, int to); 1245796c8dcSSimon Schubert 1255796c8dcSSimon Schubert extern char *varobj_get_display_hint (struct varobj *var); 1265796c8dcSSimon Schubert 1275796c8dcSSimon Schubert extern int varobj_get_num_children (struct varobj *var); 1285796c8dcSSimon Schubert 1295796c8dcSSimon Schubert /* Return the list of children of VAR. The returned vector should not 1305796c8dcSSimon Schubert be modified in any way. FROM and TO are in/out parameters 1315796c8dcSSimon Schubert indicating the range of children to return. If either *FROM or *TO 1325796c8dcSSimon Schubert is less than zero on entry, then all children will be returned. On 1335796c8dcSSimon Schubert return, *FROM and *TO will be updated to indicate the real range 1345796c8dcSSimon Schubert that was returned. The resulting VEC will contain at least the 1355796c8dcSSimon Schubert children from *FROM to just before *TO; it might contain more 1365796c8dcSSimon Schubert children, depending on whether any more were available. */ 1375796c8dcSSimon Schubert extern VEC (varobj_p)* varobj_list_children (struct varobj *var, 1385796c8dcSSimon Schubert int *from, int *to); 1395796c8dcSSimon Schubert 1405796c8dcSSimon Schubert extern char *varobj_get_type (struct varobj *var); 1415796c8dcSSimon Schubert 1425796c8dcSSimon Schubert extern struct type *varobj_get_gdb_type (struct varobj *var); 1435796c8dcSSimon Schubert 1445796c8dcSSimon Schubert extern char *varobj_get_path_expr (struct varobj *var); 1455796c8dcSSimon Schubert 1465796c8dcSSimon Schubert extern enum varobj_languages varobj_get_language (struct varobj *var); 1475796c8dcSSimon Schubert 1485796c8dcSSimon Schubert extern int varobj_get_attributes (struct varobj *var); 1495796c8dcSSimon Schubert 1505796c8dcSSimon Schubert extern char *varobj_get_formatted_value (struct varobj *var, 1515796c8dcSSimon Schubert enum varobj_display_formats format); 1525796c8dcSSimon Schubert 1535796c8dcSSimon Schubert extern char *varobj_get_value (struct varobj *var); 1545796c8dcSSimon Schubert 1555796c8dcSSimon Schubert extern int varobj_set_value (struct varobj *var, char *expression); 1565796c8dcSSimon Schubert 1575796c8dcSSimon Schubert extern void all_root_varobjs (void (*func) (struct varobj *var, void *data), 1585796c8dcSSimon Schubert void *data); 1595796c8dcSSimon Schubert 1605796c8dcSSimon Schubert extern VEC(varobj_update_result) *varobj_update (struct varobj **varp, 1615796c8dcSSimon Schubert int explicit); 1625796c8dcSSimon Schubert 1635796c8dcSSimon Schubert extern void varobj_invalidate (void); 1645796c8dcSSimon Schubert 1655796c8dcSSimon Schubert extern int varobj_editable_p (struct varobj *var); 1665796c8dcSSimon Schubert 1675796c8dcSSimon Schubert extern int varobj_floating_p (struct varobj *var); 1685796c8dcSSimon Schubert 169c50c785cSJohn Marino extern void varobj_set_visualizer (struct varobj *var, 170c50c785cSJohn Marino const char *visualizer); 1715796c8dcSSimon Schubert 1725796c8dcSSimon Schubert extern void varobj_enable_pretty_printing (void); 1735796c8dcSSimon Schubert 1745796c8dcSSimon Schubert extern int varobj_has_more (struct varobj *var, int to); 1755796c8dcSSimon Schubert 1765796c8dcSSimon Schubert extern int varobj_pretty_printed_p (struct varobj *var); 1775796c8dcSSimon Schubert 1785796c8dcSSimon Schubert #endif /* VAROBJ_H */ 179