*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / m2-lang.c
index bac36324408df05a42aca94e782eaf009907ab8f..8bc0ce795230fdfc40c4674dddd5722d883f9c2f 100644 (file)
@@ -1,7 +1,7 @@
 /* Modula 2 language support routines for GDB, the GNU debugger.
 
    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2002, 2003, 2004,
-   2005, 2007 Free Software Foundation, Inc.
+   2005, 2007, 2008 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -29,7 +29,6 @@
 #include "valprint.h"
 
 extern void _initialize_m2_language (void);
-static struct type *m2_create_fundamental_type (struct objfile *, int);
 static void m2_printchar (int, struct ui_file *);
 static void m2_emit_char (int, struct ui_file *, int);
 
@@ -252,7 +251,7 @@ evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,
            arg1 = value_cast (type, arg1);
 
          type = check_typedef (value_type (arg1));
-         return value_ind (value_add (arg1, arg2));
+         return value_ind (value_ptradd (arg1, arg2));
        }
       else
        if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
@@ -274,175 +273,7 @@ evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,
     }
 
  nosideret:
-  return value_from_longest (builtin_type_long, (LONGEST) 1);
-}
-
-/* FIXME:  This is a copy of c_create_fundamental_type(), before
-   all the non-C types were stripped from it.  Needs to be fixed
-   by an experienced Modula programmer.  */
-
-static struct type *
-m2_create_fundamental_type (struct objfile *objfile, int typeid)
-{
-  struct type *type = NULL;
-
-  switch (typeid)
-    {
-    default:
-      /* FIXME:  For now, if we are asked to produce a type not in this
-         language, create the equivalent of a C integer type with the
-         name "<?type?>".  When all the dust settles from the type
-         reconstruction work, this should probably become an error.  */
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "<?type?>", objfile);
-      warning (_("internal error: no Modula fundamental type %d"), typeid);
-      break;
-    case FT_VOID:
-      type = init_type (TYPE_CODE_VOID,
-                       TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                       0, "void", objfile);
-      break;
-    case FT_BOOLEAN:
-      type = init_type (TYPE_CODE_BOOL,
-                       TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                       TYPE_FLAG_UNSIGNED, "boolean", objfile);
-      break;
-    case FT_STRING:
-      type = init_type (TYPE_CODE_STRING,
-                       TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                       0, "string", objfile);
-      break;
-    case FT_CHAR:
-      type = init_type (TYPE_CODE_INT,
-                       TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                       0, "char", objfile);
-      break;
-    case FT_SIGNED_CHAR:
-      type = init_type (TYPE_CODE_INT,
-                       TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                       0, "signed char", objfile);
-      break;
-    case FT_UNSIGNED_CHAR:
-      type = init_type (TYPE_CODE_INT,
-                       TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-                       TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
-      break;
-    case FT_SHORT:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "short", objfile);
-      break;
-    case FT_SIGNED_SHORT:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "short", objfile);   /* FIXME-fnf */
-      break;
-    case FT_UNSIGNED_SHORT:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_short_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
-      break;
-    case FT_INTEGER:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "int", objfile);
-      break;
-    case FT_SIGNED_INTEGER:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "int", objfile);     /* FIXME -fnf */
-      break;
-    case FT_UNSIGNED_INTEGER:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
-      break;
-    case FT_FIXED_DECIMAL:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "fixed decimal", objfile);
-      break;
-    case FT_LONG:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "long", objfile);
-      break;
-    case FT_SIGNED_LONG:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "long", objfile);    /* FIXME -fnf */
-      break;
-    case FT_UNSIGNED_LONG:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_long_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
-      break;
-    case FT_LONG_LONG:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_long_long_bit (current_gdbarch)
-                         / TARGET_CHAR_BIT,
-                       0, "long long", objfile);
-      break;
-    case FT_SIGNED_LONG_LONG:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_long_long_bit (current_gdbarch)
-                         / TARGET_CHAR_BIT,
-                       0, "signed long long", objfile);
-      break;
-    case FT_UNSIGNED_LONG_LONG:
-      type = init_type (TYPE_CODE_INT,
-                       gdbarch_long_long_bit (current_gdbarch)
-                         / TARGET_CHAR_BIT,
-                       TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
-      break;
-    case FT_FLOAT:
-      type = init_type (TYPE_CODE_FLT,
-                       gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "float", objfile);
-      break;
-    case FT_DBL_PREC_FLOAT:
-      type = init_type (TYPE_CODE_FLT,
-                       gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "double", objfile);
-      break;
-    case FT_FLOAT_DECIMAL:
-      type = init_type (TYPE_CODE_FLT,
-                       gdbarch_double_bit (current_gdbarch) / TARGET_CHAR_BIT,
-                       0, "floating decimal", objfile);
-      break;
-    case FT_EXT_PREC_FLOAT:
-      type = init_type (TYPE_CODE_FLT,
-                       gdbarch_long_double_bit (current_gdbarch)
-                         / TARGET_CHAR_BIT,
-                       0, "long double", objfile);
-      break;
-    case FT_COMPLEX:
-      type = init_type (TYPE_CODE_COMPLEX,
-                       2 * gdbarch_float_bit (current_gdbarch)
-                         / 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_COMPLEX,
-                       2 * gdbarch_double_bit (current_gdbarch)
-                         / 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_COMPLEX,
-                       2 * gdbarch_long_double_bit (current_gdbarch)
-                         / TARGET_CHAR_BIT,
-                       0, "long double complex", objfile);
-      TYPE_TARGET_TYPE (type)
-       = m2_create_fundamental_type (objfile, FT_EXT_PREC_FLOAT);
-      break;
-    }
-  return (type);
+  return value_from_longest (builtin_type_int8, (LONGEST) 1);
 }
 \f
 
@@ -514,6 +345,9 @@ m2_language_arch_info (struct gdbarch *gdbarch,
     = builtin->builtin_real;
   lai->primitive_type_vector [m2_primitive_type_bool]
     = builtin->builtin_bool;
+
+  lai->bool_type_symbol = "BOOLEAN";
+  lai->bool_type_default = builtin->builtin_bool;
 }
 
 const struct exp_descriptor exp_descriptor_modula2 = 
@@ -540,12 +374,11 @@ const struct language_defn m2_language_defn =
   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 */
   c_value_print,               /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
-  value_of_this,               /* value_of_this */
+  NULL,                                /* name_of_this */
   basic_lookup_symbol_nonlocal,        /* lookup_symbol_nonlocal */
   basic_lookup_transparent_type,/* lookup_transparent_type */
   NULL,                                /* Language specific symbol demangler */
@@ -554,6 +387,7 @@ const struct language_defn m2_language_defn =
   0,                           /* arrays are first-class (not c-style) */
   0,                           /* String lower bound */
   default_word_break_characters,
+  default_make_symbol_completion_list,
   m2_language_arch_info,
   default_print_array_index,
   default_pass_by_reference,
@@ -568,17 +402,17 @@ build_m2_types (struct gdbarch *gdbarch)
 
   /* Modula-2 "pervasive" types.  NOTE:  these can be redefined!!! */
   builtin_m2_type->builtin_int =
-    init_type (TYPE_CODE_INT, 
-              gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
+    init_type (TYPE_CODE_INT,
+              gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
               0, "INTEGER", (struct objfile *) NULL);
   builtin_m2_type->builtin_card =
     init_type (TYPE_CODE_INT, 
-              gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
+              gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
               TYPE_FLAG_UNSIGNED,
               "CARDINAL", (struct objfile *) NULL);
   builtin_m2_type->builtin_real =
     init_type (TYPE_CODE_FLT,
-              gdbarch_float_bit (current_gdbarch) / TARGET_CHAR_BIT,
+              gdbarch_float_bit (gdbarch) / TARGET_CHAR_BIT,
               0,
               "REAL", (struct objfile *) NULL);
   builtin_m2_type->builtin_char =
@@ -587,7 +421,7 @@ build_m2_types (struct gdbarch *gdbarch)
               "CHAR", (struct objfile *) NULL);
   builtin_m2_type->builtin_bool =
     init_type (TYPE_CODE_BOOL, 
-              gdbarch_int_bit (current_gdbarch) / TARGET_CHAR_BIT,
+              gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
               TYPE_FLAG_UNSIGNED,
               "BOOLEAN", (struct objfile *) NULL);
 
This page took 0.026751 seconds and 4 git commands to generate.