New field la_varobj_ops in struct language_defn
[deliverable/binutils-gdb.git] / gdb / language.h
index e6dc5447ccaab91ff45665058ded3427f56a7af8..5e029ea00bad1eb65c5c8edc43b9f4b9d97fec54 100644 (file)
@@ -1,7 +1,6 @@
 /* Source-language-related definitions for GDB.
 
-   Copyright (C) 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2003, 2004,
-   2007 Free Software Foundation, Inc.
+   Copyright (C) 1991-2013 Free Software Foundation, Inc.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
 #if !defined (LANGUAGE_H)
 #define LANGUAGE_H 1
 
-/* Forward decls for prototypes */
+/* Forward decls for prototypes */
 struct value;
 struct objfile;
 struct frame_info;
 struct expression;
 struct ui_file;
+struct value_print_options;
+struct type_print_options;
+struct lang_varobj_ops;
 
-/* enum exp_opcode;     ANSI's `wisdom' didn't include forward enum decls. */
-
-/* This used to be included to configure GDB for one or more specific
-   languages.  Now it is left out to configure for all of them.  FIXME.  */
-/* #include "lang_def.h" */
-#define        _LANG_c
-#define        _LANG_m2
-#define  _LANG_fortran
-#define  _LANG_pascal
-
-#define MAX_FORTRAN_DIMS  7    /* Maximum number of F77 array dims */
+#define MAX_FORTRAN_DIMS  7    /* Maximum number of F77 array dims.  */
 
 /* range_mode ==
    range_mode_auto:   range_check set automatically to default of language.
@@ -64,29 +56,8 @@ extern enum range_check
   }
 range_check;
 
-/* type_mode ==
-   type_mode_auto:   type_check set automatically to default of language
-   type_mode_manual: type_check set manually by user. */
-
-extern enum type_mode
-  {
-    type_mode_auto, type_mode_manual
-  }
-type_mode;
-
-/* type_check ==
-   type_check_on:    Types are checked in GDB expressions, producing errors.
-   type_check_warn:  Types are checked, producing warnings.
-   type_check_off:   Types are not checked in GDB expressions.  */
-
-extern enum type_check
-  {
-    type_check_off, type_check_warn, type_check_on
-  }
-type_check;
-
 /* case_mode ==
-   case_mode_auto:   case_sensitivity set upon selection of scope 
+   case_mode_auto:   case_sensitivity set upon selection of scope.
    case_mode_manual: case_sensitivity set only by user.  */
 
 extern enum case_mode
@@ -96,8 +67,8 @@ extern enum case_mode
 case_mode;
 
 /* array_ordering ==
-   array_row_major:     Arrays are in row major order
-   array_column_major:  Arrays are in column major order.*/
+   array_row_major:     Arrays are in row major order.
+   array_column_major:  Arrays are in column major order.  */
 
 extern enum array_ordering
   {
@@ -107,14 +78,25 @@ array_ordering;
 
 
 /* case_sensitivity ==
-   case_sensitive_on:   Case sensitivity in name matching is used
-   case_sensitive_off:  Case sensitivity in name matching is not used  */
+   case_sensitive_on:   Case sensitivity in name matching is used.
+   case_sensitive_off:  Case sensitivity in name matching is not used.  */
 
 extern enum case_sensitivity
   {
     case_sensitive_on, case_sensitive_off
   }
 case_sensitivity;
+
+
+/* macro_expansion ==
+   macro_expansion_no:  No macro expansion is available.
+   macro_expansion_c:   C-like macro expansion is available.  */
+
+enum macro_expansion
+  {
+    macro_expansion_no, macro_expansion_c
+  };
+
 \f
 /* Per architecture (OS/ABI) language information.  */
 
@@ -125,60 +107,60 @@ struct language_arch_info
      expressions, regardless of whether the program being debugged
      actually defines such a type.  */
   struct type **primitive_type_vector;
-  /* Type of elements of strings. */
+  /* Type of elements of strings.  */
   struct type *string_char_type;
+
+  /* Symbol name of type to use as boolean type, if defined.  */
+  const char *bool_type_symbol;
+  /* Otherwise, this is the default boolean builtin type.  */
+  struct type *bool_type_default;
 };
 
-struct type *language_string_char_type (const struct language_defn *l,
-                                       struct gdbarch *gdbarch);
+/* A pointer to a function expected to return nonzero if
+   SYMBOL_SEARCH_NAME matches the given LOOKUP_NAME.
 
-struct type *language_lookup_primitive_type_by_name (const struct language_defn *l,
-                                                    struct gdbarch *gdbarch,
-                                                    const char *name);
+   SYMBOL_SEARCH_NAME should be a symbol's "search" name.
+   LOOKUP_NAME should be the name of an entity after it has been
+   transformed for lookup.  */
+
+typedef int (*symbol_name_cmp_ftype) (const char *symbol_search_name,
+                                         const char *lookup_name);
 
 /* Structure tying together assorted information about a language.  */
 
 struct language_defn
   {
-    /* Name of the language */
+    /* Name of the language */
 
     char *la_name;
 
-    /* its symtab language-enum (defs.h) */
+    /* its symtab language-enum (defs.h) */
 
     enum language la_language;
 
-    /* Its builtin types.  This is a vector ended by a NULL pointer.  These
-       types can be specified by name in parsing types in expressions,
-       regardless of whether the program being debugged actually defines
-       such a type.  */
-
-    struct type **const *la_builtin_type_vector;
-
-    /* Default range checking */
+    /* Default range checking.  */
 
     enum range_check la_range_check;
 
-    /* Default type checking */
-
-    enum type_check la_type_check;
-
-    /* Default case sensitivity */
+    /* Default case sensitivity.  */
     enum case_sensitivity la_case_sensitivity;
 
-    /* Multi-dimensional array ordering */
+    /* Multi-dimensional array ordering */
     enum array_ordering la_array_ordering;
 
+    /* Style of macro expansion, if any, supported by this language.  */
+    enum macro_expansion la_macro_expansion;
+
     /* Definitions related to expression printing, prefixifying, and
-       dumping */
+       dumping */
 
     const struct exp_descriptor *la_exp_desc;
 
-    /* Parser function. */
+    /* Parser function.  */
 
     int (*la_parser) (void);
 
-    /* Parser error function */
+    /* Parser error function */
 
     void (*la_error) (char *);
 
@@ -190,31 +172,70 @@ struct language_defn
 
     void (*la_post_parser) (struct expression ** expp, int void_context_p);
 
-    void (*la_printchar) (int ch, struct ui_file * stream);
+    void (*la_printchar) (int ch, struct type *chtype,
+                         struct ui_file * stream);
+
+    void (*la_printstr) (struct ui_file * stream, struct type *elttype,
+                        const gdb_byte *string, unsigned int length,
+                        const char *encoding, int force_ellipses,
+                        const struct value_print_options *);
+
+    void (*la_emitchar) (int ch, struct type *chtype,
+                        struct ui_file * stream, int quoter);
+
+    /* Print a type using syntax appropriate for this language.  */
+
+    void (*la_print_type) (struct type *, const char *, struct ui_file *, int,
+                          int, const struct type_print_options *);
+
+    /* Print a typedef using syntax appropriate for this language.
+       TYPE is the underlying type.  NEW_SYMBOL is the symbol naming
+       the type.  STREAM is the output stream on which to print.  */
+
+    void (*la_print_typedef) (struct type *type, struct symbol *new_symbol,
+                             struct ui_file *stream);
+
+    /* Print a value using syntax appropriate for this language.
+       
+       TYPE is the type of the sub-object to be printed.
+
+       CONTENTS holds the bits of the value.  This holds the entire
+       enclosing object.
+
+       EMBEDDED_OFFSET is the offset into the outermost object of the
+       sub-object represented by TYPE.  This is the object which this
+       call should print.  Note that the enclosing type is not
+       available.
 
-    void (*la_printstr) (struct ui_file * stream, const gdb_byte *string,
-                        unsigned int length, int width,
-                        int force_ellipses);
+       ADDRESS is the address in the inferior of the enclosing object.
 
-    void (*la_emitchar) (int ch, struct ui_file * stream, int quoter);
+       STREAM is the stream on which the value is to be printed.
 
-    struct type *(*la_fund_type) (struct objfile *, int);
+       RECURSE is the recursion depth.  It is zero-based.
 
-    /* Print a type using syntax appropriate for this language. */
+       OPTIONS are the formatting options to be used when
+       printing.  */
 
-    void (*la_print_type) (struct type *, char *, struct ui_file *, int,
-                          int);
+    void (*la_val_print) (struct type *type,
+                         const gdb_byte *contents,
+                         int embedded_offset, CORE_ADDR address,
+                         struct ui_file *stream, int recurse,
+                         const struct value *val,
+                         const struct value_print_options *options);
 
-    /* Print a value using syntax appropriate for this language. */
+    /* Print a top-level value using syntax appropriate for this language.  */
 
-    int (*la_val_print) (struct type *, const gdb_byte *, int, CORE_ADDR,
-                        struct ui_file *, int, int, int,
-                        enum val_prettyprint);
+    void (*la_value_print) (struct value *, struct ui_file *,
+                           const struct value_print_options *);
 
-    /* Print a top-level value using syntax appropriate for this language. */
+    /* Given a symbol VAR, and a stack frame id FRAME, read the value
+       of the variable an return (pointer to a) struct value containing
+       the value.
 
-    int (*la_value_print) (struct value *, struct ui_file *,
-                          int, enum val_prettyprint);
+       Throw an error if the variable cannot be found.  */
+
+    struct value *(*la_read_var_value) (struct symbol *var,
+                                       struct frame_info *frame);
 
     /* PC is possibly an unknown languages trampoline.
        If that PC falls in a trampoline belonging to this language,
@@ -224,24 +245,18 @@ struct language_defn
 
     /* Now come some hooks for lookup_symbol.  */
 
-    /* If this is non-NULL, lookup_symbol will do the 'field_of_this'
-       check, using this function to find the value of this.  */
-
-    /* FIXME: carlton/2003-05-19: Audit all the language_defn structs
-       to make sure we're setting this appropriately: I'm sure it
-       could be NULL in more languages.  */
+    /* If this is non-NULL, specifies the name that of the implicit
+       local variable that refers to the current object instance.  */
 
-    struct value *(*la_value_of_this) (int complain);
+    char *la_name_of_this;
 
     /* This is a function that lookup_symbol will call when it gets to
        the part of symbol lookup where C looks up static and global
        variables.  */
 
     struct symbol *(*la_lookup_symbol_nonlocal) (const char *,
-                                                const char *,
                                                 const struct block *,
-                                                const domain_enum,
-                                                struct symtab **);
+                                                const domain_enum);
 
     /* Find the definition of the type with the given name.  */
     struct type *(*la_lookup_transparent_type) (const char *);
@@ -252,24 +267,30 @@ struct language_defn
     /* Return class name of a mangled method name or NULL.  */
     char *(*la_class_name_from_physname) (const char *physname);
 
-    /* Table for printing expressions */
+    /* Table for printing expressions */
 
     const struct op_print *la_op_print_tab;
 
     /* Zero if the language has first-class arrays.  True if there are no
-       array values, and array objects decay to pointers, as in C. */
+       array values, and array objects decay to pointers, as in C.  */
 
     char c_style_arrays;
 
-    /* Index to use for extracting the first element of a string. */
+    /* Index to use for extracting the first element of a string.  */
     char string_lower_bound;
 
-    /* Type of elements of strings. */
-    struct type **string_char_type;
-
     /* The list of characters forming word boundaries.  */
     char *(*la_word_break_characters) (void);
 
+    /* Should return a vector of all symbols which are possible
+       completions for TEXT.  WORD is the entire command on which the
+       completion is being made.  If CODE is TYPE_CODE_UNDEF, then all
+       symbols should be examined; otherwise, only STRUCT_DOMAIN
+       symbols whose type has a code of CODE should be matched.  */
+    VEC (char_ptr) *(*la_make_symbol_completion_list) (const char *text,
+                                                      const char *word,
+                                                      enum type_code code);
+
     /* The per-architecture (OS/ABI) language information.  */
     void (*la_language_arch_info) (struct gdbarch *,
                                   struct language_arch_info *);
@@ -277,11 +298,58 @@ struct language_defn
     /* Print the index of an element of an array.  */
     void (*la_print_array_index) (struct value *index_value,
                                   struct ui_file *stream,
-                                  int format,
-                                  enum val_prettyprint pretty);
-
-    /* Add fields above this point, so the magic number is always last. */
-    /* Magic number for compat checking */
+                                  const struct value_print_options *options);
+
+    /* Return non-zero if TYPE should be passed (and returned) by
+       reference at the language level.  */
+    int (*la_pass_by_reference) (struct type *type);
+
+    /* Obtain a string from the inferior, storing it in a newly allocated
+       buffer in BUFFER, which should be freed by the caller.  If the
+       in- and out-parameter *LENGTH is specified at -1, the string is
+       read until a null character of the appropriate width is found -
+       otherwise the string is read to the length of characters specified.
+       On completion, *LENGTH will hold the size of the string in characters.
+       If a *LENGTH of -1 was specified it will count only actual
+       characters, excluding any eventual terminating null character.
+       Otherwise *LENGTH will include all characters - including any nulls.
+       CHARSET will hold the encoding used in the string.  */
+    void (*la_get_string) (struct value *value, gdb_byte **buffer, int *length,
+                          struct type **chartype, const char **charset);
+
+    /* Return a pointer to the function that should be used to match
+       a symbol name against LOOKUP_NAME. This is mostly for languages
+       such as Ada where the matching algorithm depends on LOOKUP_NAME.
+
+       This field may be NULL, in which case strcmp_iw will be used
+       to perform the matching.  */
+    symbol_name_cmp_ftype (*la_get_symbol_name_cmp) (const char *lookup_name);
+
+    /* Find all symbols in the current program space matching NAME in
+       DOMAIN, according to this language's rules.
+
+       The search is done in BLOCK only.
+       The caller is responsible for iterating up through superblocks
+       if desired.
+
+       For each one, call CALLBACK with the symbol and the DATA
+       argument.  If CALLBACK returns zero, the iteration ends at that
+       point.
+
+       This field may not be NULL.  If the language does not need any
+       special processing here, 'iterate_over_symbols' should be
+       used as the definition.  */
+    void (*la_iterate_over_symbols) (const struct block *block,
+                                    const char *name,
+                                    domain_enum domain,
+                                    symbol_found_callback_ftype *callback,
+                                    void *data);
+
+    /* Various operations on varobj.  */
+    const struct lang_varobj_ops *la_varobj_ops;
+
+    /* Add fields above this point, so the magic number is always last.  */
+    /* Magic number for compat checking.  */
 
     long la_magic;
 
@@ -322,21 +390,29 @@ extern enum language_mode
     language_mode_auto, language_mode_manual
   }
 language_mode;
+
+struct type *language_bool_type (const struct language_defn *l,
+                                struct gdbarch *gdbarch);
+
+struct type *language_string_char_type (const struct language_defn *l,
+                                       struct gdbarch *gdbarch);
+
+struct type *language_lookup_primitive_type_by_name (const struct language_defn *l,
+                                                    struct gdbarch *gdbarch,
+                                                    const char *name);
+
 \f
 /* These macros define the behaviour of the expression 
    evaluator.  */
 
-/* Should we strictly type check expressions? */
-#define STRICT_TYPE (type_check != type_check_off)
-
-/* Should we range check values against the domain of their type? */
+/* Should we range check values against the domain of their type?  */
 #define RANGE_CHECK (range_check != range_check_off)
 
-/* "cast" really means conversion */
-/* FIXME -- should be a setting in language_defn */
-#define CAST_IS_CONVERSION (current_language->la_language == language_c  || \
-                           current_language->la_language == language_cplus || \
-                           current_language->la_language == language_objc)
+/* "cast" really means conversion */
+/* FIXME -- should be a setting in language_defn */
+#define CAST_IS_CONVERSION(LANG) ((LANG)->la_language == language_c  || \
+                                 (LANG)->la_language == language_cplus || \
+                                 (LANG)->la_language == language_objc)
 
 extern void language_info (int);
 
@@ -346,96 +422,66 @@ extern enum language set_language (enum language);
 /* This page contains functions that return things that are
    specific to languages.  Each of these functions is based on
    the current setting of working_lang, which the user sets
-   with the "set language" command. */
+   with the "set language" command.  */
+
+#define LA_PRINT_TYPE(type,varstring,stream,show,level,flags)          \
+  (current_language->la_print_type(type,varstring,stream,show,level,flags))
 
-#define create_fundamental_type(objfile,typeid) \
-  (current_language->la_fund_type(objfile, typeid))
+#define LA_PRINT_TYPEDEF(type,new_symbol,stream) \
+  (current_language->la_print_typedef(type,new_symbol,stream))
 
-#define LA_PRINT_TYPE(type,varstring,stream,show,level) \
-  (current_language->la_print_type(type,varstring,stream,show,level))
+#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,val,recurse,options) \
+  (current_language->la_val_print(type,valaddr,offset,addr,stream, \
+                                 val,recurse,options))
+#define LA_VALUE_PRINT(val,stream,options) \
+  (current_language->la_value_print(val,stream,options))
 
-#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,fmt,deref,recurse,pretty) \
-  (current_language->la_val_print(type,valaddr,offset,addr,stream,fmt,deref, \
-                                 recurse,pretty))
-#define LA_VALUE_PRINT(val,stream,fmt,pretty) \
-  (current_language->la_value_print(val,stream,fmt,pretty))
+#define LA_PRINT_CHAR(ch, type, stream) \
+  (current_language->la_printchar(ch, type, stream))
+#define LA_PRINT_STRING(stream, elttype, string, length, encoding, force_ellipses, options) \
+  (current_language->la_printstr(stream, elttype, string, length, \
+                                encoding, force_ellipses,options))
+#define LA_EMIT_CHAR(ch, type, stream, quoter) \
+  (current_language->la_emitchar(ch, type, stream, quoter))
+#define LA_GET_STRING(value, buffer, length, chartype, encoding) \
+  (current_language->la_get_string(value, buffer, length, chartype, encoding))
 
-#define LA_PRINT_CHAR(ch, stream) \
-  (current_language->la_printchar(ch, stream))
-#define LA_PRINT_STRING(stream, string, length, width, force_ellipses) \
-  (current_language->la_printstr(stream, string, length, width, force_ellipses))
-#define LA_EMIT_CHAR(ch, stream, quoter) \
-  (current_language->la_emitchar(ch, stream, quoter))
+#define LA_PRINT_ARRAY_INDEX(index_value, stream, options) \
+  (current_language->la_print_array_index(index_value, stream, options))
 
-#define LA_PRINT_ARRAY_INDEX(index_value, stream, format, pretty) \
-  (current_language->la_print_array_index(index_value, stream, format, pretty))
+#define LA_ITERATE_OVER_SYMBOLS(BLOCK, NAME, DOMAIN, CALLBACK, DATA) \
+  (current_language->la_iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK, \
+                                             DATA))
 
 /* Test a character to decide whether it can be printed in literal form
    or needs to be printed in another representation.  For example,
    in C the literal form of the character with octal value 141 is 'a'
    and the "other representation" is '\141'.  The "other representation"
-   is program language dependent. */
+   is program language dependent.  */
 
 #define PRINT_LITERAL_FORM(c)          \
   ((c) >= 0x20                         \
    && ((c) < 0x7F || (c) >= 0xA0)      \
    && (!sevenbit_strings || (c) < 0x80))
 
-#if 0
-/* FIXME: cagney/2000-03-04: This function does not appear to be used.
-   It can be deleted once 5.0 has been released. */
-/* Return a string that contains the hex digits of the number.  No preceeding
-   "0x" */
-
-extern char *longest_raw_hex_string (LONGEST);
-#endif
-
 /* Type predicates */
 
-extern int simple_type (struct type *);
-
-extern int ordered_type (struct type *);
-
-extern int same_type (struct type *, struct type *);
-
-extern int integral_type (struct type *);
-
-extern int numeric_type (struct type *);
-
-extern int character_type (struct type *);
-
-extern int boolean_type (struct type *);
-
-extern int float_type (struct type *);
-
 extern int pointer_type (struct type *);
 
-extern int structured_type (struct type *);
-
-/* Checks Binary and Unary operations for semantic type correctness */
-/* FIXME:  Does not appear to be used */
+/* Checks Binary and Unary operations for semantic type correctness.  */
+/* FIXME:  Does not appear to be used.  */
 #define unop_type_check(v,o) binop_type_check((v),NULL,(o))
 
 extern void binop_type_check (struct value *, struct value *, int);
 
 /* Error messages */
 
-extern void op_error (const char *lhs, enum exp_opcode,
-                     const char *rhs);
-
-extern void type_error (const char *, ...) ATTR_FORMAT (printf, 1, 2);
-
-extern void range_error (const char *, ...) ATTR_FORMAT (printf, 1, 2);
+extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
 
 /* Data:  Does this value represent "truth" to the current language?  */
 
 extern int value_true (struct value *);
 
-extern struct type *lang_bool_type (void);
-
-/* The type used for Boolean values in the current language. */
-#define LA_BOOL_TYPE lang_bool_type ()
-
 /* Misc:  The string representing a particular enum language.  */
 
 extern enum language language_enum (char *str);
@@ -450,7 +496,7 @@ extern void add_language (const struct language_defn *);
 
 extern enum language get_frame_language (void);        /* In stack.c */
 
-/* Check for a language-specific trampoline. */
+/* Check for a language-specific trampoline.  */
 
 extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc);
 
@@ -468,7 +514,25 @@ extern char *default_word_break_characters (void);
 /* Print the index of an array element using the C99 syntax.  */
 extern void default_print_array_index (struct value *index_value,
                                        struct ui_file *stream,
-                                       int format,
-                                       enum val_prettyprint pretty);
+                                      const struct value_print_options *options);
+
+/* Return non-zero if TYPE should be passed (and returned) by
+   reference at the language level.  */
+int language_pass_by_reference (struct type *type);
+
+/* Return zero; by default, types are passed by value at the language
+   level.  The target ABI may pass or return some structs by reference
+   independent of this.  */
+int default_pass_by_reference (struct type *type);
+
+/* The default implementation of la_print_typedef.  */
+void default_print_typedef (struct type *type, struct symbol *new_symbol,
+                           struct ui_file *stream);
+
+void default_get_string (struct value *value, gdb_byte **buffer, int *length,
+                        struct type **char_type, const char **charset);
+
+void c_get_string (struct value *value, gdb_byte **buffer, int *length,
+                  struct type **char_type, const char **charset);
 
 #endif /* defined (LANGUAGE_H) */
This page took 0.051111 seconds and 4 git commands to generate.