Mon Mar 2 17:44:13 1998 Michael Snyder (msnyder@cleaver.cygnus.com)
[deliverable/binutils-gdb.git] / gdb / language.h
index e197aaa14a0fedfec9ebe7a179351569d3d086d4..941943b743357d2774b725b3bfe22f3a881aa40d 100644 (file)
@@ -17,7 +17,7 @@ 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
@@ -25,6 +25,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #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
 
@@ -34,6 +35,9 @@ struct objfile;
 #define        _LANG_c
 #define        _LANG_m2
 #define        _LANG_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.
@@ -106,7 +110,10 @@ struct language_defn
 
   enum language la_language;
 
-  /* Its builtin types */
+  /* 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;
 
@@ -126,6 +133,10 @@ struct language_defn
 
   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));
@@ -141,17 +152,10 @@ struct language_defn
   int (*la_val_print) PARAMS ((struct type *, char *,  CORE_ADDR, GDB_FILE *,
                               int, int, int, enum val_prettyprint));
 
-  /* Longest signed integral type */
-
-  struct type **la_longest_int;
-
-  /* Longest unsigned integral type */
+  /* Print a top-level value using syntax appropriate for this language. */
 
-  struct type **la_longest_unsigned_int;
-
-  /* Longest floating point type */
-
-  struct type **la_longest_float;
+  int (*la_value_print) PARAMS ((struct value *, GDB_FILE *,
+                                int, enum val_prettyprint));
 
   /* Base 2 (binary) formats. */
 
@@ -169,11 +173,21 @@ struct language_defn
 
   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 */
 
@@ -240,11 +254,6 @@ 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))
 
@@ -254,6 +263,8 @@ set_language PARAMS ((enum language));
 #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
@@ -384,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.023987 seconds and 4 git commands to generate.