include/elf/
[deliverable/binutils-gdb.git] / gdb / language.h
index 5c86f6abca2b41676e22d535e59b9e0aa59f5600..85826fd2307b1c5c9001ced104a94c0fd1d3aadf 100644 (file)
@@ -1,7 +1,7 @@
 /* Source-language-related definitions for GDB.
 
    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2003, 2004,
-   2007 Free Software Foundation, Inc.
+   2007, 2008, 2009 Free Software Foundation, Inc.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
@@ -30,16 +30,7 @@ struct objfile;
 struct frame_info;
 struct expression;
 struct ui_file;
-
-/* 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
+struct value_print_options;
 
 #define MAX_FORTRAN_DIMS  7    /* Maximum number of F77 array dims */
 
@@ -115,6 +106,17 @@ 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.  */
 
@@ -127,6 +129,11 @@ struct language_arch_info
   struct type **primitive_type_vector;
   /* 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;
 };
 
 /* Structure tying together assorted information about a language.  */
@@ -155,6 +162,9 @@ struct language_defn
     /* 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 */
 
@@ -180,7 +190,8 @@ struct language_defn
 
     void (*la_printstr) (struct ui_file * stream, const gdb_byte *string,
                         unsigned int length, int width,
-                        int force_ellipses);
+                        int force_ellipses,
+                        const struct value_print_options *);
 
     void (*la_emitchar) (int ch, struct ui_file * stream, int quoter);
 
@@ -189,16 +200,23 @@ struct language_defn
     void (*la_print_type) (struct type *, char *, struct ui_file *, int,
                           int);
 
+    /* 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. */
 
     int (*la_val_print) (struct type *, const gdb_byte *, int, CORE_ADDR,
-                        struct ui_file *, int, int, int,
-                        enum val_prettyprint);
+                        struct ui_file *, int,
+                        const struct value_print_options *);
 
     /* Print a top-level value using syntax appropriate for this language. */
 
     int (*la_value_print) (struct value *, struct ui_file *,
-                          int, enum val_prettyprint);
+                          const struct value_print_options *);
 
     /* PC is possibly an unknown languages trampoline.
        If that PC falls in a trampoline belonging to this language,
@@ -208,14 +226,10 @@ 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.  */
+    /* If this is non-NULL, specifies the name that of the implicit
+       local variable that refers to the current object instance.  */
 
-    /* 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.  */
-
-    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
@@ -224,8 +238,7 @@ struct language_defn
     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 *);
@@ -251,6 +264,11 @@ struct language_defn
     /* The list of characters forming word boundaries.  */
     char *(*la_word_break_characters) (void);
 
+    /* Should return a NULL terminated array of all symbols which
+       are possible completions for TEXT.  WORD is the entire command
+       on which the completion is being made.  */
+    char **(*la_make_symbol_completion_list) (char *text, char *word);
+
     /* The per-architecture (OS/ABI) language information.  */
     void (*la_language_arch_info) (struct gdbarch *,
                                   struct language_arch_info *);
@@ -258,13 +276,20 @@ 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);
+                                  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.  LENGTH will
+       hold the size in bytes of the string (only actual characters, excluding
+       an eventual terminating null character).  CHARSET will hold the encoding
+       used in the string.  */
+    void (*la_get_string) (struct value *value, gdb_byte **buffer, int *length,
+                         const char **charset);
+
     /* Add fields above this point, so the magic number is always last. */
     /* Magic number for compat checking */
 
@@ -308,6 +333,9 @@ extern enum language_mode
   }
 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);
 
@@ -344,21 +372,27 @@ extern enum language set_language (enum language);
 #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,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_TYPEDEF(type,new_symbol,stream) \
+  (current_language->la_print_typedef(type,new_symbol,stream))
+
+#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,recurse,options) \
+  (current_language->la_val_print(type,valaddr,offset,addr,stream, \
+                                 recurse,options))
+#define LA_VALUE_PRINT(val,stream,options) \
+  (current_language->la_value_print(val,stream,options))
 
 #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_PRINT_STRING(stream, string, length, width, force_ellipses,options) \
+  (current_language->la_printstr(stream, string, length, width, \
+                                force_ellipses,options))
 #define LA_EMIT_CHAR(ch, stream, quoter) \
   (current_language->la_emitchar(ch, stream, quoter))
+#define LA_GET_STRING(value, buffer, length, encoding) \
+  (current_language->la_get_string(value, buffer, length, encoding))
 
-#define LA_PRINT_ARRAY_INDEX(index_value, stream, format, pretty) \
-  (current_language->la_print_array_index(index_value, stream, format, pretty))
+#define LA_PRINT_ARRAY_INDEX(index_value, stream, optins) \
+  (current_language->la_print_array_index(index_value, stream, options))
 
 /* Test a character to decide whether it can be printed in literal form
    or needs to be printed in another representation.  For example,
@@ -410,9 +444,6 @@ 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);
@@ -421,11 +452,6 @@ extern void range_error (const char *, ...) ATTR_FORMAT (printf, 1, 2);
 
 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);
@@ -458,8 +484,7 @@ 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.  */
@@ -470,4 +495,14 @@ int language_pass_by_reference (struct type *type);
    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,
+                        const char **charset);
+
+void c_get_string (struct value *value, gdb_byte **buffer, int *length,
+                  const char **charset);
+
 #endif /* defined (LANGUAGE_H) */
This page took 0.027211 seconds and 4 git commands to generate.