* expression.h (exp_opcode): Add BINOP_MOD.
authorFred Fish <fnf@specifix.com>
Tue, 5 Jan 1993 01:18:07 +0000 (01:18 +0000)
committerFred Fish <fnf@specifix.com>
Tue, 5 Jan 1993 01:18:07 +0000 (01:18 +0000)
* eval.c (evaluate_subexp):  Handle new BINOP_MOD.
* expprint.c (dump_expression):  Handle new BINOP_MOD.
* language.c (binop_type_check):  Handle new BINOP_MOD.
* main.c (float_handler):  Re-enable float handler when hit.
* valarith.c (language.h):  Include, need current_language.
* valarith.c (TRUNCATION_TOWARDS_ZERO):  Define default macro
for integer divide truncates towards zero for negative results.
* valarith.c (value_x_binop):  Handle BINOP_MOD if seen.
* valarith.c (value_binop):  Allow arithmetic operations on
TYPE_CODE_CHAR variables.  Add case to handle new BINOP_MOD.
**** start-sanitize-chill ****
* ch-exp.y (operand_4):  Add useful actions for MOD and REM.
* ch-exp.y (tokentab3):  Add MOD and REM.
* ch-exp.y (yylex):  Set innermost_block for symbols found
in local scopes.  Return LOCATION_NAME for local symbols.
* ch-lang.c (chill_op_print_tab):  Fix MOD entry to use
BINOP_MOD instead of BINOP_REM.  Add REM entry, using BINOP_REM.
**** end-sanitize-chill ****

gdb/ChangeLog
gdb/ch-exp.y
gdb/ch-lang.c
gdb/eval.c
gdb/expprint.c
gdb/expression.h
gdb/language.c
gdb/main.c

index 2ca09d49a60cf4786498ed0691f03461f52afc31..d468d4f0a67b0942b273733a756df6fe1742e26f 100644 (file)
@@ -1,3 +1,25 @@
+Mon Jan  4 16:54:18 1993  Fred Fish  (fnf@cygnus.com)
+
+       * expression.h (exp_opcode):  Add BINOP_MOD.
+       * eval.c (evaluate_subexp):  Handle new BINOP_MOD.
+       * expprint.c (dump_expression):  Handle new BINOP_MOD.
+       * language.c (binop_type_check):  Handle new BINOP_MOD.
+       * main.c (float_handler):  Re-enable float handler when hit.
+       * valarith.c (language.h):  Include, need current_language.
+       * valarith.c (TRUNCATION_TOWARDS_ZERO):  Define default macro
+       for integer divide truncates towards zero for negative results.
+       * valarith.c (value_x_binop):  Handle BINOP_MOD if seen.
+       * valarith.c (value_binop):  Allow arithmetic operations on
+       TYPE_CODE_CHAR variables.  Add case to handle new BINOP_MOD.
+       **** start-sanitize-chill ****
+       * ch-exp.y (operand_4):  Add useful actions for MOD and REM.
+       * ch-exp.y (tokentab3):  Add MOD and REM.
+       * ch-exp.y (yylex):  Set innermost_block for symbols found
+       in local scopes.  Return LOCATION_NAME for local symbols.
+       * ch-lang.c (chill_op_print_tab):  Fix MOD entry to use
+       BINOP_MOD instead of BINOP_REM.  Add REM entry, using BINOP_REM.
+       **** end-sanitize-chill ****
+
 Sun Jan  3 14:24:56 1993  Steve Chamberlain  (sac@thepub.cygnus.com)
 
        * remote-sim.c: first attempt at general simulator interface
index 6d6ebe7346441ed01ebdbee4947ee711c4b9a7f3..38211d2f319185ad15f7f286ae0362f24358f4de 100644 (file)
@@ -757,11 +757,11 @@ operand_4 :       operand_5
                        }
                |       operand_4 MOD operand_5
                        {
-                         $$ = 0;       /* FIXME */
+                         write_exp_elt_opcode (BINOP_MOD);
                        }
                |       operand_4 REM operand_5
                        {
-                         $$ = 0;       /* FIXME */
+                         write_exp_elt_opcode (BINOP_REM);
                        }
                ;
 
@@ -1390,6 +1390,8 @@ static const struct token tokentab4[] =
 
 static const struct token tokentab3[] =
 {
+    { "MOD", MOD },
+    { "REM", REM },
     { "NOT", NOT },
     { "XOR", LOGXOR },
     { "AND", LOGAND }
@@ -1564,17 +1566,27 @@ yylex ()
              case LOC_STATIC:
                /* Found a global or local static variable. */
                return (LOCATION_NAME);
-             case LOC_UNDEF:
-             case LOC_CONST:
              case LOC_REGISTER:
              case LOC_ARG:
              case LOC_REF_ARG:
              case LOC_REGPARM:
              case LOC_LOCAL:
-             case LOC_TYPEDEF:
+             case LOC_LOCAL_ARG:
+               if (innermost_block == NULL
+                   || contained_in (block_found, innermost_block))
+                 {
+                   innermost_block = block_found;
+                 }
+               return (LOCATION_NAME);
+               break;
+             case LOC_CONST:
              case LOC_LABEL:
+               return (LOCATION_NAME);
+               break;
+             case LOC_UNDEF:
+             case LOC_TYPEDEF:
              case LOC_CONST_BYTES:
-             case LOC_LOCAL_ARG:
+               error ("Symbol \"%s\" names no location.", simplename);
                break;
              }
          }
index e42dc1b4493ec62a9b3c6726d17f8a879b7ede3e..d02d330b6de9f8a2aae5c0649c65d5d90ba35574 100644 (file)
@@ -246,7 +246,8 @@ 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_REM, PREC_MUL, 0},
+    {"MOD", BINOP_MOD, PREC_MUL, 0},
+    {"REM", BINOP_REM, PREC_MUL, 0},
     {":=",  BINOP_ASSIGN, PREC_ASSIGN, 1},
     {"=",   BINOP_EQUAL, PREC_EQUAL, 0},
     {"/=",  BINOP_NOTEQUAL, PREC_EQUAL, 0},
index fef404a15214b04e8cdc03c1fb7c945dea328b0c..971ad9a32d4abcbe2deb45adad11bd22a2cd2da6 100644 (file)
@@ -543,6 +543,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
     case BINOP_MUL:
     case BINOP_DIV:
     case BINOP_REM:
+    case BINOP_MOD:
     case BINOP_LSH:
     case BINOP_RSH:
     case BINOP_BITWISE_AND:
@@ -556,7 +557,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
        return value_x_binop (arg1, arg2, op, OP_NULL);
       else
        if (noside == EVAL_AVOID_SIDE_EFFECTS
-           && (op == BINOP_DIV || op == BINOP_REM))
+           && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
          return value_zero (VALUE_TYPE (arg1), not_lval);
       else
        return value_binop (arg1, arg2, op);
index 5a6986e992a28a0f3d28fdfc8d5b4fc34cfe000c..44b31e765f8636145ecbc7feae61791fa33186e5 100644 (file)
@@ -447,6 +447,7 @@ dump_expression (exp, stream, note)
          case BINOP_MUL: opcode_name = "BINOP_MUL"; break;
          case BINOP_DIV: opcode_name = "BINOP_DIV"; break;
          case BINOP_REM: opcode_name = "BINOP_REM"; break;
+         case BINOP_MOD: opcode_name = "BINOP_MOD"; break;
          case BINOP_LSH: opcode_name = "BINOP_LSH"; break;
          case BINOP_RSH: opcode_name = "BINOP_RSH"; break;
          case BINOP_LOGICAL_AND: opcode_name = "BINOP_LOGICAL_AND"; break;
index 8a6cf4b1eb8fac979d86efa72b180a59ab1a071d..8c34642a35ad67af7215ab2181092be0c28bd556 100644 (file)
@@ -52,6 +52,7 @@ enum exp_opcode
   BINOP_MUL,           /* * */
   BINOP_DIV,           /* / */
   BINOP_REM,           /* % */
+  BINOP_MOD,           /* mod (Knuth 1.2.4) */
   BINOP_LSH,           /* << */
   BINOP_RSH,           /* >> */
   BINOP_LOGICAL_AND,   /* && */
index 445e816a0d8d221b9afcac6043be98eb4278fd89..44aea1e7000d85f512ad0dcfea73bbda528fbd0c 100644 (file)
@@ -842,6 +842,7 @@ binop_type_check(arg1,arg2,op)
       break;
 
    case BINOP_REM:
+   case BINOP_MOD:
       if (!integral_type(t1) || !integral_type(t2))
         type_op_error ("Arguments to %s must be of integral type.",op);
       break;
index c937921ac8a315dfeedab3c30f83f9d27b7c77d1..284acc3e7303a4c406edecc7ef37d4fbb208f587 100644 (file)
@@ -2247,6 +2247,7 @@ int signo;
 {
   /* This message is based on ANSI C, section 4.7.  Note that integer
      divide by zero causes this, so "float" is a misnomer.  */
+  signal (SIGFPE, float_handler);
   error ("Erroneous arithmetic operation.");
 }