/* 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.
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_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_print_options *options);
/* Print a top-level value using syntax appropriate for this language. */
variables. */
struct symbol *(*la_lookup_symbol_nonlocal) (const char *,
- const char *,
const struct block *,
const domain_enum);
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 */
/* "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);
#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))
&& ((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 *);
/* 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? */
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) */