X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fm2-lang.c;h=f5f38a9d3ed66f0ca5bb6f61652609fa89aecba6;hb=b3d32d4f8f2637d2ae041d90b2e01fc841423747;hp=fdc3386ba9f798d1520712e5fd6b664db8ad041a;hpb=c4413e2c9b9e257a93b4370c5e4e976c768b9e9a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index fdc3386ba9..f5f38a9d3e 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -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} }; @@ -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 */ - {"%oB", "", "o", "B"}, /* Octal format info */ - {"%d", "", "d", ""}, /* Decimal format info */ - {"0%XH", "0", "X", "H"}, /* Hex 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); }