+Mon Apr 19 14:44:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+
+ * lang.c (lang_decode_option): Fixed returned value when parsing
+ `-fxref=...' and `-Wall'.
+ * parse.y (source_end_java_method): Do not generate code when
+ flag_emit_xref is set.
+ (resolve_expression_name): Do not build static field access when
+ flag_emit_xref is set.
+ (resolve_field_access): No special treatement on `length' when
+ flag_emit_xref is set. Do not build qualified static field access
+ when flag_emit_xref is set.
+ (patch_invoke): Keep the method DECL as operand 0 of the CALL_EXPR
+ when flag_emit_xref is set.
+ (patch_assignment): Do not generate array store runtime check when
+ flag_emit_xref is set.
+ * xref.c (xref_flag_value): Fixed function declaration
+ indentation.
+ (xset_set_data): New function.
+ * xref.h (xref_set_data): Added prototype for new function.
+ (typedef struct xref_flag_table): New field data.
+ (XREF_GET_DATA): New macro.
+
1999-04-19 Tom Tromey <tromey@cygnus.com>
* xref.h (enum): Removed trailing comma.
Mon Apr 12 18:27:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
- * parse.y (patch_unaryop): Fix ++ operator check on array
+ * parse.y (patch_unaryop): Fixed ++/-- operator check on array
references.
Tue Apr 6 23:15:52 1999 Jeffrey A Law (law@cygnus.com)
/* Generate function's code */
if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl))
- && ! flag_emit_class_files)
+ && ! flag_emit_class_files
+ && ! flag_emit_xref)
expand_expr_stmt (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (fndecl)));
/* pop out of its parameters */
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
/* Generate rtl for function exit. */
- if (! flag_emit_class_files)
+ if (! flag_emit_class_files && ! flag_emit_xref)
{
lineno = DECL_SOURCE_LINE_LAST (fndecl);
/* Emit catch-finally clauses */
/* Otherwise build what it takes to access the field */
decl = build_field_ref ((fs ? NULL_TREE : current_this),
current_class, name);
- if (fs && !flag_emit_class_files)
+ if (fs && !flag_emit_class_files && !flag_emit_xref)
decl = build_class_init (current_class, decl);
/* We may be asked to save the real field access node */
if (orig)
/* Resolve the LENGTH field of an array here */
if (DECL_NAME (decl) == length_identifier_node && TYPE_ARRAY_P (type_found)
- && ! flag_emit_class_files)
+ && ! flag_emit_class_files && ! flag_emit_xref)
{
tree length = build_java_array_length_access (where_found);
field_ref =
type_found, DECL_NAME (decl));
if (field_ref == error_mark_node)
return error_mark_node;
- if (is_static && !static_final_found && !flag_emit_class_files)
+ if (is_static && !static_final_found
+ && !flag_emit_class_files && !flag_emit_xref)
{
field_ref = build_class_init (type_found, field_ref);
/* If the static field was identified by an expression that
TREE_TYPE (TREE_VALUE (ta)) != TREE_VALUE (t))
TREE_VALUE (ta) = convert (TREE_VALUE (t), TREE_VALUE (ta));
- if (flag_emit_class_files)
+ if (flag_emit_class_files || flag_emit_xref)
func = method;
else
{
{
tree class = DECL_CONTEXT (method);
tree c1, saved_new, size, new;
- if (flag_emit_class_files)
+ if (flag_emit_class_files || flag_emit_xref)
{
TREE_TYPE (patch) = build_pointer_type (class);
return patch;
/* 10.10: Array Store Exception runtime check */
if (!flag_emit_class_files
+ && !flag_emit_xref
&& lvalue_from_array
&& JREFERENCE_TYPE_P (TYPE_ARRAY_ELEMENT (lhs_type))
&& !CLASS_FINAL (TYPE_NAME (GET_SKIP_TYPE (rhs_type))))
/* Exported functions. */
int xref_flag_value PROTO ((char *));
void expand_xref PROTO ((tree));
+void xref_set_data PROTO ((int, void *));
/* flag_emit_xref range of possible values. */
char *key; /* Activator in -fxref=<key> */
void (*expand) PROTO ((FILE *, tree)); /* Function to write xrefs out */
FILE *fp; /* fp to use during the call. */
+ void *data; /* Placeholder for additional data */
} xref_flag_table;
+
+#define XREF_GET_DATA(FLAG, T) ((T)xref_table [(FLAG)-1].data)