From 80e2a7916c0f69dd6e4764de054e02dc621175bd Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 4 Nov 1999 17:50:53 +0000 Subject: [PATCH] fixed some bugs for method scoped classes git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@1196 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/expr/FieldOperator.java.in | 14 +++++++++++--- jode/jode/expr/InvokeOperator.java.in | 2 +- jode/jode/flow/TransformConstructors.java | 23 ++++++++++++----------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/jode/jode/expr/FieldOperator.java.in b/jode/jode/expr/FieldOperator.java.in index d810ca5..e23becb 100644 --- a/jode/jode/expr/FieldOperator.java.in +++ b/jode/jode/expr/FieldOperator.java.in @@ -80,15 +80,23 @@ public abstract class FieldOperator extends Operator { return null; } + /** + * Returns the field analyzer for the field, if the field is + * declared in the same class or some outer class as the method + * containing this instruction. Otherwise it returns null. + * @return see above. + */ public FieldAnalyzer getField() { ClassInfo clazz = getClassInfo(); if (clazz != null) { ClassAnalyzer ana = methodAnalyzer.getClassAnalyzer(); while (true) { if (clazz == ana.getClazz()) { - return ana.getField(ana.getFieldIndex - (ref.getName(), - Type.tType(ref.getType()))); + int field = ana.getFieldIndex + (ref.getName(), Type.tType(ref.getType())); + if (field >= 0) + return ana.getField(field); + return null; } if (ana.getParent() == null) return null; diff --git a/jode/jode/expr/InvokeOperator.java.in b/jode/jode/expr/InvokeOperator.java.in index 46e2433..f1fcb0c 100644 --- a/jode/jode/expr/InvokeOperator.java.in +++ b/jode/jode/expr/InvokeOperator.java.in @@ -825,7 +825,7 @@ public final class InvokeOperator extends Operator ? superClazz : ClassInfo.javaLangObject); } outer = getOuterClassInfo(clazz); - if (jikesAnonymousInner + if (jikesAnonymousInner && outer != null && outer.outer == null && outer.name != null) { Expression thisExpr = subExpressions[--length]; if (thisExpr instanceof CheckNullOperator) { diff --git a/jode/jode/flow/TransformConstructors.java b/jode/jode/flow/TransformConstructors.java index 90c563b..70aa191 100644 --- a/jode/jode/flow/TransformConstructors.java +++ b/jode/jode/flow/TransformConstructors.java @@ -261,7 +261,7 @@ public class TransformConstructors { /* slot counts from last slot down. */ int start = 1; - if (subExpr.length > 1 && slot > 1) { + if (subExpr.length > 2) { LocalLoadOperator llop = (LocalLoadOperator) subExpr[1]; if (llop.getLocalInfo().getSlot() == slot) { @@ -344,11 +344,11 @@ public class TransformConstructors { } else outerValues.setCount(minOuter); + if (jikesAnon) + outerValues.setJikesAnonymousInner(true); if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_CONSTRS) != 0) GlobalOptions.err.println(" succeeded: "+outerValues); - if (jikesAnon) - outerValues.setJikesAnonymousInner(true); cons[0].setAnonymousConstructor(true); superBlock.removeBlock(); type0Count++; @@ -499,7 +499,9 @@ public class TransformConstructors { int firstParam = 1; Expression outer0 = null; - if (maxOuterCount > 0 && outerValues.getCount() > 0) { + if (maxOuterCount > 0 + && methodParams.length > 1 + && outerValues.getCount() > 0) { /* check if the outerValues[0] param is present. * we can't be sure if maxOuterCount equals 1, but * we assume so. @@ -658,6 +660,8 @@ public class TransformConstructors { int field = clazzAnalyzer.getFieldIndex(pfo.getFieldName(), pfo.getFieldType()); + if (field < 0) + break big_loop; FieldAnalyzer fieldAna = clazzAnalyzer.getField(field); /* Don't check for final. Jikes sometimes omits this attribute. @@ -725,10 +729,6 @@ public class TransformConstructors { public int transformOneField(int lastField, StructuredBlock ib) { - if ((GlobalOptions.debuggingFlags - & GlobalOptions.DEBUG_CONSTRS) != 0) - GlobalOptions.err.println("fieldInit: "+ib); - if (!(ib instanceof InstructionBlock)) return -1; @@ -752,7 +752,7 @@ public class TransformConstructors { clazzAnalyzer.getClazz())) { if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_CONSTRS) != 0) - GlobalOptions.err.println("not this: "+instr); + GlobalOptions.err.println(" not this: "+instr); return -1; } } @@ -764,13 +764,14 @@ public class TransformConstructors { if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_CONSTRS) != 0) - GlobalOptions.err.println("field " + pfo.getFieldName() + GlobalOptions.err.println(" field " + pfo.getFieldName() + " = " + expr); int field = clazzAnalyzer.getFieldIndex(pfo.getFieldName(), pfo.getFieldType()); - if (field < lastField + // if field does not exists: -1 <= lastField. + if (field <= lastField || !(clazzAnalyzer.getField(field).setInitializer(expr))) { if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_CONSTRS) != 0)