X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fjava%2Fparse.h;h=eb749a5b7e615b5184b825cddb29cfa36db4481b;hb=61a98835eb32cb811714c00067d54d8fea078106;hp=df1fa562844fe9b24ef485f949899a8f25472a67;hpb=8e3b4c7b42c78314b10fbe0c1763898833dc25e7;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/java/parse.h b/gcc/java/parse.h index df1fa562844..eb749a5b7e6 100644 --- a/gcc/java/parse.h +++ b/gcc/java/parse.h @@ -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); @@ -941,6 +960,7 @@ ATTRIBUTE_NORETURN #endif ; extern void java_expand_classes (void); +extern void java_finish_classes (void); extern GTY(()) struct parser_ctxt *ctxp; extern GTY(()) struct parser_ctxt *ctxp_for_generation;