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
branch_1_1
jochen 25 years ago
parent 761e734973
commit 80e2a7916c
  1. 14
      jode/jode/expr/FieldOperator.java.in
  2. 2
      jode/jode/expr/InvokeOperator.java.in
  3. 23
      jode/jode/flow/TransformConstructors.java

@ -80,15 +80,23 @@ public abstract class FieldOperator extends Operator {
return null; 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() { public FieldAnalyzer getField() {
ClassInfo clazz = getClassInfo(); ClassInfo clazz = getClassInfo();
if (clazz != null) { if (clazz != null) {
ClassAnalyzer ana = methodAnalyzer.getClassAnalyzer(); ClassAnalyzer ana = methodAnalyzer.getClassAnalyzer();
while (true) { while (true) {
if (clazz == ana.getClazz()) { if (clazz == ana.getClazz()) {
return ana.getField(ana.getFieldIndex int field = ana.getFieldIndex
(ref.getName(), (ref.getName(), Type.tType(ref.getType()));
Type.tType(ref.getType()))); if (field >= 0)
return ana.getField(field);
return null;
} }
if (ana.getParent() == null) if (ana.getParent() == null)
return null; return null;

@ -825,7 +825,7 @@ public final class InvokeOperator extends Operator
? superClazz : ClassInfo.javaLangObject); ? superClazz : ClassInfo.javaLangObject);
} }
outer = getOuterClassInfo(clazz); outer = getOuterClassInfo(clazz);
if (jikesAnonymousInner if (jikesAnonymousInner && outer != null
&& outer.outer == null && outer.name != null) { && outer.outer == null && outer.name != null) {
Expression thisExpr = subExpressions[--length]; Expression thisExpr = subExpressions[--length];
if (thisExpr instanceof CheckNullOperator) { if (thisExpr instanceof CheckNullOperator) {

@ -261,7 +261,7 @@ public class TransformConstructors {
/* slot counts from last slot down. */ /* slot counts from last slot down. */
int start = 1; int start = 1;
if (subExpr.length > 1 && slot > 1) { if (subExpr.length > 2) {
LocalLoadOperator llop = (LocalLoadOperator) subExpr[1]; LocalLoadOperator llop = (LocalLoadOperator) subExpr[1];
if (llop.getLocalInfo().getSlot() == slot) { if (llop.getLocalInfo().getSlot() == slot) {
@ -344,11 +344,11 @@ public class TransformConstructors {
} else } else
outerValues.setCount(minOuter); outerValues.setCount(minOuter);
if (jikesAnon)
outerValues.setJikesAnonymousInner(true);
if ((GlobalOptions.debuggingFlags if ((GlobalOptions.debuggingFlags
& GlobalOptions.DEBUG_CONSTRS) != 0) & GlobalOptions.DEBUG_CONSTRS) != 0)
GlobalOptions.err.println(" succeeded: "+outerValues); GlobalOptions.err.println(" succeeded: "+outerValues);
if (jikesAnon)
outerValues.setJikesAnonymousInner(true);
cons[0].setAnonymousConstructor(true); cons[0].setAnonymousConstructor(true);
superBlock.removeBlock(); superBlock.removeBlock();
type0Count++; type0Count++;
@ -499,7 +499,9 @@ public class TransformConstructors {
int firstParam = 1; int firstParam = 1;
Expression outer0 = null; 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. /* check if the outerValues[0] param is present.
* we can't be sure if maxOuterCount equals 1, but * we can't be sure if maxOuterCount equals 1, but
* we assume so. * we assume so.
@ -658,6 +660,8 @@ public class TransformConstructors {
int field = clazzAnalyzer.getFieldIndex(pfo.getFieldName(), int field = clazzAnalyzer.getFieldIndex(pfo.getFieldName(),
pfo.getFieldType()); pfo.getFieldType());
if (field < 0)
break big_loop;
FieldAnalyzer fieldAna = clazzAnalyzer.getField(field); FieldAnalyzer fieldAna = clazzAnalyzer.getField(field);
/* Don't check for final. Jikes sometimes omits this attribute. /* Don't check for final. Jikes sometimes omits this attribute.
@ -725,10 +729,6 @@ public class TransformConstructors {
public int transformOneField(int lastField, StructuredBlock ib) { public int transformOneField(int lastField, StructuredBlock ib) {
if ((GlobalOptions.debuggingFlags
& GlobalOptions.DEBUG_CONSTRS) != 0)
GlobalOptions.err.println("fieldInit: "+ib);
if (!(ib instanceof InstructionBlock)) if (!(ib instanceof InstructionBlock))
return -1; return -1;
@ -752,7 +752,7 @@ public class TransformConstructors {
clazzAnalyzer.getClazz())) { clazzAnalyzer.getClazz())) {
if ((GlobalOptions.debuggingFlags if ((GlobalOptions.debuggingFlags
& GlobalOptions.DEBUG_CONSTRS) != 0) & GlobalOptions.DEBUG_CONSTRS) != 0)
GlobalOptions.err.println("not this: "+instr); GlobalOptions.err.println(" not this: "+instr);
return -1; return -1;
} }
} }
@ -764,13 +764,14 @@ public class TransformConstructors {
if ((GlobalOptions.debuggingFlags if ((GlobalOptions.debuggingFlags
& GlobalOptions.DEBUG_CONSTRS) != 0) & GlobalOptions.DEBUG_CONSTRS) != 0)
GlobalOptions.err.println("field " + pfo.getFieldName() GlobalOptions.err.println(" field " + pfo.getFieldName()
+ " = " + expr); + " = " + expr);
int field = clazzAnalyzer.getFieldIndex(pfo.getFieldName(), int field = clazzAnalyzer.getFieldIndex(pfo.getFieldName(),
pfo.getFieldType()); pfo.getFieldType());
if (field < lastField // if field does not exists: -1 <= lastField.
if (field <= lastField
|| !(clazzAnalyzer.getField(field).setInitializer(expr))) { || !(clazzAnalyzer.getField(field).setInitializer(expr))) {
if ((GlobalOptions.debuggingFlags if ((GlobalOptions.debuggingFlags
& GlobalOptions.DEBUG_CONSTRS) != 0) & GlobalOptions.DEBUG_CONSTRS) != 0)

Loading…
Cancel
Save