X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FIR%2FFlat%2FBuildFlat.java;h=98070b7fcd52425aa229eefcec5faacf5b061c57;hb=7d9444125d973802b28173ac2533e8930e64c675;hp=6c58090e6c740c4dc6c5488a6cc07a069017363d;hpb=3b16dfab9b7b6606bf87cbc5a3e77261bd545dd7;p=IRC.git diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java index 6c58090e..98070b7f 100644 --- a/Robust/src/IR/Flat/BuildFlat.java +++ b/Robust/src/IR/Flat/BuildFlat.java @@ -6,10 +6,13 @@ import java.util.*; public class BuildFlat { State state; Hashtable temptovar; + MethodDescriptor currmd; + TypeUtil typeutil; - public BuildFlat(State st) { + public BuildFlat(State st, TypeUtil typeutil) { state=st; temptovar=new Hashtable(); + this.typeutil=typeutil; } public Hashtable getMap() { @@ -22,22 +25,132 @@ public class BuildFlat { ClassDescriptor cn=(ClassDescriptor)it.next(); flattenClass(cn); } + + Iterator task_it=state.getTaskSymbolTable().getDescriptorsIterator(); + while(task_it.hasNext()) { + TaskDescriptor td=(TaskDescriptor)task_it.next(); + flattenTask(td); + } } + private void flattenTask(TaskDescriptor td) { + BlockNode bn=state.getMethodBody(td); + NodePair np=flattenBlockNode(bn); + FlatNode fn=np.getBegin(); + if (np.getEnd().kind()!=FKind.FlatReturnNode) { + FlatReturnNode rnflat=new FlatReturnNode(null); + np.getEnd().addNext(rnflat); + } + + FlatFlagActionNode ffan=new FlatFlagActionNode(FlatFlagActionNode.PRE); + ffan.addNext(fn); + + FlatMethod fm=new FlatMethod(td); + fm.addNext(ffan); + + Hashtable visitedset=new Hashtable(); + + for(int i=0;i