aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog5
-rw-r--r--gcc/java/parse.y11
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index a0568c7..a1a3685 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,8 @@
+2004-02-25 Per Bothner <per@bothner.com>
+
+ * parse.y (build_assertion): If we're in an inner class, create the
+ class$ helper routine in the outer class.
+
2004-02-19 Richard Henderson <rth@redhat.com>
* parse.y (switch_label): Use make_node for DEFAULT_EXPR.
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 72cc9f3..8e419a5 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -15301,6 +15301,10 @@ build_assertion (int location, tree condition, tree value)
{
tree field, classdollar, id, call;
tree class_type = TREE_TYPE (klass);
+ tree outer_class = klass;
+ while (INNER_CLASS_DECL_P (outer_class))
+ outer_class = DECL_CONTEXT (outer_class);
+ outer_class = TREE_TYPE (outer_class);
field = add_field (class_type,
get_identifier ("$assertionsDisabled"),
@@ -15309,9 +15313,10 @@ build_assertion (int location, tree condition, tree value)
MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (field);
FIELD_SYNTHETIC (field) = 1;
- if (!TYPE_DOT_CLASS (class_type))
- build_dot_class_method (class_type);
- classdollar = build_dot_class_method_invocation (class_type, class_type);
+ if (!TYPE_DOT_CLASS (outer_class))
+ build_dot_class_method (outer_class);
+ classdollar
+ = build_dot_class_method_invocation (outer_class, class_type);
/* Call CLASS.desiredAssertionStatus(). */
id = build_wfl_node (get_identifier ("desiredAssertionStatus"));