]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/m2-lang.c
* config/sh/tm-sh.h (BELIEVE_PCC_PROMOTION): Define, so that
[thirdparty/binutils-gdb.git] / gdb / m2-lang.c
index 0b678fd9c3c19a92741c31b011fbd33bd580e253..f5f38a9d3ed66f0ca5bb6f61652609fa89aecba6 100644 (file)
@@ -15,7 +15,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.  */
 
 #include "defs.h"
 #include "symtab.h"
@@ -24,6 +24,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "parser-defs.h"
 #include "language.h"
 #include "m2-lang.h"
+#include "c-lang.h"
+
+static struct type *m2_create_fundamental_type PARAMS ((struct objfile *, int));
+static void m2_printstr PARAMS ((GDB_FILE *stream, char *string, unsigned int length, int width, int force_ellipses));
+static void m2_printchar PARAMS ((int, GDB_FILE *));
+static void m2_emit_char PARAMS ((int, GDB_FILE *, int));
 
 /* Print the character C on STREAM as part of the contents of a literal
    string whose delimiter is QUOTER.  Note that that format for printing
@@ -33,9 +39,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  */
 
 static void
-emit_char (c, stream, quoter)
+m2_emit_char (c, stream, quoter)
      register int c;
-     FILE *stream;
+     GDB_FILE *stream;
      int quoter;
 {
 
@@ -87,10 +93,10 @@ emit_char (c, stream, quoter)
 static void
 m2_printchar (c, stream)
      int c;
-     FILE *stream;
+     GDB_FILE *stream;
 {
   fputs_filtered ("'", stream);
-  emit_char (c, stream, '\'');
+  LA_EMIT_CHAR (c, stream, '\'');
   fputs_filtered ("'", stream);
 }
 
@@ -102,10 +108,11 @@ m2_printchar (c, stream)
    be replaced with a true Modula version. */
 
 static void
-m2_printstr (stream, string, length, force_ellipses)
-     FILE *stream;
+m2_printstr (stream, string, length, width, force_ellipses)
+     GDB_FILE *stream;
      char *string;
      unsigned int length;
+     int width;
      int force_ellipses;
 {
   register unsigned int i;
@@ -118,7 +125,7 @@ m2_printstr (stream, string, length, force_ellipses)
 
   if (length == 0)
     {
-      fputs_filtered ("\"\"", stdout);
+      fputs_filtered ("\"\"", gdb_stdout);
       return;
     }
 
@@ -172,7 +179,7 @@ m2_printstr (stream, string, length, force_ellipses)
                fputs_filtered ("\"", stream);
              in_quotes = 1;
            }
-         emit_char (string[i], stream, '"');
+         LA_EMIT_CHAR (string[i], stream, '"');
          ++things_printed;
        }
     }
@@ -236,7 +243,7 @@ m2_create_fundamental_type (objfile, typeid)
       case FT_SIGNED_CHAR:
        type = init_type (TYPE_CODE_INT,
                          TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                         TYPE_FLAG_SIGNED, "signed char", objfile);
+                         0, "signed char", objfile);
        break;
       case FT_UNSIGNED_CHAR:
        type = init_type (TYPE_CODE_INT,
@@ -251,7 +258,7 @@ m2_create_fundamental_type (objfile, typeid)
       case FT_SIGNED_SHORT:
        type = init_type (TYPE_CODE_INT,
                          TARGET_SHORT_BIT / TARGET_CHAR_BIT,
-                         TYPE_FLAG_SIGNED, "short", objfile);  /* FIXME-fnf */
+                         0, "short", objfile); /* FIXME-fnf */
        break;
       case FT_UNSIGNED_SHORT:
        type = init_type (TYPE_CODE_INT,
@@ -266,7 +273,7 @@ m2_create_fundamental_type (objfile, typeid)
       case FT_SIGNED_INTEGER:
        type = init_type (TYPE_CODE_INT,
                          TARGET_INT_BIT / TARGET_CHAR_BIT,
-                         TYPE_FLAG_SIGNED, "int", objfile); /* FIXME -fnf */
+                         0, "int", objfile); /* FIXME -fnf */
        break;
       case FT_UNSIGNED_INTEGER:
        type = init_type (TYPE_CODE_INT,
@@ -286,7 +293,7 @@ m2_create_fundamental_type (objfile, typeid)
       case FT_SIGNED_LONG:
        type = init_type (TYPE_CODE_INT,
                          TARGET_LONG_BIT / TARGET_CHAR_BIT,
-                         TYPE_FLAG_SIGNED, "long", objfile); /* FIXME -fnf */
+                         0, "long", objfile); /* FIXME -fnf */
        break;
       case FT_UNSIGNED_LONG:
        type = init_type (TYPE_CODE_INT,
@@ -301,7 +308,7 @@ m2_create_fundamental_type (objfile, typeid)
       case FT_SIGNED_LONG_LONG:
        type = init_type (TYPE_CODE_INT,
                          TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
-                         TYPE_FLAG_SIGNED, "signed long long", objfile);
+                         0, "signed long long", objfile);
        break;
       case FT_UNSIGNED_LONG_LONG:
        type = init_type (TYPE_CODE_INT,
@@ -329,19 +336,25 @@ m2_create_fundamental_type (objfile, typeid)
                          0, "long double", objfile);
        break;
       case FT_COMPLEX:
-       type = init_type (TYPE_CODE_FLT,
-                         TARGET_COMPLEX_BIT / TARGET_CHAR_BIT,
+       type = init_type (TYPE_CODE_COMPLEX,
+                         2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
                          0, "complex", objfile);
+       TYPE_TARGET_TYPE (type)
+         = m2_create_fundamental_type (objfile, FT_FLOAT);
        break;
       case FT_DBL_PREC_COMPLEX:
-       type = init_type (TYPE_CODE_FLT,
-                         TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
+       type = init_type (TYPE_CODE_COMPLEX,
+                         2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
                          0, "double complex", objfile);
+       TYPE_TARGET_TYPE (type)
+         = m2_create_fundamental_type (objfile, FT_DBL_PREC_FLOAT);
        break;
       case FT_EXT_PREC_COMPLEX:
-       type = init_type (TYPE_CODE_FLT,
-                         TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
+       type = init_type (TYPE_CODE_COMPLEX,
+                         2 * TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
                          0, "long double complex", objfile);
+       TYPE_TARGET_TYPE (type)
+         = m2_create_fundamental_type (objfile, FT_EXT_PREC_FLOAT);
        break;
       }
   return (type);
@@ -371,6 +384,15 @@ static const struct op_print m2_op_print_tab[] = {
     {"<",   BINOP_LESS, PREC_ORDER, 0},
     {"^",   UNOP_IND, PREC_PREFIX, 0},
     {"@",   BINOP_REPEAT, PREC_REPEAT, 0},
+    {"CAP", UNOP_CAP, PREC_BUILTIN_FUNCTION, 0},
+    {"CHR", UNOP_CHR, PREC_BUILTIN_FUNCTION, 0},
+    {"ORD", UNOP_ORD, PREC_BUILTIN_FUNCTION, 0},
+    {"FLOAT",UNOP_FLOAT, PREC_BUILTIN_FUNCTION, 0},
+    {"HIGH", UNOP_HIGH, PREC_BUILTIN_FUNCTION, 0},
+    {"MAX", UNOP_MAX, PREC_BUILTIN_FUNCTION, 0},
+    {"MIN", UNOP_MIN, PREC_BUILTIN_FUNCTION, 0},
+    {"ODD", UNOP_ODD, PREC_BUILTIN_FUNCTION, 0},
+    {"TRUNC", UNOP_TRUNC, PREC_BUILTIN_FUNCTION, 0},
     {NULL,  0, 0, 0}
 };
 \f
@@ -382,7 +404,7 @@ struct type *builtin_type_m2_card;
 struct type *builtin_type_m2_real;
 struct type *builtin_type_m2_bool;
 
-struct type ** const (m2_builtin_types[]) = 
+struct type ** CONST_PTR (m2_builtin_types[]) = 
 {
   &builtin_type_m2_char,
   &builtin_type_m2_int,
@@ -400,19 +422,22 @@ const struct language_defn m2_language_defn = {
   type_check_on,
   m2_parse,                    /* parser */
   m2_error,                    /* parser error function */
+  evaluate_subexp_standard,
   m2_printchar,                        /* Print character constant */
   m2_printstr,                 /* function to print string constant */
+  m2_emit_char,                        /* Function to print a single character */
   m2_create_fundamental_type,  /* Create fundamental type in this language */
   m2_print_type,               /* Print a type using appropriate syntax */
   m2_val_print,                        /* Print a value using appropriate syntax */
-  &builtin_type_m2_int,                /* longest signed   integral type */
-  &builtin_type_m2_card,       /* longest unsigned integral type */
-  &builtin_type_m2_real,       /* longest floating point type */
+  c_value_print,               /* Print a top-level value */
   {"",      "",   "",   ""},   /* Binary format info */
   {"%loB",   "",   "o",  "B"}, /* Octal format info */
   {"%ld",    "",   "d",  ""},  /* Decimal format info */
   {"0%lXH",  "0",  "X",  "H"}, /* Hex format info */
   m2_op_print_tab,             /* expression operators for printing */
+  0,                           /* arrays are first-class (not c-style) */
+  0,                           /* String lower bound */
+  &builtin_type_m2_char,       /* Type of string elements */ 
   LANG_MAGIC
 };
 
@@ -443,15 +468,5 @@ _initialize_m2_language ()
               TYPE_FLAG_UNSIGNED,
               "BOOLEAN", (struct objfile *) NULL);
 
-  TYPE_NFIELDS(builtin_type_m2_bool) = 2;
-  TYPE_FIELDS(builtin_type_m2_bool) = 
-     (struct field *) xmalloc (sizeof (struct field) * 2);
-  TYPE_FIELD_BITPOS(builtin_type_m2_bool,0) = 0;
-  TYPE_FIELD_NAME(builtin_type_m2_bool,0) = (char *)xmalloc(6);
-  strcpy(TYPE_FIELD_NAME(builtin_type_m2_bool,0),"FALSE");
-  TYPE_FIELD_BITPOS(builtin_type_m2_bool,1) = 1;
-  TYPE_FIELD_NAME(builtin_type_m2_bool,1) = (char *)xmalloc(5);
-  strcpy(TYPE_FIELD_NAME(builtin_type_m2_bool,1),"TRUE");
-
   add_language (&m2_language_defn);
 }