aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/parse.h
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@cygnus.com>1998-10-28 13:06:17 +0000
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>1998-10-28 05:06:17 -0800
commit22eed1e6784af1d88a4e0f1773f2d6952c2c493c (patch)
tree1e2db7c201bd3c8f9335f1992e5cdc9df79988e6 /gcc/java/parse.h
parenta05273d4c812079f544e9777438354d1904c0f87 (diff)
downloadgcc-22eed1e6784af1d88a4e0f1773f2d6952c2c493c.zip
gcc-22eed1e6784af1d88a4e0f1773f2d6952c2c493c.tar.gz
gcc-22eed1e6784af1d88a4e0f1773f2d6952c2c493c.tar.bz2
class.c (layout_class): Don't mangle <finit>, produce __finit<class> instead.
Wed Oct 28 08:03:31 1998 Alexandre Petit-Bianco <apbianco@cygnus.com> * class.c (layout_class): Don't mangle <finit>, produce __finit<class> instead. Don't verify artificial methods. * decl.c (finit_identifier_node): New declared global. (init_decl_processing): finit_identifier_node initialized. * java-tree.def (CONDITIONAL_EXPR): New Java tree code. * java-tree.h (finit_identifier_node): Declared as extern. (struct lang_decl): New field called_constructor. (DECL_CONSTRUCTOR_CALLS): Access macro to called_constructor. (CLASS_HAS_FINIT_P): New macro. (CALL_CONSTRUCTOR_P): Leading comment changed. Macro now checks explicit constructor invocation. (CALL_EXPLICIT_CONSTRUCTOR_P, CALL_THIS_CONSTRUCTOR_P, CALL_SUPER_CONSTRUCTOR_P): New macros. (write_classfile): Added prototype. * jcf-parse.c (jcf_parse_source): Parse and remember for generation if the file was seen on the command line. (parse_source_file): Don't write the class file here. (yyparse): Loop on files rewritten. Set current_jcf. (parse_zip_file_entries): Parse class file only if it was found. * lang.c (init_parse): Don't open command line provided filename here. (lang_parse): Don't set main_jcf anymore. * parse.h (ABSTRAC_CHECK): Capitalized arguments. (JCONSTRUCTOR_CHECK): New macro. (JBSC_TYPE_P): New macro. (IN_TRY_BLOCK_P, EXCEPTIONS_P): Fixed leading comment. (COMPLETE_CHECK_OP_2): New macro. (struct parse_ctxt): New field explicit_constructor_p. (check_class_interface_creation): Fixed prototype indentation. (patch_method_invocation_stmt): Prototype reflects added argument. (patch_invoke): Likewise. (complete_method_declaration, build_super_invocation, verify_constructor_circularity, build_this_super_qualified_invocation, get_printable_method_name, patch_conditional_expr, maybe_generate_finit, fix_constructors, verify_constructor_super, create_artificial_method, start_artificial_method_body, end_artificial_method_body, generate_field_initialization_code): New function prototypes. * parse.y: Fixed leading comment (constructor_header:, constructor_body:, block_end:): Rules tagged <node>. (type_declaration:): Call maybe_generate_finit. (method_declaration:): Action for method_body: placed in new function complete_method_declaration, called here. (constructor_declaration:): Defined actions. Removed leading FIXME. (constructor_header:): New rule with action. (constructor_body:): Rule rewritten using block_begin: and block_end:. Defined actions. (constructor_declarator:, explicit_constructor_invocation:): Defined actions. (block:): Use new rules block_begin: block_end:. (block_begin:, block_end:): New rules and actions. (block_statements:): Fixed error message for explicit constructors. (method_invocation:): Call build_this_super_qualified_invocation if primary is `this' or `super' was seen. (conditional_expression:): Action defined. (extra_ctxp_pushed_p): New static global flag. (java_parser_context_save_global): Create parser context if necessary. Use extra_ctxp_pushed_p to remember it. (java_parser_context_restore_global): Pop extra parser context if one exists. (build_array_from_name): Array on primitive types are marked loaded. (register_fields): Restore new name in field initializer expression if type was altered. Non static fields initialized upon declaration marked initialized. (maybe_generate_finit): New function. (maybe_generate_clinit): Use create_artificial_method, start_artificial_method_body, end_artificial_method_body. Generate debug info for enclosed initialization statements. (method_header): Fixed leading comment. Check constructor flags. Detect constructor declarations and set DECL_CONSTRUCTOR_P accordingly. (complete_method_declaration, constructor_circularity_msg, verify_constructor_circularity): New functions. (get_printable_method_name): New function. (check_method_redefinition): Don't rename <finit> methods. Fix declared constructor names. Error message for constructors modified. (java_check_regular_methods): Local variable seen_constructor renamed saw_constructor. Skip verification on constructors. Create default constructor with create_artificial_method. (java_check_methods): Removed unnecessary empty line. (create_artificial_method, start_artificial_method_body, end_artificial_method_body): New functions. (java_layout_classes): Changed leading comment. Reverse fields list if necessary. Always layout java.lang.Object if being defined. (java_complete_expand_methods): Verify constructor circularity. (java_complete_expand_method): Call fix_constructor on constructors. Local variable no_ac_found removed. Restore bindings if method body expansion failed. (fix_constructors, verify_constructor_super, generate_field_initialization_code): New function. (java_expand_classes): Fixed leading comment. Write class file here. (resolve_expression_name): Check for illegal instance variable usage within the argument scope of an explicit constructor invocation. (resolve_qualified_expression_name): Pass extra from_super flag when invoking patch_method_invocation_stmt. New case for conditional expression when used as a primary. Check for error when acquiring super. (patch_method_invocation_stmt): Added extra argument super. New local variable is_static_flag. Set class_to_search according to the nature of the constructor invocation. Don't add `this' argument when expanding NEW_CLASS_EXPR. Check for illegal method invocation within the argument scope of explicit constructor invocation. Set is_static according to is_static_flag. Provide extra `super' argument to patch_invoke invocation. (patch_invoke): New argument from_super. Loop on arguments indentation fixed. Pass from_super to invocation_mode. New switch case INVOKE_SUPER. Fixed error message in switch default case. Don't use CALL_CONSTRUCTOR_P but rather a test on the tree node value. (invocation_mode): Return INVOKE_SUPER mode when appropriate. (lookup_method_invoke): Fixed prototypes in candidates list. Error message takes constructors into account. (find_applicable_accessible_methods_list): Fixed indentation. (qualify_ambiguous_name): Take explicit constructor invocation into account. Deal with a conditional expression as a primary to a method call. (java_complete_tree): Added local wfl_op3. New CONDITIONAL_EXPR case. Added extra argument to patch_method_invocation_stmt. Register calls made to explicit constructor `this'. Don't call save_expr in ARRAY_REF case when emitting class files. Check for illegal use of this when expanding explicit constructor invocation arguments. (complete_function_arguments): Set and reset parser context explicit_constructor_p field value when appropriate. (build_super_invocation, build_this_super_qualified_invocation): New functions. (patch_assignment): Fixed typo. (patch_unaryop): Check on final fields occurs only when a decl exits. (patch_return): Take constructors into account. (patch_conditional_expr): New function. * typeck.c (build_java_signature): Removed unnecessary empty line. This patch implements the conditional operator, fixes the super invokation mode, implements most of what is required for constructors and changes the way source files are handled by the front-end. From-SVN: r23403
Diffstat (limited to 'gcc/java/parse.h')
-rw-r--r--gcc/java/parse.h51
1 files changed, 41 insertions, 10 deletions
diff --git a/gcc/java/parse.h b/gcc/java/parse.h
index b0d90a1..bb9477a 100644
--- a/gcc/java/parse.h
+++ b/gcc/java/parse.h
@@ -99,10 +99,14 @@ extern tree stabilize_reference PROTO ((tree));
count++; \
}
-#define ABSTRACT_CHECK(flag, v, cl, s) \
- if ((flag) & (v)) \
- parse_error_context (cl, s " method can't be abstract");
-
+#define ABSTRACT_CHECK(FLAG, V, CL, S) \
+ if ((FLAG) & (V)) \
+ parse_error_context ((CL), S " method can't be abstract");
+
+#define JCONSTRUCTOR_CHECK(FLAG, V, CL, S) \
+ if ((FLAG) & (V)) \
+ parse_error_context ((CL), "Constructor can't be %s", (S)); \
+
/* Misc. */
#define exit_java_complete_class() \
{ \
@@ -159,6 +163,10 @@ extern tree stabilize_reference PROTO ((tree));
&& (JNUMERIC_TYPE_P ((TYPE)) \
|| TREE_CODE ((TYPE)) == BOOLEAN_TYPE))
+#define JBSC_TYPE_P(TYPE) ((TYPE) && (((TYPE) == byte_type_node) \
+ || ((TYPE) == short_type_node) \
+ || ((TYPE) == char_type_node)))
+
/* Not defined in the LRM */
#define JSTRING_TYPE_P(TYPE) ((TYPE) \
&& ((TYPE) == string_type_node || \
@@ -269,17 +277,16 @@ extern tree stabilize_reference PROTO ((tree));
#define POP_EXCEPTIONS() \
currently_caught_type_list = TREE_CHAIN (currently_caught_type_list)
-/* Check that we're inside a try block */
+/* Check that we're inside a try block. */
#define IN_TRY_BLOCK_P() \
(currently_caught_type_list \
&& ((TREE_VALUE (currently_caught_type_list) != \
DECL_FUNCTION_THROWS (current_function_decl)) \
|| TREE_CHAIN (currently_caught_type_list)))
-/* Check that we have exceptions in E */
+/* Check that we have exceptions in E. */
#define EXCEPTIONS_P(E) ((E) ? TREE_VALUE (E) : NULL_TREE)
-
/* Invocation modes, as returned by invocation_mode (). */
enum {
INVOKE_STATIC,
@@ -462,6 +469,7 @@ static jdeplist *reverse_jdep_list ();
}
#define COMPLETE_CHECK_OP_0(NODE) COMPLETE_CHECK_OP(NODE, 0)
#define COMPLETE_CHECK_OP_1(NODE) COMPLETE_CHECK_OP(NODE, 1)
+#define COMPLETE_CHECK_OP_2(NODE) COMPLETE_CHECK_OP(NODE, 2)
/* Building invocations: append(ARG) and StringBuffer(ARG) */
#define BUILD_APPEND(ARG) \
@@ -567,6 +575,12 @@ struct parser_ctxt {
labeled blocks. */
int pending_block; /* Pending block to close */
+
+ int explicit_constructor_p; /* True when processing an
+ explicit constructor. This flag is
+ used to trap illegal argument usage
+ during an explicit constructor
+ invocation. */
#endif /* JC1_LITE */
};
@@ -611,8 +625,10 @@ static void check_abstract_method_header PROTO ((tree));
static tree lookup_java_interface_method2 PROTO ((tree, tree));
static tree resolve_expression_name PROTO ((tree));
static tree maybe_create_class_interface_decl PROTO ((tree, tree, tree));
-static int check_class_interface_creation PROTO ((int, int, tree, tree, tree, tree));
-static tree patch_method_invocation_stmt PROTO ((tree, tree, tree, int *, tree *));
+static int check_class_interface_creation PROTO ((int, int, tree,
+ tree, tree, tree));
+static tree patch_method_invocation_stmt PROTO ((tree, tree, tree,
+ int *, tree *, int));
static int breakdown_qualified PROTO ((tree *, tree *, tree));
static tree resolve_and_layout PROTO ((tree, tree));
static tree resolve_no_layout PROTO ((tree, tree));
@@ -620,7 +636,7 @@ static int invocation_mode PROTO ((tree, int));
static tree find_applicable_accessible_methods_list PROTO ((tree, tree, tree));
static tree find_most_specific_methods_list PROTO ((tree));
static int argument_types_convertible PROTO ((tree, tree));
-static tree patch_invoke PROTO ((tree, tree, tree));
+static tree patch_invoke PROTO ((tree, tree, tree, int));
static tree lookup_method_invoke PROTO ((int, tree, tree, tree, tree));
static tree register_incomplete_type PROTO ((int, tree, tree, tree));
static tree obtain_incomplete_type PROTO ((tree));
@@ -704,6 +720,21 @@ static void check_thrown_exceptions PROTO ((int, tree));
static int check_thrown_exceptions_do PROTO ((tree));
static void purge_unchecked_exceptions PROTO ((tree));
static void check_throws_clauses PROTO ((tree, tree, tree));
+static void complete_method_declaration PROTO ((tree));
+static tree build_super_invocation PROTO (());
+static int verify_constructor_circularity PROTO ((tree, tree));
+static char *constructor_circularity_msg PROTO ((tree, tree));
+static tree build_this_super_qualified_invocation PROTO ((int, tree, tree,
+ int, int));
+static char *get_printable_method_name PROTO ((tree));
+static tree patch_conditional_expr PROTO ((tree, tree, tree));
+static void maybe_generate_finit PROTO (());
+static void fix_constructors PROTO ((tree));
+static int verify_constructor_super PROTO (());
+static tree create_artificial_method PROTO ((tree, int, tree, tree, tree));
+static void start_artificial_method_body PROTO ((tree));
+static void end_artificial_method_body PROTO ((tree));
+static tree generate_field_initialization_code PROTO ((tree));
void safe_layout_class PROTO ((tree));
void java_complete_class PROTO ((void));