match.c (intrinsic_operators): Make static.
authorRoger Sayle <roger@eyesopen.com>
Mon, 20 Aug 2007 06:11:15 +0000 (06:11 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 20 Aug 2007 06:11:15 +0000 (06:11 +0000)
* match.c (intrinsic_operators): Make static.
(gfc_op2string): New function for converting a gfc_intrinsic_op to
to a "const char*", replacing the macro of the same name.
* gfortran.h (intrinsic_operators): Delete prototype.
(gfc_op2string): Replace macro with function prototype.

From-SVN: r127636

gcc/fortran/ChangeLog
gcc/fortran/gfortran.h
gcc/fortran/match.c

index ed17247..9866466 100644 (file)
@@ -1,3 +1,11 @@
+2007-08-19  Roger Sayle  <roger@eyesopen.com>
+
+       * match.c (intrinsic_operators): Make static.
+       (gfc_op2string): New function for converting a gfc_intrinsic_op to
+       to a "const char*", replacing the macro of the same name.
+       * gfortran.h (intrinsic_operators): Delete prototype.
+       (gfc_op2string): Replace macro with function prototype.
+
 2007-08-18  Tobias Burnus  <burnus@net-b.de>
 
        * gfortran.h (gfc_is_intrinsic_typename): Add declaration.
index 01b9d93..11d7adc 100644 (file)
@@ -209,10 +209,6 @@ typedef enum
 gfc_intrinsic_op;
 
 
-/* Strings for all intrinsic operators.  */
-extern mstring intrinsic_operators[];
-
-
 /* This macro is the number of intrinsic operators that exist.
    Assumptions are made about the numbering of the interface_op enums.  */
 #define GFC_INTRINSIC_OPS GFC_INTRINSIC_END
@@ -1962,10 +1958,7 @@ void gfc_clear_ts (gfc_typespec *);
 FILE *gfc_open_file (const char *);
 const char *gfc_basic_typename (bt);
 const char *gfc_typename (gfc_typespec *);
-
-#define gfc_op2string(OP) (OP == INTRINSIC_ASSIGN ? \
-                          "=" : gfc_code2string (intrinsic_operators, OP))
-
+const char *gfc_op2string (gfc_intrinsic_op);
 const char *gfc_code2string (const mstring *, int);
 int gfc_string2code (const mstring *, const char *);
 const char *gfc_intent_string (sym_intent);
index 5f56948..67fbd4f 100644 (file)
@@ -30,7 +30,7 @@ along with GCC; see the file COPYING3.  If not see
    unary operators /must/ precede the binary plus and minus, or
    the expression parser breaks.  */
 
-mstring intrinsic_operators[] = {
+static mstring intrinsic_operators[] = {
     minit ("+", INTRINSIC_UPLUS),
     minit ("-", INTRINSIC_UMINUS),
     minit ("+", INTRINSIC_PLUS),
@@ -60,6 +60,80 @@ mstring intrinsic_operators[] = {
     minit (NULL, INTRINSIC_NONE)
 };
 
+/* For debugging and diagnostic purposes.  Return the textual representation
+   of the intrinsic operator OP.  */
+const char *
+gfc_op2string (gfc_intrinsic_op op)
+{
+  switch (op)
+    {
+    case INTRINSIC_UPLUS:
+    case INTRINSIC_PLUS:
+      return "+";
+
+    case INTRINSIC_UMINUS:
+    case INTRINSIC_MINUS:
+      return "-";
+
+    case INTRINSIC_POWER:
+      return "**";
+    case INTRINSIC_CONCAT:
+      return "//";
+    case INTRINSIC_TIMES:
+      return "*";
+    case INTRINSIC_DIVIDE:
+      return "/";
+
+    case INTRINSIC_AND:
+      return ".and.";
+    case INTRINSIC_OR:
+      return ".or.";
+    case INTRINSIC_EQV:
+      return ".eqv.";
+    case INTRINSIC_NEQV:
+      return ".neqv.";
+
+    case INTRINSIC_EQ_OS:
+      return ".eq.";
+    case INTRINSIC_EQ:
+      return "==";
+    case INTRINSIC_NE_OS:
+      return ".ne.";
+    case INTRINSIC_NE:
+      return "/=";
+    case INTRINSIC_GE_OS:
+      return ".ge.";
+    case INTRINSIC_GE:
+      return ">=";
+    case INTRINSIC_LE_OS:
+      return ".le.";
+    case INTRINSIC_LE:
+      return "<=";
+    case INTRINSIC_LT_OS:
+      return ".lt.";
+    case INTRINSIC_LT:
+      return "<";
+    case INTRINSIC_GT_OS:
+      return ".gt.";
+    case INTRINSIC_GT:
+      return ">";
+    case INTRINSIC_NOT:
+      return ".not.";
+
+    case INTRINSIC_ASSIGN:
+      return "=";
+
+    case INTRINSIC_PARENTHESES:
+      return "parens";
+
+    default:
+      break;
+    }
+
+  gfc_internal_error ("gfc_op2string(): Bad code");
+  /* Not reached.  */
+}
+
 
 /******************** Generic matching subroutines ************************/