diff options
Diffstat (limited to 'gdb/ch-lang.c')
-rw-r--r-- | gdb/ch-lang.c | 243 |
1 files changed, 123 insertions, 120 deletions
diff --git a/gdb/ch-lang.c b/gdb/ch-lang.c index d151749..c3a3d90 100644 --- a/gdb/ch-lang.c +++ b/gdb/ch-lang.c @@ -1,21 +1,22 @@ /* Chill language support routines for GDB, the GNU debugger. Copyright 1992, 1995, 1996 Free Software Foundation, Inc. -This file is part of GDB. + This file is part of GDB. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "defs.h" #include "symtab.h" @@ -29,22 +30,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern void _initialize_chill_language PARAMS ((void)); static value_ptr -evaluate_subexp_chill PARAMS ((struct type *, struct expression *, int *, enum noside)); + evaluate_subexp_chill PARAMS ((struct type *, struct expression *, int *, enum noside)); static value_ptr -value_chill_max_min PARAMS ((enum exp_opcode, value_ptr)); + value_chill_max_min PARAMS ((enum exp_opcode, value_ptr)); static value_ptr -value_chill_card PARAMS ((value_ptr)); + value_chill_card PARAMS ((value_ptr)); static value_ptr - value_chill_length PARAMS ((value_ptr)); + value_chill_length PARAMS ((value_ptr)); static struct type * -chill_create_fundamental_type PARAMS ((struct objfile *, int)); + chill_create_fundamental_type PARAMS ((struct objfile *, int)); static void -chill_printstr PARAMS ((GDB_FILE *stream, char *string, unsigned int length, int width, int force_ellipses)); +chill_printstr PARAMS ((GDB_FILE * stream, char *string, unsigned int length, int width, int force_ellipses)); static void chill_printchar PARAMS ((int, GDB_FILE *)); @@ -110,7 +111,7 @@ chill_printchar (c, stream) an explicit null byte. So we always assume an implied null byte until gdb is able to maintain non-null terminated strings as well as null terminated strings (FIXME). - */ + */ static void chill_printstr (stream, string, length, width, force_ellipses) @@ -138,7 +139,7 @@ chill_printstr (stream, string, length, width, force_ellipses) for (i = 0; i < length && things_printed < print_max; ++i) { /* Position of the character we are examining - to see whether it is repeated. */ + to see whether it is repeated. */ unsigned int rep1; /* Number of repetitions we have detected so far. */ unsigned int reps; @@ -177,7 +178,7 @@ chill_printstr (stream, string, length, width, force_ellipses) } else { - if (! in_literal_form && ! in_control_form) + if (!in_literal_form && !in_control_form) fputs_filtered ("\"", stream); if (PRINT_LITERAL_FORM (c)) { @@ -239,90 +240,91 @@ chill_create_fundamental_type (objfile, typeid) 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, 2, 0, "<?type?>", objfile); - warning ("internal error: no chill fundamental type %d", typeid); - break; - case FT_VOID: - /* FIXME: Currently the GNU Chill compiler emits some DWARF entries for - typedefs, unrelated to anything directly in the code being compiled, - that have some FT_VOID types. Just fake it for now. */ - type = init_type (TYPE_CODE_VOID, 0, 0, "<?VOID?>", objfile); - break; - case FT_BOOLEAN: - type = init_type (TYPE_CODE_BOOL, 1, TYPE_FLAG_UNSIGNED, "BOOL", objfile); - break; - case FT_CHAR: - type = init_type (TYPE_CODE_CHAR, 1, TYPE_FLAG_UNSIGNED, "CHAR", objfile); - break; - case FT_SIGNED_CHAR: - type = init_type (TYPE_CODE_INT, 1, 0, "BYTE", objfile); - break; - case FT_UNSIGNED_CHAR: - type = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED, "UBYTE", objfile); - break; - case FT_SHORT: /* Chill ints are 2 bytes */ - type = init_type (TYPE_CODE_INT, 2, 0, "INT", objfile); - break; - case FT_UNSIGNED_SHORT: /* Chill ints are 2 bytes */ - type = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED, "UINT", objfile); - break; - case FT_INTEGER: /* FIXME? */ - case FT_SIGNED_INTEGER: /* FIXME? */ - case FT_LONG: /* Chill longs are 4 bytes */ - case FT_SIGNED_LONG: /* Chill longs are 4 bytes */ - type = init_type (TYPE_CODE_INT, 4, 0, "LONG", objfile); - break; - case FT_UNSIGNED_INTEGER: /* FIXME? */ - case FT_UNSIGNED_LONG: /* Chill longs are 4 bytes */ - type = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED, "ULONG", objfile); - break; - case FT_FLOAT: - type = init_type (TYPE_CODE_FLT, 4, 0, "REAL", objfile); - break; - case FT_DBL_PREC_FLOAT: - type = init_type (TYPE_CODE_FLT, 8, 0, "LONG_REAL", objfile); - break; - } + 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, 2, 0, "<?type?>", objfile); + warning ("internal error: no chill fundamental type %d", typeid); + break; + case FT_VOID: + /* FIXME: Currently the GNU Chill compiler emits some DWARF entries for + typedefs, unrelated to anything directly in the code being compiled, + that have some FT_VOID types. Just fake it for now. */ + type = init_type (TYPE_CODE_VOID, 0, 0, "<?VOID?>", objfile); + break; + case FT_BOOLEAN: + type = init_type (TYPE_CODE_BOOL, 1, TYPE_FLAG_UNSIGNED, "BOOL", objfile); + break; + case FT_CHAR: + type = init_type (TYPE_CODE_CHAR, 1, TYPE_FLAG_UNSIGNED, "CHAR", objfile); + break; + case FT_SIGNED_CHAR: + type = init_type (TYPE_CODE_INT, 1, 0, "BYTE", objfile); + break; + case FT_UNSIGNED_CHAR: + type = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED, "UBYTE", objfile); + break; + case FT_SHORT: /* Chill ints are 2 bytes */ + type = init_type (TYPE_CODE_INT, 2, 0, "INT", objfile); + break; + case FT_UNSIGNED_SHORT: /* Chill ints are 2 bytes */ + type = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED, "UINT", objfile); + break; + case FT_INTEGER: /* FIXME? */ + case FT_SIGNED_INTEGER: /* FIXME? */ + case FT_LONG: /* Chill longs are 4 bytes */ + case FT_SIGNED_LONG: /* Chill longs are 4 bytes */ + type = init_type (TYPE_CODE_INT, 4, 0, "LONG", objfile); + break; + case FT_UNSIGNED_INTEGER: /* FIXME? */ + case FT_UNSIGNED_LONG: /* Chill longs are 4 bytes */ + type = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED, "ULONG", objfile); + break; + case FT_FLOAT: + type = init_type (TYPE_CODE_FLT, 4, 0, "REAL", objfile); + break; + case FT_DBL_PREC_FLOAT: + type = init_type (TYPE_CODE_FLT, 8, 0, "LONG_REAL", objfile); + break; + } return (type); } - + /* Table of operators and their precedences for printing expressions. */ -static const struct op_print chill_op_print_tab[] = { - {"AND", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0}, - {"OR", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0}, - {"NOT", UNOP_LOGICAL_NOT, PREC_PREFIX, 0}, - {"MOD", BINOP_MOD, PREC_MUL, 0}, - {"REM", BINOP_REM, PREC_MUL, 0}, - {"SIZE",UNOP_SIZEOF, PREC_BUILTIN_FUNCTION, 0}, - {"LOWER",UNOP_LOWER, PREC_BUILTIN_FUNCTION, 0}, - {"UPPER",UNOP_UPPER, PREC_BUILTIN_FUNCTION, 0}, - {"CARD",UNOP_CARD, PREC_BUILTIN_FUNCTION, 0}, - {"MAX",UNOP_CHMAX, PREC_BUILTIN_FUNCTION, 0}, - {"MIN",UNOP_CHMIN, PREC_BUILTIN_FUNCTION, 0}, - {":=", BINOP_ASSIGN, PREC_ASSIGN, 1}, - {"=", BINOP_EQUAL, PREC_EQUAL, 0}, - {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0}, - {"<=", BINOP_LEQ, PREC_ORDER, 0}, - {">=", BINOP_GEQ, PREC_ORDER, 0}, - {">", BINOP_GTR, PREC_ORDER, 0}, - {"<", BINOP_LESS, PREC_ORDER, 0}, - {"+", BINOP_ADD, PREC_ADD, 0}, - {"-", BINOP_SUB, PREC_ADD, 0}, - {"*", BINOP_MUL, PREC_MUL, 0}, - {"/", BINOP_DIV, PREC_MUL, 0}, - {"//", BINOP_CONCAT, PREC_PREFIX, 0}, /* FIXME: precedence? */ - {"-", UNOP_NEG, PREC_PREFIX, 0}, - {"->", UNOP_IND, PREC_SUFFIX, 1}, - {"->", UNOP_ADDR, PREC_PREFIX, 0}, - {":", BINOP_RANGE, PREC_ASSIGN, 0}, - {NULL, 0, 0, 0} +static const struct op_print chill_op_print_tab[] = +{ + {"AND", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0}, + {"OR", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0}, + {"NOT", UNOP_LOGICAL_NOT, PREC_PREFIX, 0}, + {"MOD", BINOP_MOD, PREC_MUL, 0}, + {"REM", BINOP_REM, PREC_MUL, 0}, + {"SIZE", UNOP_SIZEOF, PREC_BUILTIN_FUNCTION, 0}, + {"LOWER", UNOP_LOWER, PREC_BUILTIN_FUNCTION, 0}, + {"UPPER", UNOP_UPPER, PREC_BUILTIN_FUNCTION, 0}, + {"CARD", UNOP_CARD, PREC_BUILTIN_FUNCTION, 0}, + {"MAX", UNOP_CHMAX, PREC_BUILTIN_FUNCTION, 0}, + {"MIN", UNOP_CHMIN, PREC_BUILTIN_FUNCTION, 0}, + {":=", BINOP_ASSIGN, PREC_ASSIGN, 1}, + {"=", BINOP_EQUAL, PREC_EQUAL, 0}, + {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0}, + {"<=", BINOP_LEQ, PREC_ORDER, 0}, + {">=", BINOP_GEQ, PREC_ORDER, 0}, + {">", BINOP_GTR, PREC_ORDER, 0}, + {"<", BINOP_LESS, PREC_ORDER, 0}, + {"+", BINOP_ADD, PREC_ADD, 0}, + {"-", BINOP_SUB, PREC_ADD, 0}, + {"*", BINOP_MUL, PREC_MUL, 0}, + {"/", BINOP_DIV, PREC_MUL, 0}, + {"//", BINOP_CONCAT, PREC_PREFIX, 0}, /* FIXME: precedence? */ + {"-", UNOP_NEG, PREC_PREFIX, 0}, + {"->", UNOP_IND, PREC_SUFFIX, 1}, + {"->", UNOP_ADDR, PREC_PREFIX, 0}, + {":", BINOP_RANGE, PREC_ASSIGN, 0}, + {NULL, 0, 0, 0} }; /* The built-in types of Chill. */ @@ -333,14 +335,14 @@ struct type *builtin_type_chill_long; struct type *builtin_type_chill_ulong; struct type *builtin_type_chill_real; -struct type ** CONST_PTR (chill_builtin_types[]) = +struct type **CONST_PTR (chill_builtin_types[]) = { &builtin_type_chill_bool, - &builtin_type_chill_char, - &builtin_type_chill_long, - &builtin_type_chill_ulong, - &builtin_type_chill_real, - 0 + &builtin_type_chill_char, + &builtin_type_chill_long, + &builtin_type_chill_ulong, + &builtin_type_chill_real, + 0 }; /* Calculate LOWER or UPPER of TYPE. @@ -349,7 +351,7 @@ struct type ** CONST_PTR (chill_builtin_types[]) = LONGEST type_lower_upper (op, type, result_type) - enum exp_opcode op; /* Either UNOP_LOWER or UNOP_UPPER */ + enum exp_opcode op; /* Either UNOP_LOWER or UNOP_UPPER */ struct type *type; struct type **result_type; { @@ -366,7 +368,7 @@ type_lower_upper (op, type, result_type) case TYPE_CODE_ARRAY: case TYPE_CODE_BITSTRING: case TYPE_CODE_STRING: - type = TYPE_FIELD_TYPE (type, 0); /* Get index type */ + type = TYPE_FIELD_TYPE (type, 0); /* Get index type */ /* ... fall through ... */ case TYPE_CODE_RANGE: @@ -505,8 +507,8 @@ value_chill_max_min (op, val) error ("bad argument to %s builtin", op == UNOP_CHMAX ? "MAX" : "MIN"); return value_from_longest (TYPE_CODE (elttype) == TYPE_CODE_RANGE - ? TYPE_TARGET_TYPE (elttype) - : elttype, + ? TYPE_TARGET_TYPE (elttype) + : elttype, tmp); } @@ -560,12 +562,12 @@ evaluate_subexp_chill (expect_type, exp, pos, noside) for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++) { argvec[tem] - = evaluate_subexp_chill (TYPE_FIELD_TYPE (type, tem-1), + = evaluate_subexp_chill (TYPE_FIELD_TYPE (type, tem - 1), exp, pos, noside); } for (; tem <= nargs; tem++) argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside); - argvec[tem] = 0; /* signal end of arglist */ + argvec[tem] = 0; /* signal end of arglist */ return call_function_by_hand (argvec[0], nargs, argvec + 1); default: @@ -616,11 +618,12 @@ evaluate_subexp_chill (expect_type, exp, pos, noside) } return evaluate_subexp_standard (expect_type, exp, pos, noside); - nosideret: +nosideret: return value_from_longest (builtin_type_long, (LONGEST) 1); } -const struct language_defn chill_language_defn = { +const struct language_defn chill_language_defn = +{ "chill", language_chill, chill_builtin_types, @@ -632,18 +635,18 @@ const struct language_defn chill_language_defn = { chill_printchar, /* print a character constant */ chill_printstr, /* function to print a string constant */ NULL, /* Function to print a single char */ - chill_create_fundamental_type,/* Create fundamental type in this language */ + chill_create_fundamental_type, /* Create fundamental type in this language */ chill_print_type, /* Print a type using appropriate syntax */ chill_val_print, /* Print a value using appropriate syntax */ chill_value_print, /* Print a top-levl value */ - {"", "B'", "", ""}, /* Binary format info */ - {"O'%lo", "O'", "o", ""}, /* Octal format info */ - {"D'%ld", "D'", "d", ""}, /* Decimal format info */ - {"H'%lx", "H'", "x", ""}, /* Hex format info */ + {"", "B'", "", ""}, /* Binary format info */ + {"O'%lo", "O'", "o", ""}, /* Octal format info */ + {"D'%ld", "D'", "d", ""}, /* Decimal format info */ + {"H'%lx", "H'", "x", ""}, /* Hex format info */ chill_op_print_tab, /* expression operators for printing */ 0, /* arrays are first-class (not c-style) */ 0, /* String lower bound */ - &builtin_type_chill_char, /* Type of string elements */ + &builtin_type_chill_char, /* Type of string elements */ LANG_MAGIC }; |