diff options
Diffstat (limited to 'gcc/java/jcf-parse.c')
-rw-r--r-- | gcc/java/jcf-parse.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index a44e860a242..c948a1ab9da 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -494,27 +494,33 @@ read_class (tree name) if (current_jcf->java_source) { const char *filename = current_jcf->filename; - tree file; + tree given_file, real_file; FILE *finput; int generate; java_parser_context_save_global (); java_push_parser_context (); - BUILD_FILENAME_IDENTIFIER_NODE (file, filename); - generate = IS_A_COMMAND_LINE_FILENAME_P (file); + + BUILD_FILENAME_IDENTIFIER_NODE (given_file, filename); + real_file = get_identifier (lrealpath (filename)); + + generate = IS_A_COMMAND_LINE_FILENAME_P (given_file); if (wfl_operator == NULL_TREE) wfl_operator = build_expr_wfl (NULL_TREE, NULL, 0, 0); - EXPR_WFL_FILENAME_NODE (wfl_operator) = file; + EXPR_WFL_FILENAME_NODE (wfl_operator) = given_file; input_filename = ggc_strdup (filename); output_class = current_class = NULL_TREE; current_function_decl = NULL_TREE; - if (!HAS_BEEN_ALREADY_PARSED_P (file)) + + if (! HAS_BEEN_ALREADY_PARSED_P (real_file)) { - if (!(finput = fopen (input_filename, "r"))) + if (! (finput = fopen (input_filename, "r"))) fatal_error ("can't reopen %s: %m", input_filename); - parse_source_file_1 (file, finput); + + parse_source_file_1 (real_file, finput); parse_source_file_2 (); parse_source_file_3 (); + if (fclose (finput)) fatal_error ("can't close %s: %m", input_filename); } @@ -798,11 +804,12 @@ parse_class_file (void) /* Parse a source file, as pointed by the current value of INPUT_FILENAME. */ static void -parse_source_file_1 (tree file, FILE *finput) +parse_source_file_1 (tree real_file, FILE *finput) { int save_error_count = java_error_count; - /* Mark the file as parsed */ - HAS_BEEN_ALREADY_PARSED_P (file) = 1; + + /* Mark the file as parsed. */ + HAS_BEEN_ALREADY_PARSED_P (real_file) = 1; jcf_dependency_add_file (input_filename, 0); @@ -1015,9 +1022,11 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED) unsigned char magic_string[4]; uint32 magic = 0; tree name = TREE_VALUE (node); + tree real_file; /* Skip already parsed files */ - if (HAS_BEEN_ALREADY_PARSED_P (name)) + real_file = get_identifier (lrealpath (IDENTIFIER_POINTER (name))); + if (HAS_BEEN_ALREADY_PARSED_P (real_file)) continue; /* Close previous descriptor, if any */ @@ -1075,7 +1084,8 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED) JAVA_FILE_P (node) = 1; java_push_parser_context (); java_parser_context_save_global (); - parse_source_file_1 (name, finput); + + parse_source_file_1 (real_file, finput); java_parser_context_restore_global (); java_pop_parser_context (1); } |