* gc++filt.m4: New file.
[deliverable/binutils-gdb.git] / gdb / language.h
index 85826fd2307b1c5c9001ced104a94c0fd1d3aadf..aa0523b4899b51ecab8ef7ab7f1d43cbee1f2ac8 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, 2008, 2009 Free Software Foundation, Inc.
+   2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
@@ -186,18 +186,19 @@ 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, const gdb_byte *string,
-                        unsigned int length, int width,
-                        int force_ellipses,
+    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 ui_file * stream, int quoter);
+    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 *, char *, struct ui_file *, int,
+    void (*la_print_type) (struct type *, const char *, struct ui_file *, int,
                           int);
 
     /* Print a typedef using syntax appropriate for this language.
@@ -207,11 +208,33 @@ struct language_defn
     void (*la_print_typedef) (struct type *type, struct symbol *new_symbol,
                              struct ui_file *stream);
 
-    /* Print a value using syntax appropriate for this language. */
+    /* Print a value using syntax appropriate for this language.
+       
+       TYPE is the type of the sub-object to be printed.
 
-    int (*la_val_print) (struct type *, const gdb_byte *, int, CORE_ADDR,
-                        struct ui_file *, int,
-                        const struct value_print_options *);
+       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.
+
+       ADDRESS is the address in the inferior of the enclosing object.
+
+       STREAM is the stream on which the value is to be printed.
+
+       RECURSE is the recursion depth.  It is zero-based.
+
+       OPTIONS are the formatting options to be used when
+       printing.  */
+
+    int (*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 top-level value using syntax appropriate for this language. */
 
@@ -236,7 +259,6 @@ struct language_defn
        variables.  */
 
     struct symbol *(*la_lookup_symbol_nonlocal) (const char *,
-                                                const char *,
                                                 const struct block *,
                                                 const domain_enum);
 
@@ -283,12 +305,17 @@ struct language_defn
     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.  */
+       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,
-                         const char **charset);
+                          struct type **chartype, const char **charset);
 
     /* Add fields above this point, so the magic number is always last. */
     /* Magic number for compat checking */
@@ -355,9 +382,9 @@ struct type *language_lookup_primitive_type_by_name (const struct language_defn
 
 /* "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)
+#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);
 
@@ -375,21 +402,21 @@ extern enum language set_language (enum language);
 #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) \
+#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,val,recurse,options) \
   (current_language->la_val_print(type,valaddr,offset,addr,stream, \
-                                 recurse,options))
+                                 val,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,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_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_ARRAY_INDEX(index_value, stream, optins) \
   (current_language->la_print_array_index(index_value, stream, options))
@@ -405,15 +432,6 @@ extern enum language set_language (enum language);
    && ((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 *);
@@ -444,9 +462,9 @@ extern void binop_type_check (struct value *, struct value *, int);
 
 /* Error messages */
 
-extern void type_error (const char *, ...) ATTR_FORMAT (printf, 1, 2);
+extern void type_error (const char *, ...) ATTRIBUTE_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?  */
 
@@ -500,9 +518,9 @@ 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);
+                        struct type **char_type, const char **charset);
 
 void c_get_string (struct value *value, gdb_byte **buffer, int *length,
-                  const char **charset);
+                  struct type **char_type, const char **charset);
 
 #endif /* defined (LANGUAGE_H) */
This page took 0.027916 seconds and 4 git commands to generate.