OSDN Git Service

* Makefile.in: Add html support.
[pf3gnuchains/gcc-fork.git] / gcc / java / parse.h
index 0234108..eb749a5 100644 (file)
@@ -1,5 +1,5 @@
 /* Language parser definitions for the GNU compiler for the Java(TM) language.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
    Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
 
@@ -89,6 +89,23 @@ extern tree stabilize_reference (tree);
 #define MODIFIER_WFL(M)   (ctxp->modifier_ctx [(M) - PUBLIC_TK])
 
 /* Check on modifiers */
+#ifdef USE_MAPPED_LOCATION
+#define THIS_MODIFIER_ONLY(f, m, v, count, l)                          \
+  if ((f) & (m))                                                       \
+    {                                                                  \
+      tree node = MODIFIER_WFL (v);                                    \
+      if (!l)                                                          \
+        l = node;                                                      \
+      else                                                             \
+       {                                                               \
+         expanded_location lloc = expand_location (EXPR_LOCATION (l)); \
+         expanded_location nloc = expand_location (EXPR_LOCATION (node)); \
+         if (nloc.column > lloc.column || nloc.line > lloc.line)       \
+           l = node;                                                   \
+       }                                                               \
+      count++;                                                         \
+    }
+#else
 #define THIS_MODIFIER_ONLY(f, m, v, count, l)                          \
   if ((f) & (m))                                                       \
     {                                                                  \
@@ -101,6 +118,7 @@ extern tree stabilize_reference (tree);
         l = node;                                                      \
       count++;                                                         \
     }
+#endif
 
 #define ABSTRACT_CHECK(FLAG, V, CL, S)                         \
   if ((FLAG) & (V))                                            \
@@ -140,21 +158,21 @@ extern tree stabilize_reference (tree);
   {                                                                          \
     if (flag_redundant && (cl) && ((flags) & (__modifier)))                 \
       parse_warning_context (cl,                                             \
-     "Discouraged redundant use of `%s' modifier in declaration of %s",      \
+     "Discouraged redundant use of %qs modifier in declaration of %s",      \
                             java_accstring_lookup (__modifier), arg);       \
   }
 #define OBSOLETE_MODIFIER_WARNING2(cl, flags, __modifier, arg1, arg2)        \
   {                                                                          \
     if (flag_redundant && (cl) && ((flags) & (__modifier)))                 \
       parse_warning_context (cl,                                             \
-     "Discouraged redundant use of `%s' modifier in declaration of %s `%s'", \
+     "Discouraged redundant use of %qs modifier in declaration of %s %qs", \
                             java_accstring_lookup (__modifier), arg1, arg2);\
   }
 
 /* Quickly build a temporary pointer on hypothetical type NAME. */
 #define BUILD_PTR_FROM_NAME(ptr, name)         \
   do {                                         \
-    ptr = build (POINTER_TYPE, NULL_TREE);     \
+    ptr = make_node (POINTER_TYPE);            \
     TYPE_NAME (ptr) = name;                    \
   } while (0)
 
@@ -163,11 +181,13 @@ extern tree stabilize_reference (tree);
    && !TREE_TYPE (NODE)                                \
    && TREE_CODE (TYPE_NAME (NODE)) == IDENTIFIER_NODE)
 
+#ifndef USE_MAPPED_LOCATION
 /* Set the EMIT_LINE_NOTE flag of a EXPR_WLF to 1 if debug information
    are requested. Works in the context of a parser rule. */
 #define JAVA_MAYBE_GENERATE_DEBUG_INFO(node)           \
-  (debug_info_level != DINFO_LEVEL_NONE ?              \
-    EXPR_WFL_EMIT_LINE_NOTE (node) = 1, node : node)
+  do {if (debug_info_level != DINFO_LEVEL_NONE)        \
+      EXPR_WFL_EMIT_LINE_NOTE (node) = 1; } while (0)
+#endif
 
 /* Types classification, according to the JLS, section 4.2 */
 #define JFLOAT_TYPE_P(TYPE)      (TYPE && TREE_CODE ((TYPE)) == REAL_TYPE)
@@ -329,12 +349,12 @@ enum {
 /* Standard error messages */
 #define ERROR_CANT_CONVERT_TO_BOOLEAN(OPERATOR, NODE, TYPE)            \
   parse_error_context ((OPERATOR),                                     \
-    "Incompatible type for `%s'. Can't convert `%s' to boolean",       \
+    "Incompatible type for %qs. Can't convert %qs to boolean", \
     operator_string ((NODE)), lang_printable_name ((TYPE),0))
 
 #define ERROR_CANT_CONVERT_TO_NUMERIC(OPERATOR, NODE, TYPE)            \
   parse_error_context ((OPERATOR),                                     \
-      "Incompatible type for `%s'. Can't convert `%s' to numeric type",        \
+      "Incompatible type for %qs. Can't convert %qs to numeric type",  \
       operator_string ((NODE)), lang_printable_name ((TYPE), 0))
 
 #define ERROR_CAST_NEEDED_TO_INTEGRAL(OPERATOR, NODE, TYPE)            \
@@ -342,19 +362,19 @@ do {                                                                      \
   tree _operator = (OPERATOR), _node = (NODE), _type = (TYPE);         \
   if (JPRIMITIVE_TYPE_P (_type))                                       \
     parse_error_context (_operator,                                    \
-"Incompatible type for `%s'. Explicit cast needed to convert `%s' to integral",\
+"Incompatible type for %qs. Explicit cast needed to convert %qs to integral",\
                         operator_string(_node),                        \
                         lang_printable_name (_type, 0));               \
   else                                                                 \
     parse_error_context (_operator,                                    \
-      "Incompatible type for `%s'. Can't convert `%s' to integral",    \
+      "Incompatible type for %qs. Can't convert %qs to integral",      \
                         operator_string(_node),                        \
                         lang_printable_name (_type, 0));               \
 } while (0)
 
 #define ERROR_VARIABLE_NOT_INITIALIZED(WFL, V)                 \
   parse_error_context                                          \
-    ((WFL), "Variable `%s' may not have been initialized",     \
+    ((WFL), "Variable %qs may not have been initialized",      \
      IDENTIFIER_POINTER (V))
 
 /* Definition for loop handling. This is Java's own definition of a
@@ -479,7 +499,7 @@ enum jdep_code {
 typedef struct _jdep {
   ENUM_BITFIELD(jdep_code) kind : 8; /* Type of patch */
 
-  int  flag0 : 1;              /* Some flags */
+  unsigned int  flag0 : 1;     /* Some flags */
   tree decl;                   /* Tied decl/or WFL */
   tree solv;                   /* What to solve */
   tree wfl;                    /* Where thing to resolve where found */
@@ -610,22 +630,16 @@ typedef struct jdeplist_s jdeplist;
 #define GET_CURRENT_BLOCK(F) ((F) ? DECL_FUNCTION_BODY ((F)) : \
                             current_static_block)
 
+#ifndef USE_MAPPED_LOCATION
 /* Retrieve line/column from a WFL. */
 #define EXPR_WFL_GET_LINECOL(V,LINE,COL)       \
   {                                            \
      (LINE) = (V) >> 12;                       \
      (COL) = (V) & 0xfff;                      \
    }
-/* Add X to the column number information */
-#define EXPR_WFL_ADD_COL(V, X)                                 \
-  (V) = (((V) & 0xfffff000) | ((((V) & 0xfff) + (X)) & 0xfff))
-
-/* Build a WFL for expression nodes */
-#define BUILD_EXPR_WFL(NODE, WFL)                                      \
-  build_expr_wfl ((NODE), input_filename, EXPR_WFL_LINENO ((WFL)),     \
-                 EXPR_WFL_COLNO ((WFL)))
+#endif
 
-#define EXPR_WFL_QUALIFICATION(WFL) TREE_OPERAND ((WFL), 2)
+#define EXPR_WFL_QUALIFICATION(WFL) TREE_OPERAND ((WFL), 1)
 #define QUAL_WFL(NODE) TREE_PURPOSE (NODE)
 #define QUAL_RESOLUTION(NODE) TREE_VALUE (NODE)
 #define QUAL_DECL_TYPE(NODE) GET_SKIP_TYPE (NODE)
@@ -664,17 +678,24 @@ typedef struct jdeplist_s jdeplist;
 #define BUILD_THROW(WHERE, WHAT)                               \
   {                                                            \
     (WHERE) =                                                  \
-      build (CALL_EXPR, void_type_node,                                \
-            build_address_of (throw_node),                     \
-            build_tree_list (NULL_TREE, (WHAT)), NULL_TREE);   \
+      build3 (CALL_EXPR, void_type_node,                       \
+             build_address_of (throw_node),                    \
+             build_tree_list (NULL_TREE, (WHAT)), NULL_TREE);  \
     TREE_SIDE_EFFECTS ((WHERE)) = 1;                           \
   }
 
 /* Set wfl_operator for the most accurate error location */
+#ifdef USE_MAPPED_LOCATION
+#define SET_WFL_OPERATOR(WHICH, NODE, WFL)             \
+  SET_EXPR_LOCATION (WHICH,                            \
+    (TREE_CODE (WFL) == EXPR_WITH_FILE_LOCATION ?      \
+     EXPR_LOCATION (WFL) : EXPR_LOCATION (NODE)))
+#else
 #define SET_WFL_OPERATOR(WHICH, NODE, WFL)             \
   EXPR_WFL_LINECOL (WHICH) =                           \
     (TREE_CODE (WFL) == EXPR_WITH_FILE_LOCATION ?      \
      EXPR_WFL_LINECOL (WFL) : EXPR_WFL_LINECOL (NODE))
+#endif
 
 #define PATCH_METHOD_RETURN_ERROR()            \
   {                                            \
@@ -724,23 +745,23 @@ typedef struct jdeplist_s jdeplist;
      
 /* Parser context data structure. */
 struct parser_ctxt GTY(()) {
-
-  const char *filename;                    /* Current filename */
+  const char *filename;                     /* Current filename */
+  location_t file_start_location;
+  location_t save_location;
   struct parser_ctxt *next;
 
-  java_lexer * GTY((skip (""))) lexer; /* Current lexer state */
+  java_lexer * GTY((skip)) lexer; /* Current lexer state */
   char marker_begining;                     /* Marker. Should be a sub-struct */
-  struct java_line * GTY ((skip (""))) p_line; /* Previous line */
-  struct java_line * GTY ((skip (""))) c_line; /* Current line */
-  java_lc elc;                      /* Error's line column info */
-  int ccb_indent;                   /* Keep track of {} indent, lexer */
-  int first_ccb_indent1;            /* First { at ident level 1 */
-  int last_ccb_indent1;                     /* Last } at ident level 1 */
+  int ccb_indent;                   /* Number of unmatched { seen. */
+  /* The next two fields are only source_location if USE_MAPPED_LOCATION.
+     Otherwise, they are integer line number, but we can't have #ifdefs
+     in GTY structures. */
+  source_location first_ccb_indent1; /* First { at ident level 1 */
+  source_location last_ccb_indent1;  /* Last } at ident level 1 */
   int parser_ccb_indent;            /* Keep track of {} indent, parser */
   int osb_depth;                    /* Current depth of [ in an expression */
   int osb_limit;                    /* Limit of this depth */
-  int * GTY ((skip (""))) osb_number; /* Keep track of ['s */
-  int lineno;                       /* Current lineno */
+  int * GTY ((skip)) osb_number; /* Keep track of ['s */
   char marker_end;                  /* End marker. Should be a sub-struct */
 
   /* The flags section */
@@ -763,8 +784,6 @@ struct parser_ctxt GTY(()) {
   tree class_type;                 /* Current class */
   tree function_decl;              /* Current function decl, save/restore */
 
-  struct JCF * current_jcf;        /* CU jcf */
-
   int prevent_ese;                 /* Prevent expression statement error */
 
   int formal_parameter_number;     /* Number of parameters found */
@@ -774,7 +793,7 @@ struct parser_ctxt GTY(()) {
 
   /* These two lists won't survive file traversal */
   tree  class_list;                /* List of classes in a CU */
-  jdeplist * GTY((skip (""))) classd_list; /* Classe dependencies in a CU */
+  jdeplist * GTY((skip)) classd_list; /* Classe dependencies in a CU */
   
   tree  current_parsed_class;      /* Class currently parsed */
   tree  current_parsed_class_un;    /* Curr. parsed class unqualified name */
@@ -807,7 +826,7 @@ struct parser_ctxt GTY(()) {
    an inner class is pushed. After, use FIXME. */
 #define CPC_INNER_P() GET_CPC_LIST ()
 
-/* Get the currently parsed class DECL_TYPE node.  */
+/* The TYPE_DECL node of the class currently being parsed.  */
 #define GET_CPC() TREE_VALUE (GET_CPC_LIST ())
 
 /* Get the currently parsed class unqualified IDENTIFIER_NODE.  */
@@ -842,7 +861,7 @@ struct parser_ctxt GTY(()) {
            != TYPE_NAME (TREE_TYPE (TREE_TYPE (current_this))))              \
        && !inherits_from_p (TREE_TYPE (TREE_TYPE (current_this)),            \
                             TREE_TYPE (DECL_CONTEXT (TYPE_NAME (T))))        \
-        && !common_enclosing_context_p (TREE_TYPE (TREE_TYPE (current_this)), \
+        && !common_enclosing_instance_p (TREE_TYPE (TREE_TYPE (current_this)),\
                                        (T))                                  \
        && INNER_CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_this)))          \
        && !inherits_from_p                                                   \
@@ -910,9 +929,9 @@ struct parser_ctxt GTY(()) {
     TREE_PURPOSE (CPC_INSTANCE_INITIALIZER_LIST (C)) = (S);
 
 /* This is used by the lexer to communicate with the parser.  It is
-   set on an integer constant if the radix is 10, so that the parser
+   set on an integer constant if the radix is NOT 10, so that the parser
    can correctly diagnose a numeric overflow.  */
-#define JAVA_RADIX10_FLAG(NODE) TREE_LANG_FLAG_0(NODE)
+#define JAVA_NOT_RADIX10_FLAG(NODE) TREE_LANG_FLAG_0(NODE)
 
 #ifndef JC1_LITE
 void java_complete_class (void);