X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FIR%2FTree%2FBuildIR.java;h=c8efb8e7bc29898770e26fdbb7b1bb8a90733140;hb=d396c42d2a86460c7e220d21e5219049c177c5cf;hp=a12dcf0a36aa0595d9c70d0598a4969b12f15c0b;hpb=b9299937e1f902199ac28e203cf5fea92b5ba427;p=IRC.git diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index a12dcf0a..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