X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FIR%2FTree%2FBuildIR.java;h=c8efb8e7bc29898770e26fdbb7b1bb8a90733140;hb=d396c42d2a86460c7e220d21e5219049c177c5cf;hp=5d2b689beed7e233939c2140afae36d1b6ba5eb0;hpb=d56ced93c269c5840dc396bc4d9faa02ffb3280b;p=IRC.git diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index 5d2b689b..c8efb8e7 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -184,18 +184,41 @@ public class BuildIR { public void parseInitializers(ClassDescriptor cn) { Vector fv=cn.getFieldVec(); + Iterator methodit = cn.getMethods(); + HashMap md2pos = new HashMap(); + while(methodit.hasNext()) { + MethodDescriptor currmd=(MethodDescriptor)methodit.next(); + if(currmd.isConstructor()) { + BlockNode bn=state.getMethodBody(currmd); + // if there are super(...) invokation, the initializers should be invoked after that + int i = 0; + for(; i < bn.size(); i++) { + if(Kind.BlockExpressionNode==bn.get(i).kind() + &&(((BlockExpressionNode)bn.get(i)).getExpression() instanceof MethodInvokeNode) + &&((MethodInvokeNode)(((BlockExpressionNode)bn.get(i)).getExpression())).getMethodName().equals("super")) { + break; + } + } + if(i==bn.size()) { + md2pos.put(currmd, 0); + } else { + md2pos.put(currmd, i+1); + } + } + } int pos = 0; for(int i=0; i