Commit 6b6294f1 by Tom Tromey Committed by Tom Tromey

java-tree.h (TYPE_STRICTFP): New macro.

	* java-tree.h (TYPE_STRICTFP): New macro.
	(struct lang_type) [strictfp]: New field.
	(CLASS_STRICTFP): New macro.
	(METHOD_STRICTFP): New macro.
	(struct lang_decl) [strictfp]: New field.
	* parse.y (method_header): Disallow strictfp constructor or
	abstract method.
	(STRICT_TK): Move before MODIFIER_TK.
	* parse.h (CLASS_MODIFIERS): Added ACC_STRICT.
	(METHOD_MODIFIERS): Likewise.
	(INTERFACE_MODIFIERS): Likewise.
	* jcf-write.c (get_access_flags): Likewise.
	* class.c (set_class_decl_access_flags): Recognize ACC_STRICT.
	(add_method_1): Likewise.
	(get_access_flags_from_decl): Likewise.
	* jcf-dump.c (print_access_flags): Print in standard order.  Also,
	recognize strictfp flag.
	* jcf.h (ACC_STRICT): New define.

From-SVN: r49834
parent aeb85a15
2002-02-17 Tom Tromey <tromey@redhat.com>
* java-tree.h (TYPE_STRICTFP): New macro.
(struct lang_type) [strictfp]: New field.
(CLASS_STRICTFP): New macro.
(METHOD_STRICTFP): New macro.
(struct lang_decl) [strictfp]: New field.
* parse.y (method_header): Disallow strictfp constructor or
abstract method.
(STRICT_TK): Move before MODIFIER_TK.
* parse.h (CLASS_MODIFIERS): Added ACC_STRICT.
(METHOD_MODIFIERS): Likewise.
(INTERFACE_MODIFIERS): Likewise.
* jcf-write.c (get_access_flags): Likewise.
* class.c (set_class_decl_access_flags): Recognize ACC_STRICT.
(add_method_1): Likewise.
(get_access_flags_from_decl): Likewise.
* jcf-dump.c (print_access_flags): Print in standard order. Also,
recognize strictfp flag.
* jcf.h (ACC_STRICT): New define.
2002-02-12 David Billinghurst <Davod.Billinghurst@riotinto.com> 2002-02-12 David Billinghurst <Davod.Billinghurst@riotinto.com>
* class.c(build_utf8_ref): Move declaration of decl_size * class.c(build_utf8_ref): Move declaration of decl_size
......
...@@ -425,6 +425,7 @@ set_class_decl_access_flags (access_flags, class_decl) ...@@ -425,6 +425,7 @@ set_class_decl_access_flags (access_flags, class_decl)
if (access_flags & ACC_STATIC) CLASS_STATIC (class_decl) = 1; if (access_flags & ACC_STATIC) CLASS_STATIC (class_decl) = 1;
if (access_flags & ACC_PRIVATE) CLASS_PRIVATE (class_decl) = 1; if (access_flags & ACC_PRIVATE) CLASS_PRIVATE (class_decl) = 1;
if (access_flags & ACC_PROTECTED) CLASS_PROTECTED (class_decl) = 1; if (access_flags & ACC_PROTECTED) CLASS_PROTECTED (class_decl) = 1;
if (access_flags & ACC_STRICT) CLASS_STRICTFP (class_decl) = 1;
} }
/* Return length of inheritance chain of CLAS, where java.lang.Object is 0, /* Return length of inheritance chain of CLAS, where java.lang.Object is 0,
...@@ -719,6 +720,7 @@ add_method_1 (handle_class, access_flags, name, function_type) ...@@ -719,6 +720,7 @@ add_method_1 (handle_class, access_flags, name, function_type)
if (access_flags & ACC_SYNCHRONIZED) METHOD_SYNCHRONIZED (fndecl) = 1; if (access_flags & ACC_SYNCHRONIZED) METHOD_SYNCHRONIZED (fndecl) = 1;
if (access_flags & ACC_ABSTRACT) METHOD_ABSTRACT (fndecl) = 1; if (access_flags & ACC_ABSTRACT) METHOD_ABSTRACT (fndecl) = 1;
if (access_flags & ACC_TRANSIENT) METHOD_TRANSIENT (fndecl) = 1; if (access_flags & ACC_TRANSIENT) METHOD_TRANSIENT (fndecl) = 1;
if (access_flags & ACC_STRICT) METHOD_STRICTFP (fndecl) = 1;
return fndecl; return fndecl;
} }
...@@ -1223,6 +1225,8 @@ get_access_flags_from_decl (decl) ...@@ -1223,6 +1225,8 @@ get_access_flags_from_decl (decl)
access_flags |= ACC_PRIVATE; access_flags |= ACC_PRIVATE;
if (CLASS_PROTECTED (decl)) if (CLASS_PROTECTED (decl))
access_flags |= ACC_PROTECTED; access_flags |= ACC_PROTECTED;
if (CLASS_STRICTFP (decl))
access_flags |= ACC_STRICT;
return access_flags; return access_flags;
} }
if (TREE_CODE (decl) == FUNCTION_DECL) if (TREE_CODE (decl) == FUNCTION_DECL)
...@@ -1245,6 +1249,8 @@ get_access_flags_from_decl (decl) ...@@ -1245,6 +1249,8 @@ get_access_flags_from_decl (decl)
access_flags |= ACC_ABSTRACT; access_flags |= ACC_ABSTRACT;
if (METHOD_TRANSIENT (decl)) if (METHOD_TRANSIENT (decl))
access_flags |= ACC_TRANSIENT; access_flags |= ACC_TRANSIENT;
if (METHOD_STRICTFP (decl))
access_flags |= ACC_STRICT;
return access_flags; return access_flags;
} }
abort (); abort ();
......
...@@ -942,6 +942,7 @@ struct lang_decl ...@@ -942,6 +942,7 @@ struct lang_decl
unsigned int init_final : 1; /* Nonzero all finals are initialized */ unsigned int init_final : 1; /* Nonzero all finals are initialized */
unsigned int fixed_ctor : 1; unsigned int fixed_ctor : 1;
unsigned int init_calls_this : 1; unsigned int init_calls_this : 1;
unsigned int strictfp : 1;
}; };
/* init_test_table hash table entry structure. */ /* init_test_table hash table entry structure. */
...@@ -990,6 +991,7 @@ struct lang_decl_var ...@@ -990,6 +991,7 @@ struct lang_decl_var
#define TYPE_IMPORT_DEMAND_LIST(T) (TYPE_LANG_SPECIFIC(T)->import_demand_list) #define TYPE_IMPORT_DEMAND_LIST(T) (TYPE_LANG_SPECIFIC(T)->import_demand_list)
#define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->pic) #define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->pic)
#define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->poic) #define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->poic)
#define TYPE_STRICTFP(T) (TYPE_LANG_SPECIFIC(T)->strictfp)
struct lang_type struct lang_type
{ {
...@@ -1009,6 +1011,7 @@ struct lang_type ...@@ -1009,6 +1011,7 @@ struct lang_type
tree import_demand_list; /* Imported types, in the CU of this class */ tree import_demand_list; /* Imported types, in the CU of this class */
unsigned pic:1; /* Private Inner Class. */ unsigned pic:1; /* Private Inner Class. */
unsigned poic:1; /* Protected Inner Class. */ unsigned poic:1; /* Protected Inner Class. */
unsigned strictfp:1; /* `strictfp' class. */
}; };
#ifdef JAVA_USE_HANDLES #ifdef JAVA_USE_HANDLES
...@@ -1249,6 +1252,7 @@ struct rtx_def * java_lang_expand_expr PARAMS ((tree, rtx, enum machine_mode, ...@@ -1249,6 +1252,7 @@ struct rtx_def * java_lang_expand_expr PARAMS ((tree, rtx, enum machine_mode,
#define METHOD_NATIVE(DECL) (DECL_LANG_SPECIFIC(DECL)->native) #define METHOD_NATIVE(DECL) (DECL_LANG_SPECIFIC(DECL)->native)
#define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (DECL) #define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (DECL)
#define METHOD_TRANSIENT(DECL) DECL_LANG_FLAG_6 (DECL) #define METHOD_TRANSIENT(DECL) DECL_LANG_FLAG_6 (DECL)
#define METHOD_STRICTFP(DECL) (DECL_LANG_SPECIFIC (DECL)->strictfp)
#define JAVA_FILE_P(NODE) TREE_LANG_FLAG_2 (NODE) #define JAVA_FILE_P(NODE) TREE_LANG_FLAG_2 (NODE)
#define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE) #define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE)
...@@ -1291,6 +1295,7 @@ struct rtx_def * java_lang_expand_expr PARAMS ((tree, rtx, enum machine_mode, ...@@ -1291,6 +1295,7 @@ struct rtx_def * java_lang_expand_expr PARAMS ((tree, rtx, enum machine_mode,
#define CLASS_STATIC(DECL) DECL_LANG_FLAG_7 (DECL) #define CLASS_STATIC(DECL) DECL_LANG_FLAG_7 (DECL)
#define CLASS_PRIVATE(DECL) (TYPE_PRIVATE_INNER_CLASS (TREE_TYPE (DECL))) #define CLASS_PRIVATE(DECL) (TYPE_PRIVATE_INNER_CLASS (TREE_TYPE (DECL)))
#define CLASS_PROTECTED(DECL) (TYPE_PROTECTED_INNER_CLASS (TREE_TYPE (DECL))) #define CLASS_PROTECTED(DECL) (TYPE_PROTECTED_INNER_CLASS (TREE_TYPE (DECL)))
#define CLASS_STRICTFP(DECL) (TYPE_STRICTFP (TREE_TYPE (DECL)))
/* @deprecated marker flag on methods, fields and classes */ /* @deprecated marker flag on methods, fields and classes */
......
...@@ -363,8 +363,12 @@ DEFUN (print_access_flags, (stream, flags, context), ...@@ -363,8 +363,12 @@ DEFUN (print_access_flags, (stream, flags, context),
if (flags & ACC_PUBLIC) fprintf (stream, " public"); if (flags & ACC_PUBLIC) fprintf (stream, " public");
if (flags & ACC_PRIVATE) fprintf (stream, " private"); if (flags & ACC_PRIVATE) fprintf (stream, " private");
if (flags & ACC_PROTECTED) fprintf (stream, " protected"); if (flags & ACC_PROTECTED) fprintf (stream, " protected");
if (flags & ACC_ABSTRACT) fprintf (stream, " abstract");
if (flags & ACC_STATIC) fprintf (stream, " static"); if (flags & ACC_STATIC) fprintf (stream, " static");
if (flags & ACC_FINAL) fprintf (stream, " final"); if (flags & ACC_FINAL) fprintf (stream, " final");
if (flags & ACC_TRANSIENT) fprintf (stream, " transient");
if (flags & ACC_VOLATILE) fprintf (stream, " volatile");
if (flags & ACC_NATIVE) fprintf (stream, " native");
if (flags & ACC_SYNCHRONIZED) if (flags & ACC_SYNCHRONIZED)
{ {
if (context == 'c') if (context == 'c')
...@@ -372,11 +376,8 @@ DEFUN (print_access_flags, (stream, flags, context), ...@@ -372,11 +376,8 @@ DEFUN (print_access_flags, (stream, flags, context),
else else
fprintf (stream, " synchronized"); fprintf (stream, " synchronized");
} }
if (flags & ACC_VOLATILE) fprintf (stream, " volatile");
if (flags & ACC_TRANSIENT) fprintf (stream, " transient");
if (flags & ACC_NATIVE) fprintf (stream, " native");
if (flags & ACC_INTERFACE) fprintf (stream, " interface"); if (flags & ACC_INTERFACE) fprintf (stream, " interface");
if (flags & ACC_ABSTRACT) fprintf (stream, " abstract"); if (flags & ACC_STRICT) fprintf (stream, " strictfp");
} }
......
/* Write out a Java(TM) class file. /* Write out a Java(TM) class file.
Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GNU CC. This file is part of GNU CC.
...@@ -685,6 +685,8 @@ get_access_flags (decl) ...@@ -685,6 +685,8 @@ get_access_flags (decl)
if (ANONYMOUS_CLASS_P (TREE_TYPE (decl)) if (ANONYMOUS_CLASS_P (TREE_TYPE (decl))
|| LOCAL_CLASS_P (TREE_TYPE (decl))) || LOCAL_CLASS_P (TREE_TYPE (decl)))
flags |= ACC_PRIVATE; flags |= ACC_PRIVATE;
if (CLASS_STRICTFP (decl))
flags |= ACC_STRICT;
} }
else else
abort (); abort ();
...@@ -699,6 +701,8 @@ get_access_flags (decl) ...@@ -699,6 +701,8 @@ get_access_flags (decl)
flags |= ACC_SYNCHRONIZED; flags |= ACC_SYNCHRONIZED;
if (METHOD_ABSTRACT (decl)) if (METHOD_ABSTRACT (decl))
flags |= ACC_ABSTRACT; flags |= ACC_ABSTRACT;
if (METHOD_STRICTFP (decl))
flags |= ACC_STRICT;
} }
if (isfield) if (isfield)
{ {
......
/* Utility macros to read Java(TM) .class files and byte codes. /* Utility macros to read Java(TM) .class files and byte codes.
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -207,6 +207,7 @@ typedef struct JCF { ...@@ -207,6 +207,7 @@ typedef struct JCF {
#define ACC_NATIVE 0x0100 #define ACC_NATIVE 0x0100
#define ACC_INTERFACE 0x0200 #define ACC_INTERFACE 0x0200
#define ACC_ABSTRACT 0x0400 #define ACC_ABSTRACT 0x0400
#define ACC_STRICT 0x0800
#define ACC_VISIBILITY (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED) #define ACC_VISIBILITY (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED)
......
/* Language parser definitions for the GNU compiler for the Java(TM) language. /* Language parser definitions for the GNU compiler for the Java(TM) language.
Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
This file is part of GNU CC. This file is part of GNU CC.
...@@ -73,12 +73,13 @@ extern tree stabilize_reference PARAMS ((tree)); ...@@ -73,12 +73,13 @@ extern tree stabilize_reference PARAMS ((tree));
#define YYNOT_TWICE if (ctxp->prevent_ese != lineno) #define YYNOT_TWICE if (ctxp->prevent_ese != lineno)
/* Accepted modifiers */ /* Accepted modifiers */
#define CLASS_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT|ACC_FINAL #define CLASS_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT|ACC_FINAL|ACC_STRICT
#define FIELD_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_FINAL| \ #define FIELD_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_FINAL| \
ACC_STATIC|ACC_TRANSIENT|ACC_VOLATILE ACC_STATIC|ACC_TRANSIENT|ACC_VOLATILE
#define METHOD_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_ABSTRACT| \ #define METHOD_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_PRIVATE|ACC_ABSTRACT| \
ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE| \
#define INTERFACE_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT ACC_STRICT
#define INTERFACE_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT|ACC_STRICT
#define INTERFACE_INNER_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_ABSTRACT|ACC_STATIC #define INTERFACE_INNER_MODIFIERS ACC_PUBLIC|ACC_PROTECTED|ACC_ABSTRACT|ACC_STATIC
#define INTERFACE_METHOD_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT #define INTERFACE_METHOD_MODIFIERS ACC_PUBLIC|ACC_ABSTRACT
#define INTERFACE_FIELD_MODIFIERS ACC_PUBLIC|ACC_STATIC|ACC_FINAL #define INTERFACE_FIELD_MODIFIERS ACC_PUBLIC|ACC_STATIC|ACC_FINAL
......
...@@ -482,8 +482,8 @@ static tree src_parse_roots[1]; ...@@ -482,8 +482,8 @@ static tree src_parse_roots[1];
%token PUBLIC_TK PRIVATE_TK PROTECTED_TK %token PUBLIC_TK PRIVATE_TK PROTECTED_TK
%token STATIC_TK FINAL_TK SYNCHRONIZED_TK %token STATIC_TK FINAL_TK SYNCHRONIZED_TK
%token VOLATILE_TK TRANSIENT_TK NATIVE_TK %token VOLATILE_TK TRANSIENT_TK NATIVE_TK
%token PAD_TK ABSTRACT_TK MODIFIER_TK %token PAD_TK ABSTRACT_TK STRICT_TK
%token STRICT_TK %token MODIFIER_TK
/* Keep those two in order, too */ /* Keep those two in order, too */
%token DECR_TK INCR_TK %token DECR_TK INCR_TK
...@@ -4543,7 +4543,8 @@ method_header (flags, type, mdecl, throws) ...@@ -4543,7 +4543,8 @@ method_header (flags, type, mdecl, throws)
ABSTRACT_CHECK (flags, ACC_STATIC, id, "Static"); ABSTRACT_CHECK (flags, ACC_STATIC, id, "Static");
ABSTRACT_CHECK (flags, ACC_FINAL, id, "Final"); ABSTRACT_CHECK (flags, ACC_FINAL, id, "Final");
ABSTRACT_CHECK (flags, ACC_NATIVE, id, "Native"); ABSTRACT_CHECK (flags, ACC_NATIVE, id, "Native");
ABSTRACT_CHECK (flags, ACC_SYNCHRONIZED,id, "Synchronized"); ABSTRACT_CHECK (flags, ACC_SYNCHRONIZED, id, "Synchronized");
ABSTRACT_CHECK (flags, ACC_STRICT, id, "Strictfp");
if (!CLASS_ABSTRACT (TYPE_NAME (this_class)) if (!CLASS_ABSTRACT (TYPE_NAME (this_class))
&& !CLASS_INTERFACE (TYPE_NAME (this_class))) && !CLASS_INTERFACE (TYPE_NAME (this_class)))
parse_error_context parse_error_context
...@@ -4569,6 +4570,7 @@ method_header (flags, type, mdecl, throws) ...@@ -4569,6 +4570,7 @@ method_header (flags, type, mdecl, throws)
JCONSTRUCTOR_CHECK (flags, ACC_FINAL, id, "final"); JCONSTRUCTOR_CHECK (flags, ACC_FINAL, id, "final");
JCONSTRUCTOR_CHECK (flags, ACC_NATIVE, id, "native"); JCONSTRUCTOR_CHECK (flags, ACC_NATIVE, id, "native");
JCONSTRUCTOR_CHECK (flags, ACC_SYNCHRONIZED, id, "synchronized"); JCONSTRUCTOR_CHECK (flags, ACC_SYNCHRONIZED, id, "synchronized");
JCONSTRUCTOR_CHECK (flags, ACC_STRICT, id, "strictfp");
} }
/* If we found error here, we don't consider it's OK to tread /* If we found error here, we don't consider it's OK to tread
the method definition as a constructor, for the rest of this the method definition as a constructor, for the rest of this
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment