You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if !defined (LANGUAGE_H)
#define LANGUAGE_H 1
#ifdef __STDC__ /* Forward decls for prototypes */
struct value;
struct objfile;
+struct expression;
/* enum exp_opcode; ANSI's `wisdom' didn't include forward enum decls. */
#endif
void (*la_error) PARAMS ((char *));
- void (*la_printchar) PARAMS ((int, GDB_FILE *));
+ /* Evaluate an expression. */
+ struct value * (*evaluate_exp) PARAMS ((struct type *, struct expression *,
+ int *, enum noside));
- void (*la_printstr) PARAMS ((GDB_FILE *, char *, unsigned int, int));
+ void (*la_printchar) PARAMS ((int ch, GDB_FILE *stream));
+
+ void (*la_printstr) PARAMS ((GDB_FILE *stream, char *string,
+ unsigned int length, int width,
+ int force_ellipses));
+
+ void (*la_emitchar) PARAMS ((int ch, GDB_FILE *stream, int quoter));
struct type *(*la_fund_type) PARAMS ((struct objfile *, int));
/* Print a value using syntax appropriate for this language. */
- int (*la_val_print) PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *,
+ int (*la_val_print) PARAMS ((struct type *, char *, int, CORE_ADDR, GDB_FILE *,
int, int, int, enum val_prettyprint));
/* Print a top-level value using syntax appropriate for this language. */
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. */
+
+ char c_style_arrays;
+
+ /* 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;
+
/* Add fields above this point, so the magic number is always last. */
/* Magic number for compat checking */
extern void
language_info PARAMS ((int));
-extern void
+extern enum language
set_language PARAMS ((enum language));
\f
#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,addr,stream,fmt,deref,recurse,pretty) \
- (current_language->la_val_print(type,valaddr,addr,stream,fmt,deref, \
+#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, stream) \
(current_language->la_printchar(ch, stream))
-#define LA_PRINT_STRING(stream, string, length, force_ellipses) \
- (current_language->la_printstr(stream, string, length, force_ellipses))
+#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))
/* Test a character to decide whether it can be printed in literal form
or needs to be printed in another representation. For example,
and the "other representation" is '\141'. The "other representation"
is program language dependent. */
-#define PRINT_LITERAL_FORM(c) \
- ((c)>=0x20 && ((c)<0x7F || (c)>=0xA0) && (!sevenbit_strings || (c)<0x80))
+#define PRINT_LITERAL_FORM(c) \
+ ((c) >= 0x20 \
+ && ((c) < 0x7F || (c) >= 0xA0) \
+ && (!sevenbit_strings || (c) < 0x80))
/* Return a format string for printf that will print a number in one of
the local (language-specific) formats. Result is static and is
op_error((f),(o),range_check==range_check_on ? 1 : 0)
extern void
-type_error ();
+type_error PARAMS ((char *, ...))
+ ATTR_FORMAT(printf, 1, 2);
void
-range_error ();
+range_error PARAMS ((char *, ...))
+ ATTR_FORMAT(printf, 1, 2);
/* Data: Does this value represent "truth" to the current language? */
extern int
value_true PARAMS ((struct value *));
+extern struct type * lang_bool_type PARAMS ((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 const struct language_defn *