Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
56fe39c8
Commit
56fe39c8
authored
Apr 26, 2001
by
Per Bothner
Committed by
Per Bothner
Apr 26, 2001
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix method search wrt scope of inner classes to match JLS2.
From-SVN: r41604
parent
52a661a6
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
56 additions
and
24 deletions
+56
-24
gcc/java/ChangeLog
+11
-0
gcc/java/java-tree.h
+1
-0
gcc/java/parse.y
+24
-22
gcc/java/typeck.c
+20
-2
No files found.
gcc/java/ChangeLog
View file @
56fe39c8
2001-04-26 Per Bothner <per@bothner.com>
Fix method search wrt scope of inner classes to match JLS2.
* typeck.c (build_null_signature): New static function.
(has_method): New function. Uses build_null_signature and lookup_do.
* java-tree.h (has_method): New declaration.
* parse.y (find_applicable_accessible_methods_list): Do not search
context of inner classes here.
(patch_method_invocation): Search scope, ie. current and outer clases,
for method matching simple name, to find class.
2001-04-26 Per Bothner <per@bothner.com>
* jcf-write.c (generate_bytecode_insns case SWITCH_EXPR):
Fix thinko: If a single case, use if_icmpeq, not ifeq.
...
...
gcc/java/java-tree.h
View file @
56fe39c8
...
...
@@ -960,6 +960,7 @@ extern tree lookup_java_constructor PARAMS ((tree, tree));
extern
tree
lookup_java_method
PARAMS
((
tree
,
tree
,
tree
));
extern
tree
lookup_argument_method
PARAMS
((
tree
,
tree
,
tree
));
extern
tree
lookup_argument_method2
PARAMS
((
tree
,
tree
,
tree
));
extern
int
has_method
PARAMS
((
tree
,
tree
));
extern
tree
promote_type
PARAMS
((
tree
));
extern
tree
get_constant
PARAMS
((
struct
JCF
*
,
int
));
extern
tree
get_name_constant
PARAMS
((
struct
JCF
*
,
int
));
...
...
gcc/java/parse.y
View file @
56fe39c8
...
...
@@ -9882,7 +9882,29 @@ patch_method_invocation (patch, primary, where, from_super,
alternate class is specified. */
else
{
class_to_search = (where ? where : current_class);
if (where != NULL_TREE)
class_to_search = where;
else if (QUALIFIED_P (name))
class_to_search = current_class;
else
{
class_to_search = current_class;
for (;;)
{
if (has_method (class_to_search, name))
break;
if (! INNER_CLASS_TYPE_P (class_to_search))
{
parse_error_context (wfl,
"No method named `%s'
in
scope
",
IDENTIFIER_POINTER (name));
PATCH_METHOD_RETURN_ERROR ();
}
class_to_search
= TREE_TYPE (DECL_CONTEXT (TYPE_NAME (class_to_search)));
}
}
lc = 0;
}
...
...
@@ -10488,8 +10510,6 @@ find_applicable_accessible_methods_list (lc, class, name, arglist)
/* Search classes */
else
{
tree sc = class;
int seen_inner_class = 0;
search_applicable_methods_list (lc, TYPE_METHODS (class),
name, arglist, &list, &all_list);
...
...
@@ -10506,7 +10526,7 @@ find_applicable_accessible_methods_list (lc, class, name, arglist)
/* We must search all interfaces of this class */
if (!lc)
{
tree basetype_vec = TYPE_BINFO_BASETYPES (
sc
);
tree basetype_vec = TYPE_BINFO_BASETYPES (
class
);
int n = TREE_VEC_LENGTH (basetype_vec), i;
for (i = 1; i < n; i++)
{
...
...
@@ -10521,24 +10541,6 @@ find_applicable_accessible_methods_list (lc, class, name, arglist)
}
}
/* Search enclosing context of inner classes before looking
ancestors up. */
while (!lc && INNER_CLASS_TYPE_P (class))
{
tree rlist;
seen_inner_class = 1;
class = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (class)));
rlist = find_applicable_accessible_methods_list (lc, class,
name, arglist);
list = chainon (rlist, list);
}
if (!lc && seen_inner_class
&& TREE_TYPE (DECL_CONTEXT (TYPE_NAME (sc))) == CLASSTYPE_SUPER (sc))
class = CLASSTYPE_SUPER (sc);
else
class = sc;
/* Search superclass */
if (!lc && CLASSTYPE_SUPER (class) != NULL_TREE)
{
...
...
gcc/java/typeck.c
View file @
56fe39c8
...
...
@@ -579,6 +579,13 @@ get_type_from_signature (tree signature)
return
type
;
}
tree
build_null_signature
(
type
)
tree
type
;
{
return
NULL_TREE
;
}
/* Return the signature string for the arguments of method type TYPE. */
tree
...
...
@@ -761,9 +768,20 @@ lookup_java_method (searched_class, method_name, method_signature)
method_signature
,
build_java_signature
);
}
/* Search in class SEARCHED_CLASS (an its superclasses) for a method
/* Return true iff CLASS (or its ancestors) has a method METHOD_NAME. */
int
has_method
(
class
,
method_name
)
tree
class
;
tree
method_name
;
{
return
lookup_do
(
class
,
class
,
method_name
,
NULL_TREE
,
build_null_signature
)
!=
NULL_TREE
;
}
/* Search in class SEARCHED_CLASS (and its superclasses) for a method
matching METHOD_NAME and signature SIGNATURE. Also search in
SEARCHED_INTERFACE (an its superinterfaces) for a similar match.
SEARCHED_INTERFACE (an
d
its superinterfaces) for a similar match.
Return the matched method DECL or NULL_TREE. SIGNATURE_BUILDER is
used on method candidates to build their (sometimes partial)
signature. */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment