* Makefile.in (diststuff): Make all-doc; diststuff target does not
[deliverable/binutils-gdb.git] / gdb / language.h
index f25a35c0dacbdda94093685159f48705f358e0fc..941943b743357d2774b725b3bfe22f3a881aa40d 100644 (file)
@@ -17,13 +17,15 @@ GNU General Public License for more details.
 
 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
 
@@ -32,9 +34,10 @@ struct value;
 /* #include "lang_def.h" */
 #define        _LANG_c
 #define        _LANG_m2
-/* start-sanitize-chill */
 #define        _LANG_chill
-/* end-sanitize-chill */
+#define _LANG_fortran
+
+#define MAX_FORTRAN_DIMS  7   /* Maximum number of F77 array dims */ 
 
 /* range_mode ==
    range_mode_auto:   range_check set automatically to default of language.
@@ -97,40 +100,118 @@ struct language_format_info
 
 /* Structure tying together assorted information about a language.  */
 
-struct language_defn {
-  char *          la_name;             /* Name of the language */
-  enum language    la_language;                /* its symtab language-enum (defs.h) */
-  struct type ** const
-                 *la_builtin_type_vector;  /* Its builtin types */
-  enum range_check la_range_check;     /* Default range checking */
-  enum type_check  la_type_check;      /* Default type checking */
-  int            (*la_parser) PARAMS((void));  /* Parser function */
-  void           (*la_error) PARAMS ((char *)); /* Parser error function */
-  void          (*la_printchar) PARAMS ((int, FILE *));
-  void          (*la_printstr) PARAMS ((FILE *, char *, unsigned int, int));
-  struct type   *(*la_fund_type) PARAMS ((struct objfile *, int));
-  struct type   **la_longest_int;      /* Longest signed integral type */
-  struct type   **la_longest_unsigned_int; /* Longest uns integral type */
-  struct type   **la_longest_float;    /* Longest floating point type */
-  struct language_format_info
-                  la_binary_format;    /* Base 2 (binary) formats. */
-  struct language_format_info
-                  la_octal_format;     /* Base 8 (octal) formats. */
-  struct language_format_info
-                  la_decimal_format;   /* Base 10 (decimal) formats */
-  struct language_format_info
-                  la_hex_format;       /* Base 16 (hexadecimal) formats */
-  const struct op_print
-                 *la_op_print_tab;     /* Table for printing expressions */
-/* Add fields above this point, so the magic number is always last. */
-  long                    la_magic;            /* Magic number for compat checking */
+struct language_defn
+{
+  /* Name of the language */
+  
+  char *la_name;
+
+  /* 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 */
+
+  enum range_check la_range_check;
+
+  /* Default type checking */
+
+  enum type_check la_type_check;
+
+  /* Parser function. */
+  
+  int (*la_parser) PARAMS((void));
+
+  /* Parser error function */
+
+  void (*la_error) PARAMS ((char *));
+
+  /* Evaluate an expression. */
+  struct value * (*evaluate_exp) PARAMS ((struct type*, struct expression *, 
+                                         int *, enum noside));
+
+  void (*la_printchar) PARAMS ((int, GDB_FILE *));
+
+  void (*la_printstr) PARAMS ((GDB_FILE *, char *, unsigned int, int));
+
+  struct type *(*la_fund_type) PARAMS ((struct objfile *, int));
+
+  /* Print a type using syntax appropriate for this language. */
+
+  void (*la_print_type) PARAMS ((struct type *, char *, GDB_FILE *, int, int));
+
+  /* Print a value using syntax appropriate for this language. */
+
+  int (*la_val_print) PARAMS ((struct type *, char *,  CORE_ADDR, GDB_FILE *,
+                              int, int, int, enum val_prettyprint));
+
+  /* Print a top-level value using syntax appropriate for this language. */
+
+  int (*la_value_print) PARAMS ((struct value *, GDB_FILE *,
+                                int, enum val_prettyprint));
+
+  /* Base 2 (binary) formats. */
+
+  struct language_format_info la_binary_format;
+
+  /* Base 8 (octal) formats. */
+
+  struct language_format_info la_octal_format;
+
+  /* Base 10 (decimal) formats */
+
+  struct language_format_info la_decimal_format;
+
+  /* Base 16 (hexadecimal) formats */
+
+  struct language_format_info la_hex_format;
+
+  /* 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. */
+
+  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 */
+
+  long la_magic;
+
 };
 
 #define LANG_MAGIC     910823L
 
 /* Pointer to the language_defn for our current language.  This pointer
    always points to *some* valid struct; it can be used without checking
-   it for validity.  */
+   it for validity.
+
+   The current language affects expression parsing and evaluation
+   (FIXME: it might be cleaner to make the evaluation-related stuff
+   separate exp_opcodes for each different set of semantics.  We
+   should at least think this through more clearly with respect to
+   what happens if the language is changed between parsing and
+   evaluation) and printing of things like types and arrays.  It does
+   *not* affect symbol-reading-- each source file in a symbol-file has
+   its own language and we should keep track of that regardless of the
+   language when symbols are read.  If we want some manual setting for
+   the language of symbol files (e.g. detecting when ".c" files are
+   C++), it should be a seprate setting from the current_language.  */
 
 extern const struct language_defn *current_language;
 
@@ -158,7 +239,8 @@ extern enum language_mode
 
 /* "cast" really means conversion */
 /* FIXME -- should be a setting in language_defn */
-#define CAST_IS_CONVERSION (current_language->la_language == language_c)
+#define CAST_IS_CONVERSION (current_language->la_language == language_c  || \
+                           current_language->la_language == language_cplus)
 
 extern void
 language_info PARAMS ((int));
@@ -172,14 +254,18 @@ set_language PARAMS ((enum language));
    the current setting of working_lang, which the user sets
    with the "set language" command. */
 
-/* Returns some built-in types */
-#define        longest_int()           (*current_language->la_longest_int)
-#define        longest_unsigned_int()  (*current_language->la_longest_unsigned_int)
-#define        longest_float()         (*current_language->la_longest_float)
-
 #define create_fundamental_type(objfile,typeid) \
   (current_language->la_fund_type(objfile, typeid))
 
+#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, \
+                                 recurse,pretty))
+#define LA_VALUE_PRINT(val,stream,fmt,pretty) \
+  (current_language->la_value_print(val,stream,fmt,pretty))
+
 /* Return a format string for printf that will print a number in one of
    the local (language-specific) formats.  Result is static and is
    overwritten by the next call.  Takes printf options like "08" or "l"
@@ -221,9 +307,9 @@ set_language PARAMS ((enum language));
 #define local_hex_format_suffix() \
   (current_language->la_hex_format.la_format_suffix)
 
-#define local_printchar(ch, stream) \
+#define LA_PRINT_CHAR(ch, stream) \
   (current_language->la_printchar(ch, stream))
-#define local_printstr(stream, string, length, force_ellipses) \
+#define LA_PRINT_STRING(stream, string, length, force_ellipses) \
   (current_language->la_printstr(stream, string, length, force_ellipses))
 
 /* Test a character to decide whether it can be printed in literal form
@@ -240,6 +326,9 @@ set_language PARAMS ((enum language));
    overwritten by the next call.  Takes printf options like "08" or "l"
    (to produce e.g. %08x or %lx).  */
 
+extern char *
+local_decimal_format_custom PARAMS ((char *)); /* language.c */
+
 extern char *
 local_octal_format_custom PARAMS ((char *));   /* language.c */
 
@@ -251,16 +340,10 @@ local_hex_format_custom PARAMS ((char *));        /* language.c */
    the next call.  Takes printf options like "08" or "l".  */
 
 extern char *
-local_octal_string PARAMS ((int));             /* language.c */
+local_hex_string PARAMS ((unsigned long));             /* language.c */
 
 extern char *
-local_octal_string_custom PARAMS ((int, char *));/* language.c */
-
-extern char *
-local_hex_string PARAMS ((int));               /* language.c */
-
-extern char *
-local_hex_string_custom PARAMS ((int, char *));        /* language.c */
+local_hex_string_custom PARAMS ((unsigned long, char *)); /* language.c */
 
 /* Type predicates */
 
@@ -312,16 +395,23 @@ op_error PARAMS ((char *fmt, enum exp_opcode, int));
    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 *
This page took 0.028887 seconds and 4 git commands to generate.